java 基础难点笔记
static
//代码块不能被调用自动执行,用来初始化类或对象
//静态代码快随着类的加载而执行(不是加载是执行),并且只执行一次
//非静态代码块随着对象的创建而执行,每创建一个对象执行一次、
//静态方法随类的加载而加载,不执行
/静态属性会随着类的加载而初始化(赋值)
JDK1.8(含)之后接口中可以有静态方法和默认方法,接口中的静态方法只能被接口调用,不能被实现类调用
对象实例化类加载顺序
父类静态代码块(静态属性)
子类静态代码块(静态属性)
父类非静态代码块(非静态属性)
父类构造器
子类非静态代码块 (非静态属性)
子类构造器
final
常量:修饰的值不能改变,修饰引用类型,地址值不可变
可以修饰类:方法,变量,局部变量,形参
不能被继承,不能被重写,不能被修改
final 修饰属性--常量:赋值方式:显示初始化、代码块中初始化、构造器中初始化。
初始化类之后,常量必须已经赋值,所以不能在方法中赋值,方法在调用时才执行。
static final 用来修饰属性:全局常量
只能显示赋值,静态代码块中赋值。
final 修饰的属性 初始化时必须有值,所以不能在方法中赋值,因为方法不一定被调用
static final 修饰属性 ,属于类的常量,因为构造器不一定被调用,所以不能在构造器中赋值。
重写(Override)
重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。即外壳不变,核心重写!
重写的好处在于子类可以根据需要,定义特定于自己的行为。 也就是说子类能够根据需要实现父类的方法。
重写方法不能抛出新的检查异常或者比被重写方法申明更加宽泛的异常。
方法的重写规则
参数列表与被重写方法的参数列表必须完全相同。
返回类型与被重写方法的返回类型可以不相同,但是必须是父类返回值的派生类(java5 及更早版本返回类型要一样,java7 及更高版本可以不同)。
访问权限不能比父类中被重写的方法的访问权限更低。例如:如果父类的一个方法被声明为 public,那么在子类中重写该方法就不能声明为 protected。
父类的成员方法只能被它的子类重写。
声明为 final 的方法不能被重写。
声明为 static 的方法不能被重写,但是能够被再次声明。
子类和父类在同一个包中,那么子类可以重写父类所有方法,除了声明为 private 和 final 的方法。
子类和父类不在同一个包中,那么子类只能够重写父类的声明为 public 和 protected 的非 final 方法。
重写的方法能够抛出任何非强制异常,无论被重写的方法是否抛出异常。但是,重写的方法不能抛出新的强制性异常,或者比被重写方法声明的更广泛的强制性异常,反之则可以。
构造方法不能被重写。
如果不能继承一个类,则不能重写该类的方法。
重载(Overload)
重载(overloading) 是在一个类里面,方法名字相同,而参数不同。返回类型可以相同也可以不同。
每个重载的方法(或者构造函数)都必须有一个独一无二的参数类型列表。
最常用的地方就是构造器的重载。
重载规则:
被重载的方法必须改变参数列表(参数个数或类型不一样);
被重载的方法可以改变返回类型;
被重载的方法可以改变访问修饰符;
被重载的方法可以声明新的或更广的检查异常;
方法能够在同一个类中或者在一个子类中被重载。
无法以返回值类型作为重载函数的区分标准。