1.static
static方法会在内存的方法区加载一次。显式赋值会覆盖掉原来的默认赋值,堆中new的对象静态方法指针地址都指向一个静态方法。
static和类是同时加载进内存的,可以通过类名.方法直接调用静态方法。
外部类new一个含静态方法的对象时,静态代码块已经被执行,然后有匿名代码块的话,先执行匿名代码块,最后执行构造代码块。
顺序为静态代码块、匿名代码块、构造代码块。
2.final
final修饰的成员变量只能被赋值一次。但是它没有初始化的值,所以在引用时必须初始化赋一个值。
//a必须赋值
private final int=a;
{
a=1;
}
public 类名(){
a=1;
}
3.抽象 abstract
只有声明,没有实现。表达的是like a的关系,子类完成父类方法的实现。子类like a父类。
抽象类的作用就是为了给子类继承的,子类可以去实现父类的方法。父类抽象类中是默认有一个无参构造器的。子类继承的时候也引用了父类的无参构造器。
子类完成父类方法的同时也可以添加自己个性的方法。
4.接口 interface 类,implements实现接口
抽象类中的常量都是static final修饰的,方法可以是抽象方法,也(JDK8)可以不是抽象方法。常量一般都是大写。
5.内部类
成员内部类: 直接定义在类的内部。不能定义静态属性和方法。内部类方法访问外部类变量的方法和属性: OutClass.this.方法或者属性。外部类访问内部类方法和属性:对象.方法或属性。不同类访问内部类需要new一个外部类对象然后:不同类对象.外部类对象.内部类对象.方法或属性。
静态内部类:静态内部类只能访问外部类的静态方法。内部类中的静态和非静态是可以访问到的。访问外部类静态格式 Outclass.方法。
匿名内部类:
public class Test {
public static void main(String[] args) {
new Run() {
@Override
public void Lay() {
System.out.println("匿名内部类");
}
}.Lay();
}
}
abstract class Run{
public void Lay() {
System.out.println("匿名");
}
}