
1 package think_in_java_access_contorl; 2 3 import think_in_java_access_contorl.access.Cookie; 4 5 /** 6 * 1.在Java編程思想中有一段很經典的話,明白就會解決很多問題: 7 * --當編寫一個Java源代碼文件時,此文件通常被成為編譯單元(有時也被稱為轉義單元)。每個 8 * 個編譯單元都必須有一個后綴名為.java,而在編譯單元內則可以有一個public類,該類的名稱必須 9 * 與文件的名稱相同(包括大小寫,但不包括文件的后綴名.java)。每個編譯單元只能有一個public類,否則編譯器就不會接受。如果 10 * 該編譯單元之中還有額外的類的話,那么在包之外世界是無法看見這些類的,這是因為他們不是public類,而且他們主要為主public類提供 11 * 支持。 12 * 13 * 14 * 這就解釋了為什么,在同一個包下面,主類必須是public或者是默認的。但是我們可以定義別的類,但是這些類的權限是 15 * 默認的,為什么?因為他們在同一個包下面,必須使用默認的權限,而默認的權限就是在同一個包可見。 16 * 17 * 2.Java如何將可執行的字節碼 文件加載進去 18 * Java可運行程序是一組可以打包並壓縮為一個Java文檔文件(jar,使用Java的jar文檔生成器)的.class文件。Java解析器負責這些 19 * 文件的查找,裝載和解釋。 20 * 21 * 3.Java中為什么要使用域名的倒敘的形式命名包? 22 * 在編程思想中,為了讓自己的包名獨一無二,那么最有效的方法就是ip地址,就是獨一無二的,而Java有主要進行的是企業級的開發,所以使用公司域名的倒敘來區分 23 * 包名。目的就在於此。 24 * */ 25 public class Demo1 { 26 27 public static void main(String[] args) { 28 Cookie c=new Cookie(); 29 //c.bite();由於訪問權限,所以無法進行訪問 30 } 31 }

1 package think_in_java_access_contorl; 2 /** 3 * 私有構造器獲得實例的方法: 4 * 如果有一個私有的構造器,並且它的權限設置成為一個私用的權限;如果通過方法獲得它的實例。 5 * 因為它是私有的,所以權限只在它的類中。在程序的外部是不能進行new操作的,因為無法找到構造器。但是我們可以使用靜態方法的形式,通過類名調用方法 6 * 進行間接獲得,它的實例。 7 * 8 * */ 9 public class Demo2_privateDemo_test { 10 11 public static void main(String[] args) { 12 Demo2_privateDemo pri= Demo2_privateDemo.make_Demo2_privateDemo(); 13 pri.smile(); 14 } 15 }

1 package think_in_java_access_contorl; 2 3 public class Demo2_privateDemo { 4 5 private Demo2_privateDemo(){ 6 System.out.println("private 構造器,其他類不能訪問!"); 7 } 8 9 public static Demo2_privateDemo make_Demo2_privateDemo(){ 10 return new Demo2_privateDemo(); 11 } 12 13 public void smile(){ 14 System.out.println("smile...."); 15 } 16 }

1 package think_in_java_access_contorl; 2 3 public class Demo3_protectedDemo_test extends Demo3_protectedDemo { 4 5 public static void main(String[] args) { 6 Demo3_protectedDemo_test pro=new Demo3_protectedDemo_test(); 7 //這就是在外面的包下面只能是子類進行訪問 8 pro.protected_Demo(); 9 //為什么要這樣設計? 10 //如果我們不設置protected_Demo()的權限,讓他默認權限,那么我們在另外一個包中無法訪問到這個方法 11 //我們可以修改權限為public 但是所有人都可以訪問到了。我們就向讓子類進行訪問,其他的包下面無法訪問, 12 //所以Java使用了關鍵字protected 13 //訪問權限的控制這就是一種封裝 14 } 15 }

1 package think_in_java_access_contorl; 2 /* 3 * 注意這個protected其實就是為了繼承而生的,他就是子類繼承父類,父類給的專門的權限 4 * 同一包下面的類當然可以訪問他。 5 * */ 6 public class Demo3_protectedDemo { 7 protected void protected_Demo(){ 8 System.out.println("我是protected訪問權限!"); 9 } 10 }

1 package think_in_java_access_contorl; 2 3 4 class Example{ 5 6 } 7 class Ha{ 8 public static void haha(){ 9 System.out.println("你好啊"); 10 } 11 } 12 //注意這里是沒有public 並且上面的類只能是默認的權限 13 class Demo4_Object_access_control_2{ 14 public static void main(String[] args) { 15 System.out.println("amazing"); 16 new Ha().haha(); 17 } 18 19 }

1 package think_in_java_access_contorl; 2 /* 3 * 單例設計模式(其實就是基於方法的訪問權限和類的訪問權限設計的模式) 4 * */ 5 6 class singleDemo1{ 7 private singleDemo1(){ 8 9 } 10 //為什么這樣設計之后,調用靜態方法就可以獲得同一個對象:首先,程序調用靜態方法,類加載器就會把這個類的class文件加載到方法去並且 11 //創建一個Class對象,靜態代碼塊,開辟一個有類相關信息的空間,指向的是singleDemo1的實例。 12 //而調用靜態的single_example方法相當與指向了同一個singleDemo1的實例。 13 private static singleDemo1 single=new singleDemo1(); 14 public static singleDemo1 single_example(){ 15 return single; 16 } 17 18 public void method(){ 19 System.out.println("我是單例設計模式哈哈哈!"); 20 } 21 } 22 23 public class Demo4_Object_access_control_single_design_pattern { 24 25 public static void main(String[] args) { 26 //創建了一個單例子,最好理解訪問權限的例子 27 singleDemo1 single=singleDemo1.single_example(); 28 System.out.println(single); 29 single.method(); 30 singleDemo1 single2=singleDemo1.single_example(); 31 System.out.println(single2); 32 single2.method(); 33 // think_in_java_access_contorl.singleDemo1@6bbc4459 34 // 我是單例設計模式哈哈哈! 35 // think_in_java_access_contorl.singleDemo1@6bbc4459 36 //注意這2個對象的地址一樣的,說明都是這2個都是同一個都對象的引用,也就是說我們 37 //不管怎么樣調用靜態方法,它都是同一個對象 38 } 39 }

1 package think_in_java_access_contorl; 2 3 public class Demo4_Object_access_control { 4 //既然方法有訪問權限,那么類也可以有訪問權限: 5 //設計者為什么設計一個類的訪問權限只有2中,一個是public,一個是默認的權限? 6 //--如果是public 那么都可以訪問(本類,同一個包下,外面的包,繼承的類),如果是默認的,那么就是 7 //--只能在同一個包下面訪問,但是類是不可以設置成為私有的,如果設置成為私有的,那么他將失去任何意義。就就是說 8 //--你創建的這個類,本類外面沒有一人能看見。也就無法進行獲得具體存在的事物,--對象。(Java使用了另外的一個方式,就是讓構造方法私有,通過靜態方法創建對象) 9 //--protected也是不能作用類的訪問權限。protected只是針對一個子類中的方法而進行的權限設定。 10 //Java規定,在一個類中只能有一個public ,不能有多個public,並且規定文件名字和類的名字一樣,也是基於這種考慮。 11 //但是並不是說必須有一個public,可以有另外的方式,那就是默認的類權限。程序也可以執行。 12 //所以說Java的每一個規定都是有道理的。 13 }

1 package think_in_java_access_contorl; 2 3 class single{ 4 private single(){ 5 6 } 7 8 private static single singleDemo=new single(); 9 static single single_method(){ 10 return singleDemo; 11 } 12 13 void method(){ 14 System.out.println("haha!!!單例設計模式"); 15 } 16 } 17 public class safsadf { 18 19 public static void main(String[] args) { 20 single singleDemo=single.single_method(); 21 singleDemo.method(); 22 } 23 }