1.4种访问修饰符可以修饰的范围
private | 属性 | 方法 | 构造方法 | |
---|---|---|---|---|
default | 属性 | 方法 | 构造方法 | 类 |
protected | 属性 | 方法 | 构造方法 | |
public | 属性 | 方法 | 构造方法 | 类 |
2.abstract 抽象:可以用来修饰类和方法。
1.类 ①抽象类只能声明引用,不能创建对象 供子类继承②不能用new来创建抽象类,不会创建出独立的抽象类的;但抽象类可以作为子类的一部分存在,创建子类之前,还是会先创建父类对象。
2.方法 抽象方法只有声明, 没有实现。供子类实现(实现是一种特殊的覆盖,覆盖一般在两个普通的类之间发生;实现是在一般的类和抽象类之间发生)
a).如果一个类具有抽象方法,那么这个类就必须是抽象类; 抽象类未必有抽象方法
b).一个类继承抽象类,如果这个类不希望也成为抽象类,就必须实现父类中所有的抽象方法
c).抽象类也拥有构造方法, 供子类用super(...)调用
d).抽象方法可以使方法的声明和实现分离,声明提取到父类,实现留在子类, 更好的体现"子类的共性放在父类"设计思想
java语法:
1.编译语法: 抽象类和抽象方法都是给编译器用的。
2.虚拟机语法:已经通过编译后,在运行时,抽象类和抽象方法都会被当成普通类,普通方法使用。
1.static 修饰
1.属性 静态属性不属于任何对象, 全类共有 可以用类名直接访问
2.方法 静态方法可以直接用类名调用,和对象无关
静态方法只能访问类的静态成员
非静态方法只能被子类的非静态方法覆盖,静态方法只能被子类的静态方法覆盖, 而且没有多态
(对引用调用静态方法,等价于对引用的类型调用静态方法)
[在非静态方法中,无论方法或属性是否是静态的,都能够访问;而在静态方法中,只能访问静态属性和方法]
3.初始代码块 初始化操作时,执行初始化代码块的内容
静态初始代码块 在类加载的时候执行一次
class MyClass{
{
System.out.println("这是初始代码块!");//初始化操作时,执行初始化代码块的内容
}
static{
System.out.println("hehe");//静态初始代码块,在类加载的时候执行一次
}
public MyClass(){
System.out.println("MyClass()构造方法");
}
}
结果:
hehe
这是初始代码块!
MyClass()构造方法
2.类加载
类加载发生在创建对象之前,且只做一次。
当JVM第一次使用一个类的时候,需要读取这个类对应的字节码文件,获取类的信息并保存起来
类加载的过程:
1.如果需要,先加载父类
2.按照代码顺序,初始化静态属性,并执行静态初始代码块
(从网上摘录https://blog.csdn.net/dawn_after_dark/article/details/74091898)
1,一般情况:执行顺序为:静态代码块>非静态代码块>构造方法>类的方法
2,在继承机制中,创建子类对象时会先初始化父类对象再初始化子类对象,所以这里又涉及到了代码块的执行顺序。
简单概括为:父类静态代码块>子类静态代码块>父类非静态代码块>父类构造函数>子类非静态代码块>子类构造函数
以上执行顺序会依次进行,若没有就跳过,直到结束
类加载的时机:
1.第一次创建对象
2.第一次访问类的静态成员
1.final修饰
final可修饰
1.方法 不能被子类覆盖
2.类 不能被子类继承
3.变量 一旦赋值,不能改变 常量
用final修饰的成员变量没有默认值
利用初始化属性的方式为常量赋值的, 应设置为static, 需要注意常量名全大写
class B{
final int M = 10;//赋值方式1:初始化赋值
final int N;
public B(int i){//赋值方式2:构造方法赋值
this.N = i;
}
public B(){//赋值方式2:构造方法赋值
this.N = 10;
}
}
2.修饰符组合
static , final ,private 不能和abstract同时出现
abstract和多态相关,父类方法声明成abstract,由子类去实现,
而final修饰的类是不能被继承的;
static和类有关,与对象无关,对static修饰的类调用类中的方法,只会调用本类的方法,不会调用子类的方法;
private修饰的方法和属性不会被子类拥有,所以谈不上方法覆盖之类的,无法与abstract同时出现。
总结
static 修饰范围 | abstract 修饰范围 | final 修饰范围 |
---|---|---|
属性、方法、初始代码块 | 类、方法 | 类、方法、变量(属性、局部变量、方法参数) |
static 不可修饰 | abstract 不可修饰 | final 不可修饰 |
---|---|---|
局部变量、类 |