Java編程訪(fǎng)問(wèn)權(quán)限的控制代碼詳解
本文研究的主要是Java編程訪(fǎng)問(wèn)權(quán)限的控制的相關(guān)內(nèi)容,具體介紹如下。
之前沒(méi)去注意的修飾符,一般變量前面沒(méi)添加,一個(gè)是不知道有什么用,一個(gè)是懶,后面遇到項(xiàng)目的時(shí)候就會(huì)發(fā)現(xiàn)私有和公有區(qū)別還是很大的。
(1)首先是包名
使用一個(gè)類(lèi)的時(shí)候,例如集合類(lèi),就需要引入這個(gè)包,然后再使用該包下面的類(lèi)。如:
package com.myown.iaiti; public class Print { static void print(String s){ System.out.println(s); } }
自定義的包,通過(guò)引入自己的包,以后你就可以使用自己寫(xiě)的方法進(jìn)行字符串的打印。之前試過(guò)將自己包的路徑設(shè)進(jìn)CLASSPATH中,那么在其他目錄編譯,不需要將包放進(jìn)該目錄,也可以正常運(yùn)行,不然的話(huà)是找不到JAR包的。
(2)public
public,公共的,以前的老師經(jīng)常用老子來(lái)比喻,這是公共的東西,老子給你用,public緊跟數(shù)據(jù)成員,說(shuō)明對(duì)每個(gè)人都是可用的。
(3)private
private,私有的,老子的私有財(cái)產(chǎn),你不要?jiǎng)铀?,除了包里含有這個(gè)數(shù)據(jù)成員的類(lèi)可以用之外,其他類(lèi)不能使用,這部分是設(shè)計(jì)者本身不想給外人看和修改的。
public class Print { public static void main(String[] args) { GetIt g = new GetIt(); } } class GetIt{// 注意 一個(gè)文件只能有一個(gè)公共類(lèi) 如果你想在 //前面加上public 那么就不要和Print寫(xiě)在同一個(gè)文件 private GetIt(){} }
The constructor GetIt() is not visible,不可見(jiàn),看出用處了吧,單例模式也是這么用的,控制對(duì)象的創(chuàng)建。
單例模式的應(yīng)用:
class A{ private A(){} private static A a = new A(); public static A getInstace(){ return a; } }
其他的類(lèi)不能通過(guò)new來(lái)創(chuàng)建對(duì)象,因?yàn)闃?gòu)造器被private所修飾,用處在于,當(dāng)這個(gè)A類(lèi)極為復(fù)雜,耗內(nèi)存的時(shí)候,我需要嚴(yán)格控制A對(duì)象的創(chuàng)建。既然舉了單例,順便就把單例給講了。之前看過(guò)一些人寫(xiě)的,實(shí)在太經(jīng)典,太厲害了。
上面那種是屬于餓漢式,就是一來(lái)就幫你new出來(lái),以后new的時(shí)候就直接用,不存在線(xiàn)程問(wèn)題,缺點(diǎn)是放著如果沒(méi)用的話(huà)就是資源浪費(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,但是存在線(xiàn)程問(wèn)題,加上synchronized,但是效率降低,因?yàn)槎嗑€(xiàn)程的話(huà),其中有一個(gè)在用的話(huà),就會(huì)霸占著。
完美的方法是結(jié)合兩者:
public class A { // 私有靜態(tài)內(nèi)部類(lèi), 只有當(dāng)有引用時(shí), 該類(lèi)才會(huì)被裝載 private static class LazyA { public static A A = new A(); } public static A getInstance() { return LazyA.A; } }
前看不懂這個(gè)所謂的靜態(tài)內(nèi)部類(lèi),作用是,既可以做到延時(shí)加載,因?yàn)橹挥挟?dāng)使用的時(shí)候才會(huì)去new,用getInstace方法,不存在多線(xiàn)程問(wèn)題是因?yàn)?,靜態(tài)類(lèi)屬于所有外部類(lèi)對(duì)象,只會(huì)加載一次,而靜態(tài)內(nèi)部類(lèi)實(shí)例化之后,便是類(lèi)級(jí)別的屬性,不屬于某個(gè)對(duì)象,只會(huì)加載一次,這樣就不會(huì)存在資源浪費(fèi),也沒(méi)有多線(xiàn)程效率低的問(wèn)題。想出這個(gè)方法的人真的厲害。
(4)protected
Print是基類(lèi),國(guó)人喜歡講父類(lèi),但是老外覺(jué)得子類(lèi)更牛逼,基類(lèi)算是一個(gè)根基或者基礎(chǔ)吧,protected就是老子專(zhuān)門(mén)留給兒子的財(cái)產(chǎn)。
public class Print { protected void print(){} private void cannotprint(){} } public class PrintSon extends Print{ void get(){ print(); //cannotprint(); private 私有的方法,子類(lèi)還是不能用 } } public class NotSon { void get() { print(); } }
protected修飾的,子類(lèi)可以拿到,介于public和private之間。
(5)類(lèi)的訪(fǎng)問(wèn)權(quán)限
每個(gè)文件只能有一個(gè)public類(lèi)。
類(lèi)名和文件名一致。
單例的話(huà)如果沒(méi)基礎(chǔ)看起來(lái)有點(diǎn)超前,但是后面知識(shí)點(diǎn)完善之后,會(huì)容易理解,訪(fǎng)問(wèn)權(quán)限的控制還是在于你想不想把自己的那部分代碼給別人直接使用。
總結(jié)
以上就是本文關(guān)于Java編程訪(fǎng)問(wèn)權(quán)限的控制代碼詳解的全部?jī)?nèi)容,希望對(duì)大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站其他相關(guān)專(zhuān)題,如有不足之處,歡迎留言指出。感謝朋友們對(duì)本站的支持!
- 解決Java提示正在嘗試分配更低的訪(fǎng)問(wèn)權(quán)限問(wèn)題
- Java訪(fǎng)問(wèn)權(quán)限控制的重要性深入講解
- Java中四種訪(fǎng)問(wèn)權(quán)限資料整理
- 詳細(xì)學(xué)習(xí)Java Cookie技術(shù)(用戶(hù)登錄、瀏覽、訪(fǎng)問(wèn)權(quán)限)
- 淺析Java中的訪(fǎng)問(wèn)控制權(quán)限
- 舉例詳解Java中的訪(fǎng)問(wèn)權(quán)限修飾符
- Java中成員方法與成員變量訪(fǎng)問(wèn)權(quán)限詳解
- Java類(lèi)成員訪(fǎng)問(wèn)權(quán)限控制知識(shí)總結(jié)
相關(guān)文章
Springmvc DispatcherServlet原理及用法解析
這篇文章主要介紹了Springmvc DispatcherServlet原理及用法解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-09-09IntelliJ IDEA搜索整個(gè)項(xiàng)目進(jìn)行全局替換(有危險(xiǎn)慎用)
今天小編就為大家分享一篇關(guān)于IntelliJ IDEA搜索整個(gè)項(xiàng)目進(jìn)行全局替換(有危險(xiǎn)慎用),小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2018-10-10Java實(shí)現(xiàn)二叉樹(shù)的基本操作詳解
這篇文章主要為大家詳細(xì)介紹了Java數(shù)據(jù)結(jié)構(gòu)與算法中二叉樹(shù)的基本操作,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,感興趣的小伙伴可以了解一下2022-10-10Linux部署springboot項(xiàng)目彩色日志打印方式
這篇文章主要介紹了Linux部署springboot項(xiàng)目彩色日志打印方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-04-04SpringMVC框架和SpringBoot項(xiàng)目中控制器的響應(yīng)結(jié)果深入分析
這篇文章主要介紹了SpringMVC框架和SpringBoot項(xiàng)目中控制器的響應(yīng)結(jié)果,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧2022-12-12Spring Boot中slf4j日志依賴(lài)關(guān)系示例詳解
在項(xiàng)目開(kāi)發(fā)中,記錄日志是必做的一件事情。而當(dāng)我們使用Springboot框架時(shí),記錄日志就變得極其簡(jiǎn)單了。下面這篇文章主要給大家介紹了關(guān)于Spring Boot中slf4j日志依賴(lài)關(guān)系的相關(guān)資料,需要的朋友可以參考下2018-11-11Java框架入門(mén)之簡(jiǎn)單介紹SpringBoot框架
今天給大家?guī)?lái)的是關(guān)于Java的相關(guān)知識(shí),文章圍繞著SpringBoot框架展開(kāi),文中有非常詳細(xì)的介紹及代碼示例,需要的朋友可以參考下2021-06-06聊聊Java 成員變量賦值和構(gòu)造方法誰(shuí)先執(zhí)行的問(wèn)題
這篇文章主要介紹了聊聊Java 成員變量賦值和構(gòu)造方法誰(shuí)先執(zhí)行的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-10-10Spring Boot接收單個(gè)String入?yún)⒌慕鉀Q方法
這篇文章主要給大家介紹了關(guān)于Spring Boot接收單個(gè)String入?yún)⒌慕鉀Q方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用spring boot具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2018-11-11