java對(duì)象實(shí)例化過(guò)程 實(shí)例化對(duì)象后怎么解釋代碼
夕逆IT
- 軟件開(kāi)發(fā)
- 2023-08-13
- 87

大家好,感謝邀請(qǐng),今天來(lái)為大家分享一下java對(duì)象實(shí)例化過(guò)程的問(wèn)題,以及和實(shí)例化對(duì)象后怎么解釋代碼的一些困惑,大家要是還不太明白的話(huà),也沒(méi)有關(guān)系,因?yàn)榻酉聛?lái)將為大家分享...
大家好,感謝邀請(qǐng),今天來(lái)為大家分享一下java對(duì)象實(shí)例化過(guò)程的問(wèn)題,以及和實(shí)例化對(duì)象后怎么解釋代碼的一些困惑,大家要是還不太明白的話(huà),也沒(méi)有關(guān)系,因?yàn)榻酉聛?lái)將為大家分享,希望可以幫助到大家,解決大家的問(wèn)題,下面就開(kāi)始吧!
有沒(méi)有java編程大神誰(shuí)能給我詳解一下類(lèi)與對(duì)象,有點(diǎn)懵圈
咱們都知道動(dòng)物界有很多物種,就那狗來(lái)說(shuō)吧,我家就有一條小黃狗。上面這句話(huà)中。狗這個(gè)物種就是類(lèi)。我家小黃狗就是對(duì)象。
Java里面,創(chuàng)建對(duì)象放在main方法外面為什么要用static修飾
作為一名從業(yè)多年的程序員,同時(shí)也出版過(guò)Java編程書(shū)籍,我來(lái)回答一下這個(gè)問(wèn)題。
首先,在main方法外部創(chuàng)建對(duì)象是不需要添加static修飾符的,看一個(gè)具體的實(shí)例:
但是,如果在main方法當(dāng)中要想使用這個(gè)對(duì)象,那么這個(gè)對(duì)象就需要使用static修飾符進(jìn)行修飾了,否則會(huì)提示錯(cuò)誤,看一下具體的實(shí)例:
原因是static修飾的main方法是隨著類(lèi)的加載而加載,要想保證main方法能夠有效使用外部的對(duì)象,則這個(gè)外部的對(duì)象要與main方法保持同步的加載。
static在Java語(yǔ)言當(dāng)中是一個(gè)比較特殊的存在,普通的應(yīng)用級(jí)開(kāi)發(fā),比如Web開(kāi)發(fā)很少會(huì)用到static修飾符,在某些場(chǎng)景下甚至?xí)?yán)格限制static的應(yīng)用,因?yàn)闀?huì)涉及到同步問(wèn)題。而在研發(fā)級(jí)開(kāi)發(fā)領(lǐng)域,static卻是比較重要的存在,尤其是在資源管理方面,合理的使用static能夠明顯提升系統(tǒng)的運(yùn)行效率。
static在Java語(yǔ)言中的基本應(yīng)用有三種情況,其一是修飾屬性,也稱(chēng)為“類(lèi)屬性”,特點(diǎn)是隨著類(lèi)的加載而加載,同時(shí)能夠在對(duì)象間共享(同一個(gè)類(lèi));其二是修飾方法,也稱(chēng)為“類(lèi)方法”或者“靜態(tài)方法”,特點(diǎn)是可以直接通過(guò)類(lèi)的名字進(jìn)行訪(fǎng)問(wèn);其三是修飾程序塊,特點(diǎn)是隨著類(lèi)的加載而加載,但是只加載一次,是一種介于方法和構(gòu)造器之間的一種應(yīng)用。
另外,內(nèi)部類(lèi)一旦使用static修飾之后,會(huì)升級(jí)為“頂級(jí)類(lèi)”,可以直接在外部創(chuàng)建其對(duì)象,內(nèi)部類(lèi)中也可以定義static屬性和static方法,這也是比較重要的一個(gè)特點(diǎn)??匆粋€(gè)例子:
除了以上應(yīng)用之外,在進(jìn)行程序調(diào)試的時(shí)候,Java程序員為了“方便”也經(jīng)常使用static修飾符,但是在調(diào)試結(jié)束之后,通常要把static修飾符去掉。
最后,static修飾符是一柄雙刃劍,用得好能夠明顯提升程序的執(zhí)行效率,用得不好不僅會(huì)加大系統(tǒng)的整體資源消耗,同時(shí)也會(huì)帶來(lái)并發(fā)問(wèn)題和穩(wěn)定問(wèn)題,所以static應(yīng)該慎用。當(dāng)不確定是否應(yīng)該使用static的時(shí)候,默認(rèn)的選擇應(yīng)該是不用。
我從事互聯(lián)網(wǎng)行業(yè)多年,目前也在帶計(jì)算機(jī)專(zhuān)業(yè)的研究生,主要的研究方向集中在大數(shù)據(jù)和人工智能領(lǐng)域,我會(huì)陸續(xù)寫(xiě)一些關(guān)于互聯(lián)網(wǎng)技術(shù)方面的文章,感興趣的朋友可以關(guān)注我,相信一定會(huì)有所收獲。
如果有互聯(lián)網(wǎng)、大數(shù)據(jù)、人工智能等方面的問(wèn)題,或者是考研方面的問(wèn)題,都可以在評(píng)論區(qū)留言!
Java中實(shí)例化,初始化和創(chuàng)建對(duì)象有什么區(qū)別
這個(gè)問(wèn)題,JAVA老鳥(niǎo)應(yīng)該都知道!
編譯:JAVA是一個(gè)編譯加解釋的語(yǔ)言,在你寫(xiě)完源碼的時(shí)候文件類(lèi)型為.java,然后編譯器開(kāi)始進(jìn)行編譯,將你源碼中的類(lèi)(修飾詞,類(lèi)名等),方法(修飾詞,方法名,含有變量等),在加入魔數(shù)(JAVA字節(jié)碼文件標(biāo)志),jdk版本信息等之后一塊編譯為字節(jié)碼文件(.class)文件!
運(yùn)行:
如果類(lèi)有被引用,類(lèi)加載器(可以自定義)會(huì)把class中的類(lèi)和其中的方法,變量等加載到內(nèi)存中,經(jīng)過(guò)驗(yàn)證(class文件驗(yàn)證),準(zhǔn)備,解析(轉(zhuǎn)變引用類(lèi)型,靜態(tài)變量分配默認(rèn)值等)
等到new的時(shí)候,反射類(lèi),初始化子類(lèi)等的時(shí)候開(kāi)始初始化(為變量等賦上默認(rèn)值)!作為J實(shí)例化對(duì)象,等待使用!
在這個(gè)過(guò)程中對(duì)象的引用,對(duì)象本身,靜態(tài)變量,會(huì)分別放在棧(虛擬棧,本地方法棧等),堆,方法區(qū)等!
所以創(chuàng)建對(duì)象就是說(shuō),把一個(gè)類(lèi)變?yōu)橐粋€(gè)運(yùn)行期可以使用的一個(gè)對(duì)象,同時(shí)分配內(nèi)存等過(guò)程,而初始化則是為創(chuàng)建對(duì)象的時(shí)候的方法,變量賦值的過(guò)程,兩者截然不同!
深入理解jvm這本書(shū)寫(xiě)的不錯(cuò),推薦看下!可以說(shuō)這些東西是面試必問(wèn)點(diǎn)了!
如果你在學(xué)習(xí),使用JAVA過(guò)程中有任何問(wèn)題,可以隨時(shí)私聊我,我們一塊交流,我知無(wú)不答!
java中抽象類(lèi)可以被實(shí)例化嗎
我們可以明確告訴你,Java中的抽象類(lèi)不可被實(shí)例化。
因?yàn)槌橄箢?lèi)的目的跟接口是一樣的,將某一些類(lèi)的共有操作進(jìn)行抽取,從而提高代碼的重用,減少代碼冗余。只不過(guò)抽象類(lèi)相對(duì)于接口而言,可以擁有自己的非抽象成員罷了。
當(dāng)然,抽象類(lèi)雖然不能被實(shí)例化,但卻有構(gòu)造器,這里我們需要明白一點(diǎn),構(gòu)造器是用來(lái)在對(duì)象實(shí)例化時(shí)進(jìn)行一些初始化操作,而不是通過(guò)調(diào)用構(gòu)造器來(lái)對(duì)象進(jìn)行實(shí)例化。而抽象類(lèi)中構(gòu)造器的作用僅僅是為了讓子類(lèi)在初始化的時(shí)候可以調(diào)用其構(gòu)造器來(lái)對(duì)自己進(jìn)行初始化。
說(shuō)這么多,估計(jì)很多人還是一頭霧水,我寫(xiě)個(gè)例子我想應(yīng)該就有很多人明白了。
抽象類(lèi):狗類(lèi)
實(shí)體類(lèi):金毛
測(cè)試類(lèi)一:直接實(shí)例化抽象類(lèi)
從以上結(jié)果我們可以得出,抽象類(lèi)是不可被實(shí)例化的。
測(cè)試類(lèi)二:將子類(lèi)實(shí)例化后賦給抽象類(lèi)
從運(yùn)行結(jié)果我們可以知道,抽象類(lèi)的構(gòu)造器確實(shí)被調(diào)用了。
綜上所述,在Java中抽象類(lèi)不可被實(shí)例化,但卻存在構(gòu)造器,構(gòu)造器的作用僅僅是在其子類(lèi)實(shí)例化時(shí)對(duì)抽象類(lèi)進(jìn)行初始化。
Java什么時(shí)候?qū)?duì)象賦值null
Java類(lèi)型分為基礎(chǔ)類(lèi)型和引用類(lèi)型
int/char/long等基礎(chǔ)類(lèi)型都有默認(rèn)值,
int0;
long0L;
類(lèi)成員變量,沒(méi)有設(shè)置默認(rèn)值,默認(rèn)為null
classPerson{
Stringname;//名字,默認(rèn)為null在使用時(shí)賦值
Stringguojia="中國(guó)";//國(guó)家默認(rèn)為中國(guó)
}
“Java”如何定義一個(gè)對(duì)象
展開(kāi)全部
Java類(lèi)對(duì)象的定義、生成和使用
1.解析簡(jiǎn)單應(yīng)用程序的結(jié)構(gòu)
publicclassMyFirstProgram{
publicstaticvoidmain(String[]args){
System.out.println("WelcometoJavaProgramming!Thisismyfirstprogram!");
}
}
(1)Java程序中必須有而且只能有一個(gè)公共類(lèi),在公共類(lèi)中必須有而且只能有一個(gè)主方法,主方法總是:publicstaticvoidmain(String[]args){}。
(2)Java程序的任何部分都必須包含在某一個(gè)類(lèi)中。
(3)System.out.println(“WelcometoJavaProgramming!”);是main方法的一個(gè)語(yǔ)句,作用是把一行文本輸出。使用的是System.out對(duì)象,并調(diào)用了它的println方法。注意,利用句點(diǎn)來(lái)調(diào)用一個(gè)方法(稱(chēng)作:成員訪(fǎng)問(wèn)符),Java的通用語(yǔ)法是:
object.method(parameters)
//關(guān)鍵字public是一種訪(fǎng)問(wèn)控制符(accessmodifier)。
//關(guān)鍵字class定義了一個(gè)名字為MyFirstProgram的類(lèi)。
//類(lèi)名的命名規(guī)則符合標(biāo)識(shí)符的規(guī)則。習(xí)慣上類(lèi)名是由幾個(gè)名詞緊靠在一起構(gòu)成,并且每個(gè)單詞的首字母都大寫(xiě)。不懂可以加入組織先記下175在一次寫(xiě)下161最后填寫(xiě)984就會(huì)出現(xiàn)一個(gè)神器的數(shù)字【扣裙】
//源代碼的文件名必須同公共類(lèi)的名字一樣,并且以.java作為文件擴(kuò)展名。
//Java解釋器總是從類(lèi)的main方法開(kāi)始執(zhí)行代碼。
//在c++中的所有函數(shù),在Java中都是某個(gè)類(lèi)的方法。
//與c/C++不同的是,main方法并不對(duì)操作系統(tǒng)返回一個(gè)“退出代碼”。如果main方法正常退出,則Java程序的退出代碼為0,表明成功地執(zhí)行完畢此程序。如果以不同的退出代碼結(jié)束程序,則使用System.exit方法。
//回車(chē)并不意味著一個(gè)語(yǔ)句的結(jié)束,一個(gè)語(yǔ)句可以跨越多行。
//Java中的方法可以沒(méi)有參數(shù)(parameter),也可以有一個(gè)或多個(gè)參數(shù)(有些程序設(shè)計(jì)語(yǔ)言中稱(chēng)它們?yōu)閍rgument(參數(shù)))。即使一個(gè)方法沒(méi)有參數(shù),空的圓括號(hào)也是必需的。
2.對(duì)象的定義和使用
2.1.1定義類(lèi)的對(duì)象
類(lèi)對(duì)象的生成過(guò)程,包括對(duì)象的聲明、實(shí)例化和初始化。實(shí)例化一個(gè)對(duì)象就是通過(guò)new運(yùn)算符為對(duì)象分配空間(類(lèi)屬于復(fù)合數(shù)據(jù)類(lèi)型,在聲明對(duì)象時(shí),系統(tǒng)并沒(méi)有為對(duì)象分配空間,用戶(hù)需要應(yīng)用new完成分配空間的任務(wù))。既可以在聲明對(duì)象時(shí)實(shí)例化(創(chuàng)建)對(duì)象,也可以先聲明對(duì)象,然后再創(chuàng)建。
(1)在聲明對(duì)象時(shí),創(chuàng)建對(duì)象:
[修飾符]類(lèi)名對(duì)象名[=new類(lèi)名(參數(shù)列表)];
例如:publicStrings=newString(“Thedefinitionofclass”);
(2)先聲明對(duì)象,然后再創(chuàng)建對(duì)象:
2.1.2對(duì)象的使用
包括對(duì)屬性和方法的引用,通過(guò)分量訪(fǎng)問(wèn)運(yùn)算符“.”來(lái)實(shí)現(xiàn)。
格式為:類(lèi)對(duì)象名.成員名
2.1.3對(duì)象的清除
類(lèi)對(duì)象的清除由系統(tǒng)自動(dòng)完成,不需要用戶(hù)干預(yù)。
//BookInfo.java
publicclassBookInfo{
publicstaticvoidmain(String[]args){
BookClassbook1=newBookClass();
book1.setname(“Java2”);
book1.setauthor(“Hanjun”);
book1.settype(“ComputerScience”);
System.out.println(“下面是一本書(shū)的信息:”);
System.out.println(“書(shū)名:“+book1.getname());
System.out.println(“作者:“+book1.getauthor());
System.out.println(“類(lèi)別:“+book1.gettype());
}
}
//BookClass
classBookClass{
privateStringname;
privateStringauthor;
privateStringtype;
publicvoidsetname(Stringtname){
name=tname;
}
publicvoidsetauthor(Stringtauthor){
author=tauthor;
}
publicvoidsettype(Stringttype){
type=ttype;
}
publicStringgetname(){
returnname;
}
publicStringgetauthor(){
returnauthor;
}
publicStringgettype(){
returntype;
}
java對(duì)象實(shí)例化過(guò)程和實(shí)例化對(duì)象后怎么解釋代碼的問(wèn)題分享結(jié)束啦,以上的文章解決了您的問(wèn)題嗎?歡迎您下次再來(lái)哦!
本文鏈接:http:///ruanjian/3165.html