【Java】基础:常见修饰符(权限修饰符以及abstract、static、final等)与变量的描述
- 1. 修饰符
- public、protected、private、default
- abstract、static、final、
- abstract:抽象类、抽象方法
- static:静态变量、静态方法、静态代码块
- final修饰类、方法、变量
- transient、violatile、native、synchronized
- 2. 变量
- 实例变量、局部变量、类变量
· public、protected、 private、default
类的访问权限
当前类 | 同包其它类 | 子孙类 | 其它包的类 | |
public | √ | √ | √ | √ |
protected | √ | √ | √ | × |
default/缺省 | √ | √ | × | × |
private | √ | × | × | × |
能够修饰的位置
类/接口 | 方法 | 变量 | |
public | √ | √ | √ |
protected | × | √ | √ |
private | × | √ | √ |
default/缺省 | √ | √ | √ |
public class A{} class B{}
· abstract 、static、 final、 transient、violatile、synchronized
总述:可修饰的位置(空白处为无此用法)
类 | 方法 | 变量 | 代码块 | |
abstract | √ | √ | ||
static | √ | √ | √ | |
final | √ | √ | √ | |
transient | √ | |||
native | √ | |||
violatile | √ | |||
synchronized | √ | √ | √ |
abstract - 抽象类、抽象方法
/** 1. 被abstract修饰的类即为抽象类; 2. 抽象类的权限修饰符为public,缺省(如下)也为public; 3. 抽象类无法创建对象(即不能new); 4. 其余情况与普通类相同。 */ abstract class animal { int num;//成员变量可使用任何访问权限修饰词(public、protected、private) /** 1. 抽象方法必须为public或protected,缺省即为public; 2. 抽象方法没有方法体,即符号{}; 3. 子类中必须实现抽象方法,否则子类仍为抽象类。 */ abstract void run(); } class lion extends animal{ void run(){} }
static:静态变量、静态方法、静态代码块
public class Test { public static int a = 100; //静态变量 public int b = 100; //实例变量 //静态方法 public static void method_a() { System.out.println("===static method==="); } //实例方法 public void method_b() { System.out.println("===instance method==="); } public static void method_c() { int c = 0; //局部变量 a = 5; //可访问[静态变量] method_a(); //可调用[静态方法] //b = 5; 不能访问[实例变量] //method_b(); 不能调用[实例方法] } public static void main(String[] args) { Test t = new Test(); //创建实例化对象 int static_var = Test.a; //[类名.静态变量名]访问 int instance_var = t.b; //[对象.变量名]访问 Test.method_a(); //[类名.静态方法名]访问 t.method_b(); //[对象.方法名]访问 } static { //静态块,在类加载时自动执行块中的内容 int d = 1; int c = 0; //局部变量 a = 5; //可访问[静态变量] method_a(); //可调用[静态方法] //b = 5; 不能访问[实例变量] //method_b(); 不能调用[实例方法] } }
final
1. final 修饰的类无法被继承;
2. final 修饰的方法无法在子类中重写(override)
3. final 修饰变量:基本类型变量,初始化后数值无法更改;引用类型变量,初始化之后不能再指向另一个对象。
4. final static修饰的为常量
transient
public class Test { int a; //持久化 transient int b; //非持久化 }
synchronized为线程内容,在稍后的博文中描述;
violatile、native少有接触,以后再另作描述。
根据声明的位置划分: 成员变量、局部变量、类变量
根据所属数据类型划分:基本数据类型,引用数据类型
实例变量(成员变量) | 局部变量 | 类变量(静态变量) | |
修饰符 | 修饰符不可出现 | 必须有static | |
定义位置 | 类中,方法、构造方法与语句块之外 | 声明在方法、构造方法、语句块 | 类中,方法、构造方法与语句块之外
变量的值可以在声明时指定,也可以在构造方法中指定,还可以在静态语句块中初始化。 |
访问 | 对象调用 | 类名.变量名 | |
可见 |
实例变量对于类中的方法/构造方法/语句块是可见的。一般情况下应该把实例变量设为私有。通过使用访问修饰符可以使实例变量对子类可见 |
相关方法、构造方法或者语句块 | 与实例变量具有相似的可见性。
但为了对类的使用者可见,大多数静态变量声明为public类型 |
生存时间 | 与对象共存亡 |
方法/构造方法/语句块被执行时创建;执行完毕后销毁 |
在程序开始时创建,在程序结束时销毁。 |
分配位置 | 堆 (heap) | 栈 (stack) | 静态存储区(方法区) |
默认值 | 同类变量 | 没有默认值,必须初始化才能使用 |
数值型变量默认值是0,布尔型默认值是false,引用类型默认值是null。
|