1.package语句必须是可执行代码的第一句
2.四种权限修饰符
本类 | 同一个包下(子类和无关类) | 不同包下(子类) | 不同包下(无关类) | |
private | Y | |||
默认 | Y | Y | ||
protected | Y | Y | Y | |
public | Y | Y | Y | Y |
3.常见修饰符
(1)修饰符: 权限修饰符:private,默认的,protected,public
状态修饰符:static,final
抽象修饰符:abstract
(2)类:权限修饰符:默认修饰符,public
状态修饰符:final
抽象修饰符:abstract
用的最多的就是:public
(3)成员变量:权限修饰符:private,默认的,protected,public
状态修饰符:static,final
用的最多的就是:private
(4)构造方法:权限修饰符:private,默认的,protected,public
用的最多的就是:public
(5)成员方法:权限修饰符:private,默认的,protected,public
状态修饰符:static,final
抽象修饰符:abstract
用的最多的就是:public
(6)除此以外的组合规则: 成员变量:public static final 接口
成员方法: public static public abstract public final
4.内部类
(1)访问特点:内部类可以直接访问外部类的成员,包括私有
外部类要访问内部类的成员,必须创建对象。
(2)局部内部类访问局部变量必须用final修饰
局部内部类在访问他所在方法中的局部变量必须用final修饰,为什么?
因为当调用这个方法时,局部变量如果没有用final修饰,他的生命周期和方法的生命周期是一样的,当方法弹栈,这个局部变量也会消失,那么如果局部内部类对象还没有马上消失想用这个局部变量,就没有了,如果用final修饰会在类加载的时候进入常量池,即使方法弹栈,常量池的常量还在,也可以继续使用 (jdk1.8取消了这个事情)
(3)匿名内部类 :1)前提:存在一个类或者接口
2)格式:new 类名或者接口名(){
重写方法;
}