final (面试)
最终类不能当父亲(类)了
父类
package day05;
public class Parent {
public void t1() {
System.out.println("parent t1");
}
}
子类
package day05;
public class Child extends Parent {
private String name;
private Integer age;
public void t1() {
System.out.println("child t1");
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}
测试类
package day05;
public class Test {
public static void main(String[] args) {
// final 修饰基本数据类型
int i = 10;
System.out.println( i + 10);
// final 修改引用类型
final Child c = new Child();
System.out.println(c.getName());
c.setName("张三");
c.setAge(20);
System.out.println(c.getName());
c.setName("李四");
System.out.println(c.getName());
// final 修改引用类型时,地址不可以改 地址不变,可以对值改变
// c在栈上,c 的值为堆的地址
final int[] arr = {1, 2, 3, 4};
arr[0] = 8 ;
}
}
static
全局的,可以不用创建对象(new)直接用。
成员变量和静态变量的区别
在例子代码中就是age 和name 不同
使用时需注意
JVM的类加载顺序(重点)
注意静态资源只有类加载时运行一次
static 声明的静态资源 优先于new构造方法constructor
//注意静态资源只有类加载时,运行一次
//Parent 静态变量
//Parent 静态代码块
//先Child静态变量
//然后Child静态代码块
//--------------上面是加载时,下面是加载对象时
//Parent 普通变量
//Parent 普通代码块
//Parent 构造方法
//Child 普通变量
// Child 普通代码块
//Child 构造方法
父类
package deom03.sub;
public class Parent {
static String p1;
static {
p1 = "p1p1p1";
System.out.println("Parent构造方法");
}
public Parent(){
System.out.println("Parent 构造方法");
}
}
子类
package deom03.sub;
public class Child extends Parent{
static String c1;
//静态代码块:作用:初始化静态变量值
static {
c1 = "c1c11c1c";
System.out.println("通过静态代码块初始化了c1");
}
//多个静态代码块按照书写顺序执行
static {
c1 = "c2c11c1c";
System.out.println("通过静态代码块第二遍初始化了c1");
}
public Child() {
super();//子类,默认 调用父类构造方法
this.c2 = "c2";
System.out.println("Child构造方法");
}
//普通代码块(构造代码块):每次构造方法前(要比父亲构造方法晚)都执行
{
System.out.println("Chile普通构造方法");
}
String c2;
}
测试类
package deom03.sub;
public class Test {
public static void main(String[] args) {
System.out.println(Child.c1);
Child c = new Child();
Child c1 = new Child();
//注意静态资源只有类加载时,运行一次
//Parent 静态变量
//Parent 静态代码块
//先Child静态变量
//然后Child静态代码块
//--------------上面是加载时,下面是加载对象时
//Parent 普通变量
//Parent 普通代码块
//Parent 构造方法
//Child 普通变量
// Child 普通代码块
//Child 构造方法
}
}