1、訪問修飾類this
公有訪問修飾符-public:對全部類可見,使用對象:類、接口、變量、方法,類的全部公有方法和變量都能被子類繼承。spa
public static void main(String[] args){ //main方法必須使用public修飾,不然Java解釋器不運行該類 }
受保護的訪問修飾符-protected:子類和基類在同一包中:能被包中任何其餘類訪問;子類和基類不在同一包中:子類實例能夠訪問從基類繼承過來的protected方法,而不能訪問基類實例的protected方法。可修飾數據成員、構造方法、方法成員,不能修飾除了內部類的類;使用對象:變量、方法。線程
默認訪問修飾符-default:在同一包內可見,不使用任何修飾符,使用對象:類、接口、變量、方法。code
//變量和方法的聲明能夠不使用任何修飾符 String version = "1.3.0"; boolean processOrder(){ return true; }
私有訪問修飾符-private:同一包內的類和全部子類可見,使用對象:變量、方法,不能修飾除了內部類的類;orm
public class Logger{ //私有變量,其餘類不能直接獲得和設置該變量的值,要經過方法操做該變量 private String format; public String getFormat(){ return this.format; }//返回format的值 public void setFormat(String format){ this.format = format; }//設置format的值 }
2、非訪問修飾類對象
static修飾符:修飾類方法、類變量,用來聲明獨立於對象的靜態方法、靜態變量(類變量),不管一個類實例化多少對象,它的靜態變量只有一份拷貝。局部變量不能聲明爲static變量;靜態方法不能使用類的非靜態變量。blog
對類變量和類方法訪問可以使用classname.variablename和classname.methodname繼承
public class InstanceCounter{ private static int numInstances = 0;//靜態變量 protected static int getCount(){ return numInstances; }//靜態方法 private static void addInstance(){ numInstances++; } InstanceCounter(){ InstanceCounter.addInstance(); } public static void main(String[] args){ System.out.println(InstanceCounter.getCount()); for(int i=0;i<500;++i){ new InstanceCounter(); } System.out.println(InstanceCounter.getCount()); } }
運行結果:接口
0 500
final修飾符:修飾類、方法、變量,final修飾的類不能被繼承,方法不能被繼承類從新定義(便可被子類繼承,不可被子類修改),變量爲常量不可修改內存
abstract修飾符:建立抽象類和抽象方法
抽象類不能實例化對象,聲明抽象類的惟一目的是爲了未來對該類進行擴充,若是一個類包含抽象方法那麼這個類必須是抽象類;可是抽象類能夠不含抽象方法。
抽象方法是沒有任何實現的方法,具體實現由子類提供;任何繼承抽象類的子類要實現父類的全部抽象方法,除非子類也是抽象類。
public abstract class Caravan{ private String model; private String year; public abstract void goFast();//抽象方法 }
class CaravanClass extends Caravan{
//實現抽象方法
void goFast(){
//……
}
}
synchronized修飾符:synchronized關鍵字聲明的方法同一時間只能被同一線程訪問
transient修飾符:序列化對象包含transient修飾的實例變量時,Java虛擬機(JVM)跳過該變量
public transient int limit = 33;//不會持久化 public int i;//持久化
volatile修飾符:volatile修飾的成員變量在每次線程訪問時,都強制從共享內存中從新讀取該變量的值。成員變量發生變化時,會強制線程將變化值寫到共享內存,這樣在兩個不一樣的線程會看到成員變量的同一個值
public class MyRunnable implements Runnable{ private volatile boolean active; public void run(){ actiive = true; while(active){//① //…… } } public void stop(){ active = false;//② } } /* *一般在一個線程調用run()方法,另外一個線程調用stop()方法,若是①中緩衝器的active值被使用,那麼②的active值爲false時循環不中止。 *可是實驗volatile修飾active,因此 ②的active值爲false時循環中止。 */