Java中權限設置


 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 }
View Code
 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 }
View Code
 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 }
View Code
 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 }
View Code
 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 }
View Code
 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 }
View Code
 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 }
View Code
 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 }
View Code
 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 }
View Code

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM