static
1.实例方法与类方法
①实例方法既可以操作实例变量也可以操作类变量,可以调用该类中的实例方法或类方法
②类方法无法操作实例变量与方法,只能操作类变量和该类的类方法
|*** 一个类中的方法可以互相调用 ***|
2.实例变量与类变量
①类变量既可以通过某个对象访问,也可以直接通过类名访问
②实例变量仅仅是和相应的对象关联的变量,即不同对象的实例变量互不相同
实例变量只能通过对象访问
3.适用条件
如果一个方法不需要操作实例成员变量就可以实现某种功能,
就可考虑将这样的方法声明为类方法,好处是避免创建对象浪费内存
this
1.在构造方法中
当this出现在类的构造方法中,代表使用该构造方法所创建的对象
2.在实例方法中
当this出现在类的实例方法中,代表正在使用该方法的当前对象
abstract
1. 类
①abstract 类中可以有abstract方法
②abstract 类不能用new创建对象
③一个非abstract类是abstract的子类,他必须重写父类的abstract方法
一个abstract类是abstract的子类,它可以重写也可以继承父类的abstract方法
④abstract类的对象作上转型对象
2.方法
abstract方法只允许声明,不允许实现,而且不允许使用final和abstract同时修饰一个方法
3.如何理解abstract
抽象出重要行为标准,再去调用子类重写方法
4. abstract类和接口对比
①abstract类和接口都可以由abstract方法
②接口中只能有常量,不能有变量;而abstract既可以用常量也可以有变量
③abstract类中也可以有非abstract方法,不可以有default实例方法
接口不可以有非abstract方法,可以有default实例方法
④abstract还可以提供子类可以集成的变量和非abstract方法,如果问题涉及到继承,abstract比较好
final
1.final类
final类不允许继承,没有子类
2.final方法
final方法不能被重写
访问权限
访问限制修饰符有public,protected,private(按照访问权限从高到低排列),是用来修饰成员变量或方法
1.private
①对于私有成员变量和方法,只有在本类中创建该类的对象时,这个对象才能访问自己的私有成员变量和类中的私有方法
②当用某个类在另外一个类中创建对象后,如果不希望该对象直接访问自己的变量,就设置为private
2.protected
①必须在同一个包中的类才能互相访问protected变量和方法,同一个包的任何类可以通过类名来访问protected变量和方法
3.public
都可以
4.友好
和protected类似
注意: 如果子类和父类在同一个包中,那么,子类继承了父类的protected、public成员变量做为子类的成员变量,并且继承了父类的protected、public方法为子类的方法。如果子类和父类不在同一个包里,子类不能继承父类的友好变量和友好方法。
内部类
1.关系
①内部类的外嵌类的成员变量在内部类中仍然有效,内部类中的方法也可以调用外嵌类的方法
②内部类的类体中不可以声明类变量和方法,外嵌类的类体中可以用内部类声明对象作为外嵌类成员
③内部类仅供他的外嵌类使用,其他类不可用其声明对象
匿名类
匿名类是是一个子类,没有类名,使用匿名类创建对象时直接使用父类的构造方法
1.特点
①匿名类可以继承父类的方法也可重写父类的方法
②匿名类一定是内部类,匿名类可以访问外嵌类的成员变量及方法,类体中不可声明static变量与方法
③匿名类的常用方式时想方法的参数传值
lambda表达式
本质是一个匿名方法,目的是在使用但接口(只有一个方法的接口)匿名类时让代码更简洁,
但是不提倡使用
1.形式
正常方法 int f(int a , int b){
return a+b }
Lambda表达式:
(int a , int b) -> {
return a + b }