1. static:
(1) 属性:静态属性-->类被加载时调用。
没用static来修饰的是"实例属性":描述对象的特征,先创建对象才有它.
什么时候定义成静态属性或者实例属性?
答:例如动物园的鸟、猴子,它们的特征用实例属性,
而动物园的count数量 则用静态属性。
(2) 方法:静态方法中不能访问非静态的属性或者方法。
但是非静态方法可以访问静态的属性。
(3) 代码块:定义类中。
作用:做一些类的准备工作,在类被加载时调用,而且只被加载一次,
所以用来测试类是否被加载。
(4) 静态方法不可被覆盖,如果子类和父类有重名的静态方法,虽然编译通过,但并不能实现多态,所以不能
叫"覆盖"。例如:Animal a = new Bird(); a.move();如果是"多态"的话应该输出的结果为,子类中的结果,
但是实际不是,它是调用的是父类中的方法。所以不能叫"覆盖(多态)"。
2. final:(在方法里面定义的变量必须是final类型的,否则就会编译不通过)
(1) 局部变量:基本数据类型值不被改变;如为引用类型则指向的地址不被改变。
final可以修改变量:包括"局部变量(在方法内部的变量叫局部变量)",和"实例变量"也叫"类变量"是在类中定义的,即是"成员变量"就叫"类变量"或"实例变量".这里的"实例变量"包括"全局变量和静态变量"。
(2) 属性:常量。有2中赋值方式:
一、直接赋值。
二、通过构造函数赋值。
但是如果和static一起使用的话:就必须直接赋值。
(3) 方法:这个方法不能被覆盖。
(4) 类:这个类不能被继承。且类中的方法默认都是fianl的。
3. 静态代码块和main函数执行顺序的详解:
(1) 情况一:在主函数中有个main函数和静态代码块。
顺序如下:先执行静态代码块--->在执行main函数的入口--->再执行构造函数--->main函数结束。
(2) 情况二:在主函数中只有个main函数没有静态代码块。
顺序如下:先执行main函数的入口--->父类的静态代码块--->子类的静态代码块--->父类的构造函数--->子类的构造函数--->子类的方法--->main函数结束。
4. 类加载时机:
(1) 生成类对象的时候一定会加载.
(2) 没有生成类的对象,但是访问了类的静态成员(包括方法或属性)时候也加载.
(3) 定义类的引用的时候,不加载!(只是定义空的引用而已).
(4) 创建子类时,先加载父类(首先要生成父类的对象).
5. 注意!
通过子类名去调用父类中的静态方法时,只加载父类而不加载子类。
6.abstract的解说:
(1) 可不可以定义一个引用呢?
可以的。即AbstractTest t = new 子类(); 作用是为了用"多态".
(2) 但是不能用new来实例化。
(3) 能不能有构造方法呢?
可以的。这里的构造方法的作用只是让子类的对象能够编译通过,但不是用来new的(即实例化父类对象的)。
(4) 可以用子类来实现父类中的所有方法。
7. 接口的解说:
(1) 一个类可以实现多个接口,实现这个接口的类中的方法应当为public的(不能省略的)。
(2) 接口中的变量默认为:public static final (这个可以省略的)。
接口中的方法默认为:public abstract (这个可以省略的)。
(3) java中的类是单继承,而接口可以多继承。
(4) 接口中不能有构造方法,即不能用new()。
(5) 接口和接口之间只有继承(可以多继承)。
类与类直接也只有继承关系(单继承)。
类可以实现多个接口。