1.java的三種技術架構?
a.J2EE(Java 2 Platform Enterprise Edition) 企業版
是為開發企業環境下的應用程式提供的一套解決方案。
該技術體系中包括 servlet jsp等,主要針對于web應用程式開發。
b.J2SE(Java 2 Platform Standard Edition) 标準版
是為開發普通桌面和商務應用程式提供的解決方案。
該技術體系是其他兩者的基礎,可以完成一些桌面應用程式的開發。
c.J2ME(Java 2 Platform Micro Edition) 小型版
是為開發電子消費産品和嵌入式裝置提供的解決方案。
該技術體系主要用于小型電子消費類産品,如手機中的應用程式等。
2. Jdk和Jre的差別?
jdk(java development kit),是java的開發工具集。
jre(java runtime environment),是java程式的運作環境。
是以jdk和jre的差別就是一個用于開發,一個用于運作,聯系就是他們都是java開發者所必備的
3. Javac和Java指令做什麼事情呢?
要知道java是分兩部分的:一個是編譯,一個是運作。
javac:負責的是編譯的部分,當執行javac時,會啟動java的編譯器程式。對指定擴充名的.java檔案進行編譯。 生成了jvm可以識别的位元組碼檔案。也就是class檔案,也就java的運作程式。
java:負責運作的部分.會啟動jvm.加載運作時所需的類庫,并對class檔案進行執行.檔案要被執行,必須要有一個執行的起始點,這個起始點就是main函數.
4. Java的資料類型。
Java的資料類型有兩種:
(1)基本資料類型(八大基本資料類型)
整型
a. byte位元組型 1位元組 8bit 最大存儲資料量是255,存放的資料範圍是-128~127之間
b. short短整型 2位元組 16bit 最大資料存儲量是65536,資料範圍是-32768~32767之間
c. int整型 4位元組 32bit 最大資料存儲容量是2的32次方減1,資料範圍是負的2的31次方到正的2的31次方減1
d. long長整型 8位元組 64bit 最大資料存儲容量是2的64次方減1,資料範圍為負的2的63次方到正的2的63次方減1
浮點型
e. float單精度 4位元組 32bit 資料範圍在3.4e-45~1.4e38,直接指派時必須在數字後加上f或F
f. double雙精度 8位元組 64bit 資料範圍在4.9e-324~1.8e308,指派時可以加d或D也可以不加
字元類型
g. char字元型 用單引号
布爾類型
h. boolean布爾型 true/false(隻有真假兩種結果)
(2)引用資料類型
JAVA中,非簡單資料類型的類型都是引用資料類型。
5. &和&&的差別?
&和&&都是邏輯運算符,都是判斷兩邊同時真則為真,否則為假;但是&&當第一個條件不成之後,後面的條件都不執行了,而&則還是繼續執行,直到整個條件語句執行完為止。
6. |和||的差別?
||和|都是表示“或”,差別是||隻要滿足第一個條件,後面的條件就不再判斷,而|要對所有的條件進行判斷。
7. 棧和堆。
JAVA的JVM的記憶體可分為3個區:堆(heap)、棧(stack)和方法區(method)堆區:1.存儲的全部是對象,每個對象都包含一個與之對應的class的資訊。(class的目的是得到操作指令)。2.jvm隻有一個堆區(heap)被所有線程共享,堆中不存放基本類型和對象引用,隻存放對象本身。棧區:1.每個線程包含一個棧區,棧中隻儲存基礎資料類型的對象和自定義對象的引用(不是對象),對象都存放在堆區中。2.每個棧中的資料(原始類型和對象引用)都是私有的,其他棧不能通路。3.棧分為3個部分:基本類型變量區、執行環境上下文、操作指令區(存放操作指令)。方法區:1.又叫靜态區,跟堆一樣,被所有的線程共享。方法區包含所有的class和static變量。2.方法區中包含的都是在整個程式中永遠唯一的元素,如class,static變量。
在Java語言裡堆(heap)和棧(stack)裡的差別:
1. 棧(stack)與堆(heap)都是Java用來在Ram中存放資料的地方。與C++不同,Java自動管理棧和堆,程式員不能直接地設定棧或堆。
2. 棧中存放局部變量(基本類型的變量)和對象的reference。棧的優勢是,存取速度比堆要快,僅次于寄存器,棧資料可以共享。但缺點是,存在棧中的資料大小與生存期必須是确定的,缺乏靈活性。棧是跟随線程的,有線程就有棧。
3. 堆中存放對象,包括對象變量以及對象方法。堆的優勢是可以動态地配置設定記憶體大小,生存期也不必事先告訴編譯器,Java的垃圾收集器會自動收走這些不再使用的資料。但缺點是,由于要在運作時動态配置設定記憶體,存取速度較慢。堆是跟随JVM的,有JVM就有堆記憶體。
8. 面向對象。
面向對象主要特征:
封裝性:封裝是一種資訊隐蔽技術,它展現于類的說明,使資料更安全.是對象的重要特性。封裝使資料和加工該資料的方法(函數)封裝為一個整體,以實作獨立性很強的子產品,使得使用者隻能見到對象的外特性(對象能接受哪些消息,具有那些處理能力),而對象的内特性(儲存内部狀态的私有資料和實作加工能力的算法)對使用者是隐蔽的。封裝的目的在于把對象的設計者和對象者的使用分開,使用者不必知曉行為實作的細節,隻須用設計者提供的消息來通路該對象。
繼承性:繼承性是子類自動共享父類之間資料和方法的機制。它由類的派生功能展現。一個類直接繼承其它類的全部描述,同時可修改和擴充。
繼承具有傳遞性和單根性.如果B類繼承了A類,而C類又繼承了B類,則可以說,C類在繼承了B類的同時,也繼承了A類,C類中的對象,可以實作A類中的方法.一個類,隻能夠同時繼承另外一個類,而不能同時繼承多個類,通常所說的多繼承是指一個類在繼承其父類的同時,實作其他接口.類的對象是各自封閉的,如果沒繼承性機制,則類對象中資料、方法就會出現大量重複。繼承支援系統的可重用性,進而達到減少代碼量的作用,而且還促進系統的可擴充性。
多态性:對象根據所接收的消息而做出動作。同一消息為不同的對象接受時可産生完全不同的行動,這種現象稱為多态性。利用多态性使用者可發送一個通用的資訊,而将所有的實作細節都留給接受消息的對象自行決定,如是,同一消息即可調用不同的方法。例如:Print消息被發送給一圖或表時調用的列印方法與将同樣的Print消息發送給一正文檔案而調用的列印方法會完全不同。多态性的實作受到繼承性的支援,利用類繼承的層次關系,把具有通用功能的協定存放在類層次中盡可能高的地方,而将實作這一功能的不同方法置于較低層次,這樣,在這些低層次上生成的對象就能給通用消息以不同的響應。在OOPL中可通過在派生類中重定義基類函數(定義為重載函數或虛函數)來實作多态性。
綜上可知,在OO方法中,對象和傳遞消息分别表現事物及事物間互相聯系的概念。類和繼承是是适應人們一般思維方式的描述範式。方法是允許作用于該類對象上的各種操作。這種對象、類、消息和方法的程式設計範式的基本點在于對象的封裝性和類的繼承性。通過封裝能将對象的定義和對象的實作分開,通過繼承能展現類與類之間的關系,以及由此帶來的動态聯編和實體的多态性,進而構成了面向對象的基本特征。
面向對象的要素
(1)抽象。
抽象是指強調實體的本質、内在的屬性。在系統開發中,抽象指的是在決定如何實作對象之前的對象的意義和行為。使用抽象可以盡可能避免過早考慮一些細節。
類實作了對象的資料(即狀态)和行為的抽象。
(2)封裝性(資訊隐藏)。
封裝性是保證軟體部件具有優良的子產品性的基礎。
面向對象的類是封裝良好的子產品,類定義将其說明(使用者可見的外部接口)與實作(使用者不可見的内部實作)顯式地分開,其内部實作按其具體定義的作用域提供保護。
對象是封裝的最基本機關。封裝防止了程式互相依賴性而帶來的變動影響。面向對象的封裝比傳統語言的封裝更為清晰、更為有力。
(3)共享性
面向對象技術在不同級别上促進了共享
同一類中的共享。同一類中的對象有着相同資料結構。這些對象之間是結構、行為特征的共享關系。
在同一應用中共享。在同一應用的類層次結構中,存在繼承關系的各相似子類中,存在資料結構和行為的繼承,使各相似子類共享共同的結構和行為。使用繼承來實作代碼的共享,這也是面向對象的主要優點之一。
在不同應用中共享。面向對象不僅允許在同一應用中共享資訊,而且為未來目标的可重用設計準備了條件。通過類庫這種機制和結構來實作不同應用中的資訊共享。
9. 成員變量和局部變量的差別?
成員變量:在這個類裡定義的私有變量,屬于這個類。
局部變量:在方法體裡建立,在方法體外通路不到這個變量。局部變量的建立與使用(局部變量必須指派,成員變量可以不指派)
差別:
局部變量描述的是這個方法體内的屬性,而成員變量描述的是這個對象裡的屬性。
成員變量可以被public、protected、default、private、static、final修飾符修飾,局部變量隻能被final修飾符修飾。
成員變量在堆裡進行建立,局部變量在棧裡進行建立。
局部變量是系統預設值,局部變量沒有系統預設值,必須手動指派
10. 構造函數和一般函數有什麼差別?
a:兩個函數定義格式不同。
b:構造函數是在對象建立時,就被調用,用于初始化,而且初始化動作隻執行一次。
一般函數,是對象建立後,需要調用才執行,可以被調用多次。
11. 構造代碼塊和構造函數有什麼差別?
構造代碼塊:是給所有的對象進行初始化,也就是說,所有的對象都會調用一個代碼塊。隻要對象一建立。就會調用這個代碼塊。
構造函數:是給與之對應的對象進行初始化。它具有針對性。