Java編程訪問權(quán)限的控制代碼詳解
本文研究的主要是Java編程訪問權(quán)限的控制的相關(guān)內(nèi)容,具體介紹如下。
之前沒去注意的修飾符,一般變量前面沒添加,一個(gè)是不知道有什么用,一個(gè)是懶,后面遇到項(xiàng)目的時(shí)候就會(huì)發(fā)現(xiàn)私有和公有區(qū)別還是很大的。
(1)首先是包名
使用一個(gè)類的時(shí)候,例如集合類,就需要引入這個(gè)包,然后再使用該包下面的類。如:
package com.myown.iaiti; public class Print { static void print(String s){ System.out.println(s); } }
自定義的包,通過引入自己的包,以后你就可以使用自己寫的方法進(jìn)行字符串的打印。之前試過將自己包的路徑設(shè)進(jìn)CLASSPATH中,那么在其他目錄編譯,不需要將包放進(jìn)該目錄,也可以正常運(yùn)行,不然的話是找不到JAR包的。
(2)public
public,公共的,以前的老師經(jīng)常用老子來比喻,這是公共的東西,老子給你用,public緊跟數(shù)據(jù)成員,說明對(duì)每個(gè)人都是可用的。
(3)private
private,私有的,老子的私有財(cái)產(chǎn),你不要?jiǎng)铀税锖羞@個(gè)數(shù)據(jù)成員的類可以用之外,其他類不能使用,這部分是設(shè)計(jì)者本身不想給外人看和修改的。
public class Print { public static void main(String[] args) { GetIt g = new GetIt(); } } class GetIt{// 注意 一個(gè)文件只能有一個(gè)公共類 如果你想在 //前面加上public 那么就不要和Print寫在同一個(gè)文件 private GetIt(){} }
The constructor GetIt() is not visible,不可見,看出用處了吧,單例模式也是這么用的,控制對(duì)象的創(chuàng)建。
單例模式的應(yīng)用:
class A{ private A(){} private static A a = new A(); public static A getInstace(){ return a; } }
其他的類不能通過new來創(chuàng)建對(duì)象,因?yàn)闃?gòu)造器被private所修飾,用處在于,當(dāng)這個(gè)A類極為復(fù)雜,耗內(nèi)存的時(shí)候,我需要嚴(yán)格控制A對(duì)象的創(chuàng)建。既然舉了單例,順便就把單例給講了。之前看過一些人寫的,實(shí)在太經(jīng)典,太厲害了。
上面那種是屬于餓漢式,就是一來就幫你new出來,以后new的時(shí)候就直接用,不存在線程問題,缺點(diǎn)是放著如果沒用的話就是資源浪費(fèi)。
懶漢式
public class A { private A(){ } private static A a; public static A getInstance(){ if(a == null){ return a = new A(); }else{ return a; } } }
用的時(shí)候才幫你new,為null才new,但是存在線程問題,加上synchronized,但是效率降低,因?yàn)槎嗑€程的話,其中有一個(gè)在用的話,就會(huì)霸占著。
完美的方法是結(jié)合兩者:
public class A { // 私有靜態(tài)內(nèi)部類, 只有當(dāng)有引用時(shí), 該類才會(huì)被裝載 private static class LazyA { public static A A = new A(); } public static A getInstance() { return LazyA.A; } }
前看不懂這個(gè)所謂的靜態(tài)內(nèi)部類,作用是,既可以做到延時(shí)加載,因?yàn)橹挥挟?dāng)使用的時(shí)候才會(huì)去new,用getInstace方法,不存在多線程問題是因?yàn)?,靜態(tài)類屬于所有外部類對(duì)象,只會(huì)加載一次,而靜態(tài)內(nèi)部類實(shí)例化之后,便是類級(jí)別的屬性,不屬于某個(gè)對(duì)象,只會(huì)加載一次,這樣就不會(huì)存在資源浪費(fèi),也沒有多線程效率低的問題。想出這個(gè)方法的人真的厲害。
(4)protected
Print是基類,國人喜歡講父類,但是老外覺得子類更牛逼,基類算是一個(gè)根基或者基礎(chǔ)吧,protected就是老子專門留給兒子的財(cái)產(chǎn)。
public class Print { protected void print(){} private void cannotprint(){} } public class PrintSon extends Print{ void get(){ print(); //cannotprint(); private 私有的方法,子類還是不能用 } } public class NotSon { void get() { print(); } }
protected修飾的,子類可以拿到,介于public和private之間。
(5)類的訪問權(quán)限
每個(gè)文件只能有一個(gè)public類。
類名和文件名一致。
單例的話如果沒基礎(chǔ)看起來有點(diǎn)超前,但是后面知識(shí)點(diǎn)完善之后,會(huì)容易理解,訪問權(quán)限的控制還是在于你想不想把自己的那部分代碼給別人直接使用。
總結(jié)
以上就是本文關(guān)于Java編程訪問權(quán)限的控制代碼詳解的全部內(nèi)容,希望對(duì)大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站其他相關(guān)專題,如有不足之處,歡迎留言指出。感謝朋友們對(duì)本站的支持!
上一篇:Java編程實(shí)現(xiàn)計(jì)算兩個(gè)日期的月份差實(shí)例代碼
欄 目:Java編程
下一篇:Java編程時(shí)間日期API實(shí)例解析
本文標(biāo)題:Java編程訪問權(quán)限的控制代碼詳解
本文地址:http://mengdiqiu.com.cn/a1/Javabiancheng/8363.html
您可能感興趣的文章
- 01-10Java咖啡館(1)——嘆咖啡
- 01-10Java Socket編程(三) 服務(wù)器Sockets
- 01-10Java進(jìn)階:Struts多模塊的技巧
- 01-10Java Socket編程(一) Socket傳輸模式
- 01-10Java Socket編程(二) Java面向連接的類
- 01-10Java運(yùn)行時(shí)多態(tài)性的實(shí)現(xiàn)
- 01-10Java經(jīng)驗(yàn)點(diǎn)滴:處理沒有被捕獲的異常
- 01-10Java Socket編程(四) 重復(fù)和并發(fā)服務(wù)器
- 01-10Java中的浮點(diǎn)數(shù)分析
- 01-10面向?qū)ο缶幊?Java中的抽象數(shù)據(jù)類型


閱讀排行
本欄相關(guān)
- 01-10Java咖啡館(1)——嘆咖啡
- 01-10JVM的垃圾回收機(jī)制詳解和調(diào)優(yōu)
- 01-10Java Socket編程(三) 服務(wù)器Sockets
- 01-10Java進(jìn)階:Struts多模塊的技巧
- 01-10J2SE 1.5版本的新特性一覽
- 01-10Java Socket編程(一) Socket傳輸模式
- 01-10Java運(yùn)行時(shí)多態(tài)性的實(shí)現(xiàn)
- 01-10Java Socket編程(二) Java面向連接的類
- 01-10Java Socket編程(四) 重復(fù)和并發(fā)服務(wù)
- 01-10Java經(jīng)驗(yàn)點(diǎn)滴:處理沒有被捕獲的異常
隨機(jī)閱讀
- 01-10SublimeText編譯C開發(fā)環(huán)境設(shè)置
- 01-11ajax實(shí)現(xiàn)頁面的局部加載
- 01-10C#中split用法實(shí)例總結(jié)
- 08-05dedecms(織夢)副欄目數(shù)量限制代碼修改
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
- 08-05織夢dedecms什么時(shí)候用欄目交叉功能?
- 04-02jquery與jsp,用jquery
- 08-05DEDE織夢data目錄下的sessions文件夾有什
- 01-10delphi制作wav文件的方法
- 01-10使用C語言求解撲克牌的順子及n個(gè)骰子