1.this和super在类中属于非静态的变量。(静态方法中不能使用)
2.静态方法"不可以"直接访问类中的非静态变量和非静态方法,但是"可以"直接访问类中的静态变量和静态方法。
3.非静态方法"可以"直接访问类中的非静态变量和非静态方法,也"可以"直接访问类中的静态变量和静态方法。
4.父类的静态方法可以被子类继承,但是不能被子类重写。
5.创建和初始化对象的过程
Student s = new Student();
- Student类之前没有进行类加载
- 类加载,同时默认初始化类中静态的属性
- 执行静态代码块
- 分配内存空间,同时初始化非静态的属性(赋默认值,0/false/null)
- 调用Student的父类构造器
- 对Student中的属性进行显示赋值(如果有的话)
- 执行匿名代码块
- 执行构造器
- 返回内存地址
注:子类中非静态属性的显示赋值是在父类构造器执行完之后和子类中的匿名代码块执行之前的时候。
- Student类之前已经进行了类加载
- 分配内存空间,同时初始化非静态的属性(赋默认值,0/false/null)
- 调用Student的父类构造器
- 对Student中的属性进行显示赋值(如果有的话)
- 执行匿名代码块
- 执行构造器
- 返回内存地址
6.用final修饰的类不能被继承,没有子类。用final修饰的方法可以被继承,但是不能被子类的重写。用final修饰的变量表示常量,只能被赋一次值。其实使用final修饰的变量也就成了常量了,因为值不会再变了。(Math.PI)
7.抽象类和抽象方法的关系,抽象类中可以没有抽象方法,但是有抽象方法的类一定要声明为抽象类。
8.抽象类,不能使用new关键在来创建对象,它是用来让子类继承的。
抽象方法,只有方法的声明,没有方法的实现,它是用来让子类实现的。
注:子类继承抽象类后,需要实现抽象类中没有实现的抽象方法,否则这个子类也要声明为抽象类。
9.接口中的方法都是抽象方法。接口中的变量都是静态常量(public static final修饰)。注:声明的同时就必须赋值。(因为接口中不能编写静态代码块)
10.注:System.out.println(o instanceof X);
如果o是一个接口类型声明的变量,那么只要X不是一个final修饰的类,该代码就能通过编译,至于其结果是不是true,就要看变量o指向的对象的实际类型,是不是X的子类或者实现类了。
11. public protected default private是java中的访问控制修饰符.
类中 同包类中 不同包子类中 不同包类中
public Y Y Y Y
protected Y Y Y N
default Y Y N N
private Y N N N
注:这里的子类中默认指的是不同包下面的子类
在不同包下的子类中,使用父类对象调用属性: 只能调用public 修饰的属性,无法调用protected修饰的