文章目录
- 1.final关键字
- 2.常量
- 3.抽象类
- 3.1概括
- 3.2 抽象方法
- 4. 接口
- 4.1 接口在开发中的作用
- 4.2类型和类型之间的关系
- 4.3抽象类和接口的区别
- 5.包机制和import
- 5.1 包机制
- 5.2 import
- 6.访问控制权限
- 7.Object
- 7.1 toString()
- 7.2 equals()
- 7.3 String类重写了toString和equals
- 8.内部类
- 8.1 概述
- 8.2内部类示例
- 8.3 匿名内部类
- 9.数组
- 9.1声明
- 9.2 初始化
- 9.3 main方法的String数组
- 9.4数组扩容
- 9.5 二维数组
- 9.6Array
1.final关键字
final修饰的类无法继承
final修饰的方法无法被覆盖,被重写。
final修饰的局部变量,一旦赋值,就不能再赋值。
final修饰的引用,只能指向同一个对象,不能再指向其它对象。在该方法中,该引用指向该对象后,该对象不会被垃圾回收器回收。直到该方法结束。
fianl修饰的实例变量,系统不管,程序员必须手动赋值。在变量后面赋值可以,在构造方法中赋值也可以。
2.常量
final修饰的实例变量一般添加static修饰。
3.抽象类
3.1概括
类和类之间有共同特征,将共同特征提取出来,构成抽象类。
抽象类也属于引用数据类型。
语法:
[修饰符列表] abstract class 类名 {类体;
}
抽象类无法被实例化,但抽象类有构造方法,供子类使用。
3.2 抽象方法
抽象类不一定有抽象方法,抽象方法一定在抽象类中。
非抽象类继承抽象类的时候,非抽象类要将父类继承过来的抽象方法进行重写。
4. 接口
接口也是一种引用数据类型,编译后也生成.class字节码
语法:
[修饰符列表] interface 接口名{}
接口支持多继承
接口中只有常量和抽象方法。
接口中的方法定义时 public abstract 可以省略。
接口中的常量定义时 public static final 可以省略。
类和接口之间叫做实现。使用implements关键字。
类和类之间叫做继承。使用extends关键字。
当一个非抽象类实现一个接口时,必须重写接口中的所有抽象方法。
4.1 接口在开发中的作用
4.2类型和类型之间的关系
4.3抽象类和接口的区别
5.包机制和import
5.1 包机制
package 包名
注:该语句只能出现在java源代码的第一行。
包名一般为:公司域名倒序 + 项目名 + 模块名 + 功能名
使用包机制后,编译
javac -d . HelloWorld.java
运行使用
java 包名.原来的类名
(类名改变)
5.2 import
6.访问控制权限
7.Object
7.1 toString()
package com.sdnu.test01;public class MyTime {public static void main(String[] args) {TestTime testTime = new TestTime();System.out.println(testTime.toString());TestTime testTime1 = new TestTime(2000, 2, 6);System.out.println(testTime1.toString());}
}
class TestTime {int year;int month;int day;public TestTime(){}public TestTime(int year, int month, int day){this.year = year;this.month = month;this.day = day;}/*** 重写* @return String*/public String toString(){return "testTime" + "@" + this.year + "\\" + this.month + "\\" + this.day;}
}
testTime@0\0\0
testTime@2000\2\6
7.2 equals()
该方法返回是否是同一个对象。
package com.sdnu.test01;import java.util.Objects;public class TestEquals {int year;int month;int day;public TestEquals() {}public TestEquals(int year, int month, int day) {this.year = year;this.month = month;this.day = day;}public int getYear() {return year;}public int getMonth() {return month;}public int getDay() {return day;}@Overridepublic String toString() {return "TestEquals{" +"year=" + year +", month=" + month +", day=" + day +'}';}@Overridepublic boolean equals(Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;TestEquals that = (TestEquals) o;return year == that.year &&month == that.month &&day == that.day;}public static void main(String[] args) {TestEquals testEquals = new TestEquals();TestEquals testEquals1 = new TestEquals(2000, 2, 8);System.out.println(testEquals.equals(testEquals1));}
}
7.3 String类重写了toString和equals
8.内部类
8.1 概述
在类的内部又定义了一个新的类。
分类:静态内部类,实例内部类,局部内部类。
8.2内部类示例
package com.sdnu.test01;public class Inner {static class Inner1{}class Inner2{}public void method(){class Inner3{}}
}
8.3 匿名内部类
9.数组
9.1声明
类型[] 数组名
9.2 初始化
静态初始化:
类型[] 数组名 = {12, 23, 45};
动态初始化:
类型[] 数组名 = new 类型[数组长度];
9.3 main方法的String数组
9.4数组扩容
创建一个大的数组,然后将小数组的数据拷贝到大数组中。
package com.sdnu.javase.array;public class ArrayTest01 {public static void main(String[] args) {int[] src = {12, 23, 45};int[] dest = new int[20];System.arraycopy(src, 0, dest, 0, src.length);for(int i = 0; i < src.length; i++){System.out.println(dest[i]);}}
}
9.5 二维数组
声明和初始化
int 数组名[][] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
9.6Array
java.util.Arrays