JAVA修饰符
JAVA修饰符通常放在类、变量、方法的最前端
主要分为两类:
1.访问修饰符
2.非访问修饰符
1.访问控制修饰符
default(缺省):不使用任何修饰符,同一包内可见;
public:对所有类可见;
private:在同一类内可见;不能修饰类(外部类)
protected:对同一包内的类可见,不能修饰类(外部类)
default:
接口里变量都隐式声明为 public static final,接口里的方法默认访问权限为 public。
public:
若需要访问的类在不同的包中,需要先导入
Java 程序的 main() 方法必须设置成公有的,否则,Java 解释器将不能运行该类。
private:
最严格,只能被所属类访问,并且类和接口不能声明为 private。
私有类型的变量只能通过类中公共的 getter 方法被外部类访问。
例:
私有成员变量format不能直接调用,只能通过public方法setformat和getformat设置和获取
1 public class Logger { 2 private String format; 3 public String getFormat() { 4 return this.format; 5 } 6 public void setFormat(String format) { 7 this.format = format; 8 } 9 }
用来隐藏类的实现细节和保护类的数据。
protected:
子类与基类在同一包中:可访问
子类与基类不在同一包中:子类实例可以访问继承而来的 protected 方法,而不能访问基类实例的protected方法。
protected不能修饰类(内部类除外)接口及接口的成员变量和成员方法。
继承规则:
父类public方法:子类必须public
父类protected方法:子类protected或者public,不能private
父类private方法:子类不能继承
非访问修饰符:
static:修饰类方法和类变量
final:修饰类(不能被继承),修饰方法(不能被继承类重新定义),修饰变量(不可修改,为常量)
abstract:创建抽象类和抽象方法
synchronized 和 volatile:主要用于线程编程
static:声明静态变量和静态方法。静态变量只有一份(无论有多少个实例);静态方法不能使用非静态变量,从参数列表得到数据,然后计算。
使用 classname.variablename 和 classname.methodname 的方式访问。
1 public class InstanceCounter { 2 private static int numInstances = 0; 3 protected static int getCount() { 4 return numInstances; 5 } 6 7 private static void addInstance() { 8 numInstances++; 9 } 10 11 InstanceCounter() { 12 InstanceCounter.addInstance(); 13 } 14 15 public static void main(String[] arguments) { 16 System.out.println("Starting with " + 17 InstanceCounter.getCount() + " instances"); 18 for (int i = 0; i < 500; ++i){ 19 new InstanceCounter(); 20 } 21 System.out.println("Created " + 22 InstanceCounter.getCount() + " instances"); 23 } 24 }
final:通常和 static 修饰符一起使用来创建类常量。
1 public class Test{ 2 final int value = 10; 3 // 下面是声明常量的实例 4 public static final int BOXWIDTH = 6; 5 static final String TITLE = "Manager"; 6 7 public void changeValue(){ 8 value = 12; //将输出一个错误 9 } 10 }
final 方法可以被继承,但不能被修改。
final类不能被继承。
final变量定义时可以声明但不赋值,这中变量也称为final空白,编译器都确保空白final在使用之前必须被初始化。一个类中的final数据成员就可以实现依对象而有所不同,却有保持其恒定不变的特征。
abstract:
抽象类不能实例化对象;
抽象类的目的是为了将来对该类进行扩充;
类不能同时被 abstract 和 final 修饰;
如果一个类包含抽象方法,一定要声明为抽象类;
抽象类可以包含抽象方法和非抽象方法。
抽象方法
抽象方法是一种没有任何实现的方法,具体实现由子类提供。
不能被声明成 final 和 static。
任何继承抽象类的子类必须实现父类的所有抽象方法,除非该子类也是抽象类。
如果一个类包含若干个抽象方法,那么该类必须声明为抽象类。抽象类可以不包含抽象方法。
抽象方法的声明以分号结尾,例如:public abstract sample();。
1、final 不能同时和 abstract 使用
2:static 和 abstract 也是不能连用的
(根据性质)
synchronized修饰符:声明的方法在某一时刻只能被一个线程访问。
transient修饰符:序列化的对象包含 transient 修饰的实例变量时,java 虚拟机(JVM)跳过该变量。
volatile 修饰符:修饰的成员变量在被线程访问时,都强制从共享内存中重新获取它的值,成员变量发生变化时,强制写回共享内存。
posted on 2018-11-03 00:55 s1mplesama 阅读(204) 评论(0) 编辑 收藏 举报