?
final修饰符
final变量:
final变量能被显式地初始化并且只能初始化一次,被声明为final的对象的引用不能指向不同的对象,但是final对象里的数据可以被改变。也就是说final对象的引用不能改变,但是里面的值可以改变,final修饰符通常和static修饰符一起来创建类常量。
final方法:
类中的final方法可以被子类继承,但是不能被子类修改。
声明final方法的主要目的是防止该方法的内容被修改。
如下所示,使用final修饰符的声明方法。
final类:
final类不能被继承,没有类能够继承final的任何特性。
?
初始化过程:
1.初始化父类的静态成员变量和静态代码块;
2.初始化子类的静态成员变量和静态代码块;
3.初始化父类的普通成员变量和代码块,再执行父类的构造方法;
4.初始话子类的普通成员变量和代码块,再执行子类的构造方法;
本题:
(1)初始化父类的普通成员变量和代码块,执行Y y = new Y();输出Y
(2)再执行父类的构造方法,输出X
(3)初始化子类的普通成员变量和代码块,执行Y y = new Y();输出Y
(4)再执行子类的构造方法;输出Z
所以输出YXYZ
?
重载的定义:
1.函数或者方法有相同的名称
2.参数的列表不相同
3.与返回值的类型无关
?
?
MyClass方法并不是构造参数,而是返回类型为void的普通方法,普通方法自然需要实例化
对象后去调用它A、B可以使用函数的默认无参构造器,C传入了一个int值,与方法的传入参
数类型不一致。
?
A:抽象类也是一个类,有构造方法的
B:接口不允许有构造函数,不过是可以实例化的
C:类是不允许多继承的,抽象类也如此
?D:jdk1.8开始,接口中的方法才可以有方法体
接口:
1.多实现
2.变量类型默认且之只能为public static final
3.函数类型默认且只能为public,只能有public类型的静态成员函数
4.子类必须实现所有的接口函数
5.可以用main方法,可以new一个接口,需要在方法体中实现多有的接口函数
6.没有构造器,可以实例化
抽象类:
1.abstract修饰的类,不能实例化的类
2.可以有构造器
3.可以有抽象方法的,也可以没有
4.有抽象方法的类一定是抽象类
Jdk1.8
接口中可以有default类型的方法,实现类可以选择实现该方法
意义:默认方法的主要优势是提供一种拓展接口的方法,而不破坏现有代码。另一个优势为该方法是可选的,子类可以根据不同的需求Override或默认实现。
?
?
主方法变量没有初始化直接编译错误,方法中的引用调用没有初始化才是空指针异常
?
?
其余知识点
对属性使用getter和setter方法,体现的是注入性。
栈:临时变量/局部变量
堆:对象,对象中的成员变量/属性
方法区:类的相关信息
引用:指向对象,变量类型
对象:new出来的,存在堆中
成员变量不需要初始化
局部变量需要初始化