1.static
a.什么时候用static来修饰成员 当这个成员不属于某一个对象,而是属于所有对象,或者属于这个类,那么需要用static来修饰它
b.被static修饰的成员,有什么特点?
i.存在方法区中的静态区,只有一个空间
ii.静态是优先于对象存在
iii.如何访问静态成员
对象名.静态成员;//这是可以的,但是不建议 类名.静态成员;//建议用的
2.final
final修饰类(太监类): 不能被继承(没有子类),但是可以是其他类的子类
final修饰方法(最终方法,牛逼方法):子类不能重写
final修饰成员变量:
a.这个成员变量在创建对象之前必须初始化(直接赋值,在构造方法中赋值) b.只能赋值一次
final修饰局部变量:
a.基本类型: 该变量只能赋值一次(实际上就是常量)
b.引用类型:该引用类型的变量保存的地址不能改变,但是地址指向空间中的内存可以改变
final Person p = new Person();
p = new Person();//错误的
p.name = "";//正确的
p.age = 18;//正确的
3.权限修饰符
public protected 不写(default) private
如果一个成员只想在本类中使用 用private修饰
如果一个成员只想在本类中和本包的其他类中使用 不写修饰
如果一个成员只想在本类中使用和本包中使用或者其他包的子类中使用 用protected修饰
如果一个成员想在所有类中都可以使用 用public修饰
4.内部类:
根据内部类定义位置不同的分类:
a.成员内部类:定义类中方法外
在其他类中如何创建该类的对象
固定格式:
外部类名.内部类名 变量名 = new 外部类().new 内部类();
b.局部内部类:定义方法中
在其他类中,是无法使用
只能局部位置使用
5.静态代码块:
代码块,在成员位置 使用大括号括起来的一堆代码
public class Person{
//静态代码块
static{
代码块
}
public void show(){
}
}
特点:
1.当我们使用到一个类时,那么这类中的静态代码块自动执行
2.只会执行一次,第一次使用该类,就立刻执行
3.在同一个类中,静态代码块的优先级很高,比构造方法优先,比main方法优先
4.作用: 比如 用来初始化类中某些功能(mysql的数据库驱动的加载)
6.匿名内部类
a.作用: 快速创建 抽象类的子类对象,接口的实现类对象.
b.格式:
第一种:
new 抽象类(){
//重写抽象类中所有的方法
};
第二种
new 抽象类(){
//重写抽象类中所有的方法
}.重写后的方法();
第三种
接口类型 变量名 = new 接口(){
//重写接口中所有的方法
};
1.类作为方法的参数或者返回值
我们需要传递的或者返回的,应该该类的对象(不是该类,也不是别的类的对象)
2.抽象类 作为方法的参数和返回值
我们需要传递的或者返回的,该抽象类的子类的对象
3.接口作为方法参数和返回值
我们需要传递的或者返回的,该接口的实现类的对象