Final关键字
final修饰的类不可以被继承,但是可以继承其他类
final修饰的方法,子类可以继承,但是不能重写
final修饰的局部变量,只能赋值一次,且不能改变
Final修饰引用变量:
固定对象内存地址,地址值不变,但是地址内的属性可以改变
final修饰成员变量:
成员变量在堆内存中,有默认值
final修饰成员变量,固定的不是默认值
只能手动赋值,或者构造方法赋值(不建议),不能有set方法
Static关键字
1、作为对象共享内容
对象的特有数据(非静态修饰)调用者只能是new 对象
对象的共享数据(静态修饰)调用者可以说new对象,可以是类名
2、注意:在静态中不能调用非静态
原因:生命周期,先有静态,创建对象后,才有非静态。静态内容是优先于对象存在的,只能访问静态,不能使用this/super,静态修饰的内容存在于静态区
3、常用情况:
事物之间是否有共性,将共性定义成静态
方法是否设置成静态:看方法里的成员变量
public static int Sum(int a,int b,int c){
return a+b+c
}
最好加静态,因为没有用到非静态变量
静态内容什么时候消失:这个类的静态内容在这个类被释放的时候同时释放。
Class什么时候释放:在sun 的JDK中所有的class都有它的ClassLoader,当这个ClassLoader被释放时,所有被它装度载的class也同时被释放。
匿名对象
在创建对象时,只有创建对象的语句,却没有把对象地址值赋值给某个变量,只能使用一次
常用:方法参数,方法返回值
new 类名().方法()
内部类
可以直接访问外部类的成员变量,包括私有
外部类使用内部类成员,必须建立内部类对象
1、成员内部类:将一个类定义在另一个类中
可以使用成员修饰符,可以继承实现接口,内部类编译完也是class文件
外部类名.内部类名 变量 = new 外部类名().new 内部类名()
2、局部内部类:将一个类定义在另一个类的方法中
先创建对象,再调用局部内部类
3、匿名内部类:继承一个类、实现一个接口
实现接口,重写接口抽象方法,创建实现类对象
定义实现类,重写方法,创建实例对象一步完成
格式:
new 接口或者父类(){
重写抽象方法
}.方法名();
权限修饰符
public protected default private
同一类中 √ √ √ √
同一包中(子类与无关类) √ √ √
不同包中的子类 √ √
不同包中的无关类 √
注:protected在不同包中,只能在子类中使用,子类对象不能调用
代码块
构造代码块:{}
new一次,就执行一次,优先于构造方法
静态代码块:static{}
只执行一次
字符串
Person p =new Person();
System.out.println(p) 等于 System.out.println(p.toString())
String str = ”hello world”
str是引用变量,”hello world”是字符串对象,一旦申明不可改变。改变的是引用变量指向的内存空间
字符串是常量,本质是一个字符数组。