java基礎(chǔ)知識總結(jié)1-10

1.什么是Java虛擬機?為什么Java被稱作是“平臺無關(guān)的編程語言”?

? ??Java虛擬機是一個可以執(zhí)行Java字節(jié)碼的虛擬機進程。Java源文件被編譯成能被Java虛擬機執(zhí)行的字節(jié)碼文件。

Java被設(shè)計成允許應(yīng)用程序可以運行在任意的平臺,而不需要程序員為每一個平臺單獨重寫或者是重新編譯。Java虛擬機讓這個變?yōu)榭赡埽驗樗赖讓佑布脚_的指令長度和其他特性。

java的跨平臺不是java源程序的跨平臺 ,如果是這樣,那么所以語言都是跨平臺的, java源程序先經(jīng)過javac編譯器編譯成二進制的.class字節(jié)碼文件(java的跨平臺指的就是.class字節(jié)碼文件的跨平臺,.class字節(jié)碼文件是與平臺無關(guān)的),.class文件再運行在jvm上,java解釋器(jvm的一部分)會將其解釋成對應(yīng)平臺的機器碼執(zhí)行,所以java所謂的跨平臺就是在不同平臺上安裝了不同的jvm,而在不同平臺上生成的.class文件都是一樣的,而.class文件再由對應(yīng)平臺的jvm解釋成對應(yīng)平臺的機器碼執(zhí)行。 最后解釋下機器碼和字節(jié)碼的區(qū)別: 一,機器碼,完全依附硬件而存在~并且不同硬件由于內(nèi)嵌指令集不同,即使相同的0 1代碼 意思也可能是不同的~換句話說,根本不存在跨平臺性~比如~不同型號的CPU,你給他個指令10001101,他們可能會解析為不同的結(jié)果~ 二,我們知道JAVA是跨平臺的,為什么呢?因為他有一個jvm,不論哪種硬件,只要你裝有jvm,那么他就認識這個JAVA字節(jié)碼~~~~至于底層的機器碼,咱不用管,有jvm搞定,他會把字節(jié)碼再翻譯成所在機器認識的機器碼

2.jre和jdk的區(qū)別

Java運行時環(huán)境(JRE)。它包括Java虛擬機、Java核心類庫和支持文件。它不包含開發(fā)工具(JDK)--編譯器、調(diào)試器和其他工具。

Java開發(fā)工具包(JDK)是完整的Java軟件開發(fā)包,包含了JRE,編譯器和其他的工具(比如:JavaDoc,Java調(diào)試器),可以讓開發(fā)者開發(fā)、編譯、執(zhí)行Java應(yīng)用程序。

JRE: Java Runtime Environment

JDK:Java Development Kit

JRE顧名思義是java運行時環(huán)境,包含了java虛擬機,java基礎(chǔ)類庫。是使用java語言編寫的程序運行所需要的軟件環(huán)境,是提供給想運行java程序的用戶使用的。

JDK顧名思義是java開發(fā)工具包,是程序員使用java語言編寫java程序所需的開發(fā)工具包,是提供給程序員使用的。JDK包含了JRE,同時還包含了編譯java源碼的編譯器javac,還包含了很多java程序調(diào)試和分析的工具:jconsole,jvisualvm等工具軟件,還包含了java程序編寫所需的文檔和demo例子程序。


3.”static”關(guān)鍵字是什么意思?Java中是否可以覆蓋(override)一個private或者是static的方法?

https://www.cnblogs.com/dotgua/p/6354151.html?utm_source=itdadao&utm_medium=referral

首先是static關(guān)鍵字,static原意是“靜態(tài)的”。

①static可以修飾內(nèi)部類,但是不能修飾普通類。靜態(tài)內(nèi)部類的話可以直接調(diào)用靜態(tài)構(gòu)造器(不用對象)。

②static修飾方法,static方法就是沒有this的方法。在static方法內(nèi)部不能調(diào)用非靜態(tài)方法,反過來是可以的。而且可以在沒有創(chuàng)建任何對象的前提下,僅僅通過類本身來調(diào)用static方法。這實際上正是static方法的主要用途。方便在沒有創(chuàng)建對象的情況下來進行調(diào)用(方法/變量)。

? ? 最常見的static方法就是main,因為所有對象都是在該方法里面實例化的,而main是程序入口,所以要通過類名來調(diào)用。還有就是main中需要經(jīng)常訪問隨類加載的成員變量。?

? ③static修飾變量,就變成了靜態(tài)變量,隨類加載一次,可以被多個對象共享。?

? ④static修飾代碼塊,形成靜態(tài)代碼塊,用來優(yōu)化程序性能,將需要加載一次的代碼設(shè)置成隨類加載,靜態(tài)代碼塊可以有多個。?

Java中static方法不能被覆蓋,因為方法覆蓋是基于運行時動態(tài)綁定的,而static方法是編譯時靜態(tài)綁定的。

還有私有的方法不能被繼承,子類就沒有訪問權(quán)限,肯定也是不能別覆蓋的


4.是否可以在static環(huán)境訪問非static成員?

因為靜態(tài)的成員屬于類,隨著類的加載而加載到靜態(tài)方法區(qū)內(nèi)存,當類加載時,此時不一定有實例創(chuàng)建,沒有實例,就不可以訪問非靜態(tài)的成員。

5.Java支持的數(shù)據(jù)類型有哪些?什么是自動拆裝箱?

byte short int float double long??boolean char

自動裝箱是Java編譯器在基本數(shù)據(jù)類型和對應(yīng)的對象包裝類型之間做的一個轉(zhuǎn)化。比如:把int轉(zhuǎn)化成Integer,double轉(zhuǎn)化成Double,等等。反之就是自動拆箱。

Java支持的數(shù)據(jù)類型包括兩種:一種是基本數(shù)據(jù)類型,包含byte,char,short, boolean ,int , long, float,double;另一種是引用類型:如String等,其實是對象的引用,JVM中虛擬棧中存的是對象的地址,創(chuàng)建的對象實質(zhì)在堆中,通過地址來找到堆中的對象的過程,即為引用類型。自動裝箱就是Java編譯器在基本數(shù)據(jù)類型和對應(yīng)的對象包裝類型間的轉(zhuǎn)化,即int轉(zhuǎn)化為Integer,自動拆箱是Integer調(diào)用其方法將其轉(zhuǎn)化為int的過程

6.方法重寫override和重載overload

方法重寫的原則:

重寫方法的方法名稱、參數(shù)列表必須與原方法的相同,返回類型可以相同也可以是原類型的子類型(從Java SE5開始支持)。

重寫方法不能比原方法訪問性差(即訪問權(quán)限不允許縮小)。

重寫方法不能比原方法拋出更多的異常。

被重寫的方法不能是final類型,因為final修飾的方法是無法重寫的。

被重寫的方法不能為private,否則在其子類中只是新定義了一個方法,并沒有對其進行重寫。

被重寫的方法不能為static。如果父類中的方法為靜態(tài)的,而子類中的方法不是靜態(tài)的,但是兩個方法除了這一點外其他都滿足重寫條件,那么會發(fā)生編譯錯誤;反之亦然。即使父類和子類中的方法都是靜態(tài)的,并且滿足重寫條件,但是仍然不會發(fā)生重寫,因為靜態(tài)方法是在編譯的時候把靜態(tài)方法和類的引用類型進行匹配。

重寫是發(fā)生在運行時的,因為編譯期編譯器不知道并且沒辦法確定該去調(diào)用哪個方法,JVM會在代碼運行的時候作出決定。

方法重載的原則:

方法名稱必須相同。

參數(shù)列表必須不同(個數(shù)不同、或類型不同、參數(shù)類型排列順序不同等)。

方法的返回類型可以相同也可以不相同。

僅僅返回類型不同不足以成為方法的重載。

重載是發(fā)生在編譯時的,因為編譯器可以根據(jù)參數(shù)的類型來選擇使用哪個方法。

重寫和重載的不同:

方法重寫要求參數(shù)列表必須一致,而方法重載要求參數(shù)列表必須不一致。

方法重寫要求返回類型必須一致(或為其子類型),方法重載對此沒有要求。

方法重寫只能用于子類重寫父類的方法,方法重載用于同一個類中的所有方法。

方法重寫對方法的訪問權(quán)限和拋出的異常有特殊的要求,而方法重載在這方面沒有任何限制。

父類的一個方法只能被子類重寫一次,而一個方法可以在所有的類中可以被重載多次。

重載是編譯時多態(tài),重寫是運行時多態(tài)。


7.Java中,什么是構(gòu)造方法?什么是構(gòu)造方法重載?什么是復制構(gòu)造方法?

當新對象被創(chuàng)建的時候,構(gòu)造方法會被調(diào)用。每一個類都有構(gòu)造方法。在程序員沒有給類提供構(gòu)造方法的情況下,Java編譯器會為這個類創(chuàng)建一個默認的構(gòu)造方法。

Java中構(gòu)造方法重載和方法重載很相似。可以為一個類創(chuàng)建多個構(gòu)造方法。每一個構(gòu)造方法必須有它自己唯一的參數(shù)列表。

Java不支持像C++中那樣的復制構(gòu)造方法,這個不同點是因為如果你不自己寫構(gòu)造方法的情況下,Java不會創(chuàng)建默認的復制構(gòu)造方法。

關(guān)于復制構(gòu)造函數(shù):C++中的復制構(gòu)造函數(shù)通常有三種作用

? 1.對象作為函數(shù)參數(shù)

? 2.對象作為函數(shù)返回值

? 3.使用一個對象對另一個對象初始化。

? C++語法允許用戶定義自己的復制構(gòu)造函數(shù)以實現(xiàn)自定義的復制,比如說進行深復制。Java并不支持這樣的復制構(gòu)造函數(shù)。但是這并不代表Java中沒有這種機制,在Java中Object類的clone()方法就是這種機制的體現(xiàn)。而且通過以上三種方式對Java對象進行的操作都是對引用的操作,不像C++里面是對原對象的操作,因此Java中也不需要考慮需要使用復制構(gòu)造函數(shù)這種問題。

關(guān)于clone??https://www.cnblogs.com/acode/p/6306887.html? ?連體嬰

8.java支持多繼承嗎?

Java中類不支持多繼承,只支持單繼承(即一個類只有一個父類)。 但是java中的接口支持多繼承,,即一個子接口可以有多個父接口。(接口的作用是用來擴展對象的功能,一個子接口繼承多個父接口,說明子接口擴展了多個功能,當類實現(xiàn)接口時,類就擴展了相應(yīng)的功能)

為什么不支持? http://blog.csdn.net/allen_zhao_2012/article/details/46316401

9.接口和抽象類的區(qū)別

Java提供和支持創(chuàng)建抽象類和接口。它們的實現(xiàn)有共同點,不同點在于:

接口中所有的方法隱含的都是抽象的。而抽象類則可以同時包含抽象和非抽象的方法。

類可以實現(xiàn)很多個接口,但是只能繼承一個抽象類

類可以不實現(xiàn)抽象類和接口聲明的所有方法,當然,在這種情況下,類也必須得聲明成是抽象的。

抽象類可以在不提供接口方法實現(xiàn)的情況下實現(xiàn)接口。

Java接口中聲明的變量默認都是final的。抽象類可以包含非final的變量。

Java接口中的成員函數(shù)默認是public的。抽象類的成員函數(shù)可以是private,protected或者是public。

接口是絕對抽象的,不可以被實例化。抽象類也不可以被實例化,但是,如果它包含main方法的話是可以被調(diào)用的。

也可以參考JDK8中抽象類和接口的區(qū)別


10 什么是值傳遞和引用傳遞?

值傳遞是對基本型變量而言的,傳遞的是該變量的一個副本,改變副本不影響原變量.

引用傳遞一般是對于對象型變量而言的,傳遞的是該對象地址的一個副本,?并不是原對象本身?。

一般認為,java內(nèi)的傳遞都是值傳遞.?java中實例對象的傳遞是引用傳遞??

值傳遞,顧名思義傳遞的是其值,也可以理解為副本給你,任意修改,原本不變。 引用傳遞,顧名思義傳遞本身,或者說傳遞的是地址,修改的是本身或者是原本地址里的內(nèi)容。 值傳遞,原本不改變,引用傳遞,原本改變

https://www.nowcoder.com/questionTerminal/b296e9e1c40542ec8677c1e452b6b576

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,546評論 6 533
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,570評論 3 418
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,505評論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,017評論 1 313
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,786評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,219評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,287評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,438評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,971評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 40,796評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,995評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,540評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,230評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,662評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,918評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,697評論 3 392
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,991評論 2 374

推薦閱讀更多精彩內(nèi)容

  • 一:java概述:1,JDK:Java Development Kit,java的開發(fā)和運行環(huán)境,java的開發(fā)工...
    ZaneInTheSun閱讀 2,676評論 0 11
  • 寫代碼: 1,明確需求。我要做什么? 2,分析思路。我要怎么做?1,2,3。 3,確定步驟。每一個思路部分用到哪些...
    橫沖直撞666閱讀 356評論 0 0
  • 一:java概述:1991 年Sun公司的James Gosling(詹姆斯·高斯林)等人開始開發(fā)名稱為 Oak ...
    Roronoa_Zoro_閱讀 271評論 0 1
  • 與君飲馬共西東, 與君夜行過江風。 手足不過匆相逢, 謝君為我筑重夢, 三碗烈酒憶崢嶸。 他朝與君再重逢, 重燃一...
    關(guān)馨仁閱讀 216評論 0 4
  • 初三的暑假長達兩個月,我麻木地將自己封閉了起來,臉上的笑容早已丟失,已經(jīng)不記得多少次因為成績而自責了,直到通知書送...
    崎零壹閱讀 1,001評論 0 1