java修饰符详解
-
访问修饰符
public:公共的
protected:受保护的(不能修饰类)
default(默认不写)
private:私有的(不能修饰类)
修饰符 当前类 同一包内 被继承的类(同包) 被继承的类(不同包) 其他包 public 能访问 能访问 能访问 能访问 能访问 protected 能访问 能访问 能访问 能/不能 不能访问 default 能访问 能访问 能访问 不能访问 不能访问 private 能访问 不能访问 不能访问 不能访问 不能访问 注:
protected:
- 基类的 protected 成员是包内可见的,并且对子类可见
- 若子类与基类不在同一包中,那么在子类中,子类实例可以访问其从基类继承而来的protected方法,而不能访问基类实例的protected方法
-
特征修饰符
abstract:抽象的
-
修饰方法
用abstract修饰符修饰的方法 只有方法的结构 没有方法执行体叫做抽象方法
注:native修饰的方法虽然也没有方法体 但不是抽方法,过程是其他语言写的
public class Person(){ //被abstract修饰的方法没有方法体 public abstract void medth(); } -
修饰类
用abstract修饰符修饰的类 叫做抽象类
public abstract class Person(){ //抽象类里面可以有抽象方法 也可以有普通方法 //抽象方法 public abstract void medth(); //普通方法 public void medth1(){ System.out.println("这是一个普通方法"); } } -
特点
-
抽象类中不是必须要有抽象方法
-
抽象方法必须放在抽象类中或者接口中,普通类中不允许有抽象方法
-
-
如何使用
- 抽象类中含有构造方法,但是我们不能通过调用构造方法直接创建对象
- 抽象类只能通过子类继承来做事
//定义一个抽象类 public abstract class Person(){ public abstract void run(); } //定义一个类 并继承Person public class Son extends Person(){ //重写Person中的run方法 @Override public void run() { System.out.println("这是我继承我的父类重写的方法"); } } public static void main(String[] args) { son son=new son(); son.run(); }以上程序执行结果为:
这是我继承我的父类重写的方法5.类和类之间的关系:
- 抽象类---单继承---抽象类
- 抽象类---单继承---具体类 (一般不会出现)
- 具体类---单继承---抽象类 不可以(将父类的抽象方法具体化或子类也变成抽象类)
final:最终的 不可改变的
-
修饰变量
如果存储的是值类型:变量内的值不让更改---常量
如果存储的是引用类型:变量里面的地址引用不让更改---对象唯一
-
修饰属性
属性如果没有赋值 有默认值存在的
属性用final修饰后必须给属性赋初始值,否则会编译错误
-
修饰方法
方法是最终的方法 不可以更改(覆盖)
final修饰的方法,要求不可以被子类重写(覆盖)
-
修饰类本身
类是最终的 不可以更改、
(太监类)此类不可以被其它子类继承
static:静态的
-
修饰变量:
- static修饰的成员变量也叫做静态变量,也叫作类变量,说明这个变量属于类的,而不是属于对象的
- 被所有的对象共享,在内存中只有一个副本,static成员变量的初始化顺序按照定义的顺序进行初始化
- 静态变量必须要静态成员才能调用或者访问
public class Test(){ //定义一个静态变量 static String name; //这里定义一个静态方法 注意:要想使用静态变量 方法也必须定义成静态方法 //如果不定义成静态方法 调用静态变量就会报错 public static void medth(){ name="定义的静态变量"; System.out.println(name); } public static void main(String[] args){ medth(); } }以上程序执行的结果为:
定义的静态变量 -
修饰方法:
被static修饰的方法也叫做静态方法,因为对于静态方法来说是不属于任何实例对象的
public class Test(){ //定义一个静态变量 static String name; //定义一个普通的变量 int age; //定义一个静态方法 public static void medth(){ //打印输出静态name System.out.println(name); //打印输出普通变量age System.out.println(age); } public static void main(String[] args) { medth(); } }以上程序执行的结果:
- age是访问不到的,会报错误:无法从静态上下文中引用非静态变量age
注:
静态变量和普通变量的区别:
- 静态变量属于类变量 成员变量属于对象变量
- 静态变量存储在方法区的静态区 成员变量存储在内存中的堆
- 静态变量随着类的加载而加载,随着类的消失而消失
- 成员变量随着对象的加载而加载,随着对象的消失而消失
- 静态通过类名调用 成员变量通过对象调用
特点:
- 静态元素在类加载时就初始化了
- 静态元素存储在静态元素区中,每一个类有一个自己的区域,与别的类不冲突
- 静态元素只加载一次(只有一份)全部的类对象及类本身共享
- 由于静态元素区加载的时候,有可能没有创建对象,可以通过类名字直接访问
- GC机制时无法管理静态元素的,可以认为是常驻内存
- 非静态成员中可以访问静态成员
- 静态成员中可以访问静态成员
- 静态成员中不可以访问非静态成员
- 在静态元素中不能出现this或super
native:本地的
java源代码中看到native就已经看不到后续的代码了
后续会调用其他语言C++ C执行的内存操作 帮我们操作内存
-

浙公网安备 33010602011771号