s1mplesama

导航

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编辑  收藏  举报