一、权限修饰符
限定 类方法、属性、构造方法的使用范围
修饰符 | 类 | 同包 | 不同包子类 | 不同包非子类 |
---|---|---|---|---|
public | Y | Y | Y | Y |
protected | Y | Y | Y | N |
(默认的) | Y | Y | N | N |
private | Y | N | N | N |
外部类只能使用public和默认的权限修饰符修饰
内部类可以使用所有的权限修饰符
二、abstract,final
final是最终的
可修饰
1、变量 属性就会变成常量
2、类 最终类,不能作为父类
3、方法 最终方法,不能被子类重写
abstract和final功能是冲突的,不能同时使用
final变量:这个变量就不能被修改,常量 , 接口里面: public static final double PI = 3.1415;
final类:这个类就不能被继承
final方法:这个方法就不能被重写
三、this、super
3.1this
两种方式:
1)this()/this(参数列表)
只能出现构造方法中,必须是构造方法的第一行
调用当前类的其它构造方法
2)this.属性/方法名
调用当前对象的属性
在构造方法中,this代表当前被创建的对象
在普通方法中,this就是调用当前方法的对象
3.2super
两种使用方式
1)super()
只能用在构造方法中,必须是第一行
调用父类的构造方法
2)super.属性/方法名
在子类中,调用父类的属性和方法
四、static
static 静态的
使用static修饰的东西都是静态的
都是直属于类的,不需要依赖于对象
类的所有对象都会共享他的静态资源
4.1、属性
1)静态属性:类属性
使用了static修饰的属性
使用:类名.静态属性 /对象名.静态属性
静态属性是不依赖于对象的
2)非静态属性:对象属性,实例属性
没使用static修饰的属性
使用:对象名.非静态属性
4.2方法
1)静态方法:类方法
2)非静态方法:对象方法,实例方法
注意:
1)静态方法中只能调用静态方法,要调用非静态方法,要先生成一个对象再调用,再调用
2)静态方法中只能访问静态属性,非静态属性先生成对象。
4.3类
static 只能修饰内部类
4.4块
块:类中的花括号{};
static{
//这就是一个静态块
}
{
//这就是一个块
}
五、JVM加载类的流程
从上往下依次执行
①使用类时
1.JVM加载类,加载到方法区
2.声明类中的静态资源
3.从上往下一步步执行静态代码
——如果一个静态属性没有初始化,给它一个类0的默认值
②创建对象时
1.定义非静态属性
2、执行非静态代码
——如果一个非静态属性没有初始化,给它一个类0的默认值
3.执行构造方法
继承时
1、加载子类前,必须先加载父类
2、创建子类的对象,先创建出父类的对象
举例(重点)
class C{
public C(){System.out.println("c1");}
public void test(){System.out.println("c2");}
{System.out.println("c3");}
static{System.out.println("c4");}
}
class D extends C{
public D(){System.out.println("d1");}
public void test(){System.out.println("d2");}
{System.out.println("d3");}
static{System.out.println("d4");}
}
public class TestStatic6{
public static void main(String[] args) {
C cd=new D();
cd.test(); //上转型对象
}
}
输出结果:
c4 d4 c3 c1 d3 d1 d2
六、静态属性、静态方法
静态属性、静态方法:
小区里面业主的房子可以看成一个一个的对象,这些都是属于特定的业主所独有。
但是小区里面也有一些公共设施(健身器材、绿地),这些公共设施是属于这个小区的。
但是是可以被所有的业主对象所使用的。
java类里面定义的静态变量和静态方法是属于这个类的,不属于new出来的Student对象,但是可以被所有的对象所使用,当类加载到内存,静态属性和静态方法就可以调用,这个时候没有new任何对象。
使用时候:
1、静态的方法只能访问静态的方法和静态的属性(因为当前对象的实例可以没有创建,
所以静态的方法是没办法调用非静态的方法和属性的)
2、静态的方法中不能写this、super关键字(因为当前的对象实例可能还没有创建,
代表当前类对象的this还有代表父类对象的super可能都还没有创建)
非静态的属性和方法(实例属性和方法)必须通过new对象访问,而静态的属性和方法
是属于类的,在类加载到内存中就可以访问,被所有对象所共享。
七、最终类和抽象类区别
抽象类
1,抽象类中可以有抽象方法,也可以没有抽象方法。
2,抽象类当然可以被继承,因为它就是用来继承的,
3,继承抽象类,若有抽象方法,则子类必须将其抽象方法实现,
4,抽象类中的非抽象方法可以被重写。
最终类和抽象类正好相反
1.,加上final的类就叫最终类,加上final的方法就叫最终方法,
2.,最终类中可以有最终方法也可以没有
3.,最终类不能有子类,最终方法不能被重写
最终类就是被final修饰的类,最终方法就是被final修饰的方法。最终类不能被继承,最终方法不能被重写。
八、类方法和实例方法区别
在类方法中调用本类的类方法可直接调用。 实例方法也叫做对象方法。
类方法是属于整个类的,而实例方法是属于类的某个对象的。
由于类方法是属于整个类的,并不属于类的哪个对象,所以类方法的方法体中不能有与类的对象有关的内容。即类方法体有如下限制:
(1) 类方法中不能引用对象变量;
(2) 类方法中不能调用类的对象方法;
(3) 在类方法中不能使用super、this关键字。
(4)类方法不能被覆盖。
如果违反这些限制,就会导致程序编译错误。
与类方法相比,对象方法几乎没有什么限制:
(1) 对象方法中可以引用对象变量,也可以引用类变量;
(2) 对象方法中可以调用类方法;
(3) 对象方法中可以使用super、this关键字。