一、面向對象的特徵有哪些?java
答:面向對象的特徵主要有如下幾個:程序員
1)抽象:抽象就是忽略一個主題中與當前目標無關的那些方面,以便更充分地注意與當前目標有關的方面。抽象並不須要瞭解所有的問題,而只是選擇其中的一部分,避免考慮一些與目標無關的細節。抽象包括兩個方面,一是過程抽象,二是數據抽象。web
2)繼承:一個新類能夠從現有的類中派生,這個過程稱爲類繼承。新類繼承了原始類的特性,新類稱爲原始類的派生類(子類),而原始類稱爲新類的基類(父類)。派生類能夠從它的基類那裏繼承方法和實例變量,而且新類能夠修改或增長新的方法使之更適合特殊的須要。面試
3)封裝:封裝是把過程和數據包圍起來,對數據的訪問只能經過已定義的界面。面向對象計算始於這個基本概念,即現實世界能夠被描繪成一系列徹底自治、封裝的對象,這些對象經過一個受保護的接口訪問其餘對象。編程
4)多態性:多態性是指容許不一樣類的對象對同一消息做出響應。多態性包括參數化多態性和包含多態性。多態性語言具備靈活、抽象、行爲共享、代碼共享的優點,很好的解決了應用程序函數同名問題。數組
2、做用域public,private,protected,以及不寫時的區別?緩存
答:區別以下:安全
做用域 當前類 同包 子孫類 其餘服務器
public √ √ √ √數據結構
protected √ √ √ ×
default √ √ × ×
private √ × × ×
不寫時默認爲default。
3、short s1 = 1; s1 = s1 + 1;有什麼錯?
short s1 = 1; s1 += 1;有什麼錯?
答:short s1 = 1; s1 = s1 + 1;s1+1運算結果是int 型,須要強制轉換類型;short s1 = 1; s1 += 1;能夠正確編譯,自動類型提高。
4、Java 有沒有goto?
答:goto 是java 中的保留字,如今沒有在java 中使用,可能之後會使用。
5、int 和Integer 有什麼區別?
答:Java 提供兩種不一樣的類型:基本數據類型和引用類型;
int 是java 的基本數據類型,Integer 是java 爲int 提供的封裝類。
Java 爲每一個基本數據類型提供了封裝類
基本類型: boolean,char,byte,short,int,long,float,double
封裝類型:Boolean,Character,Byte,Short,Integer,Long,Float,Double
6、&和&&的區別?
答:&&和&都表示與時,區別是&&只要第一個條件不知足,後面條件就再也不判斷,而&要對全部的條件都進行判斷。&還能夠用做位運算符,當&操做符兩邊的表達式不是 boolean 類型時,&表示按位與操做兩個操做數中位都爲1,結果才爲1,不然結果爲0。
7、簡述邏輯操做(&,|,^)與條件操做(&&,||)的區別?
答:區別主要有兩點:
a.條件操做只能操做布爾型的,而邏輯操做不只能夠操做布爾型,並且能夠操做數值型。
b.邏輯操做不會產生短路。
8、heap 和stack 有什麼區別?
答:
一、棧(操做系統):由操做系統自動分配釋放 ,存放函數的參數值,局部變量的值等。其操做方式相似於數據結構中的棧;
二、堆(操做系統): 通常由程序員分配釋放, 若程序員不釋放,程序結束時可能由OS回收,分配方式卻是相似於鏈表。
要點:堆,隊列優先,先進先出(FIFO—first in first out)。棧,先進後出(FILO—First-In/Last-Out)。
9、Math.round(11.5) 等於多少? Math.round(-11.5)等於多少?
答:Math.round(11.5)==12 Math.round(-11.5)==-11 round 方法返回與參數最接近的長整數,參數加1/2 後求其floor(向下取整)。
10、swtich 是否能做用在byte 上,是否能做用在long 上,是否能做用在String上?
答:switch(ex)中,ex是一個整數表達式。所以傳遞給switch 和case語句的參數應該是int、short、char 或者byte。long,string 都不能做用在swtich上。
11、編程題: 用最有效率的方法算出2 乘以8 等於幾?
答: 2 << 3。
12、數組中有沒有length()這個方法? String 中有沒有length()這個方法?
答:數組中沒有length()這個方法,有length 屬性。String中 有length()這個方法。
13、在JAVA 中,如何跳出當前的多重嵌套循環?
答:在最外層循環前加label 標識,而後用break:label 方法便可跳出多重循環。
14、構造器Constructor 是否可被override?
答:構造器Constructor 不能被繼承,所以不能重寫Overriding,但能夠被重載Overloading。
15、兩個對象值相同(x.equals(y) == true),但卻可有不一樣的hash code,這句話對不對?
答:不對,有相同的hash code。Java中對於eqauls方法和hashCode方法是這樣規定的:(1)若是兩個對象相同(equals方法返回true),那麼它們的hashCode值必定要相同;(2)若是兩個對象的hashCode相同,它們並不必定相同。
16、String 類是否能夠被繼承?
答:String 類是final 類,故不能夠被繼承。
17、如下二條語句返回值爲true 的有:
A:「beijing」==「beijing」;
B:「beijing」.equalsIgnoreCase(new String(「beijing」));
答:A 和B 。equalsIgnoreCase()方法將一個 String 與另外一個 String 進行比較時,不考慮大小寫。若是兩個字符串的長度相等,而且兩個字符串中的相應字符都相等(忽略大小寫),則認爲這兩個字符串是相等的。equals方法和equalsIgnoreCase方法都是應用十分普遍的方法,二者之間的區別爲equals方法在比較的過程當中嚴格區分大小寫,而equalsIgnoreCase方法在比較的過程當中忽略大小寫。
18、當一個對象被看成參數傳遞到一個方法後,此方法可改變這個對象的屬性,並可返回變化後的結果,那麼這裏究竟是值傳遞仍是引用傳遞?
答:是值傳遞。Java 編程語言只有值傳遞參數。當一個對象實例做爲一個參數被傳遞到方法中時,參數的值就是對該對象的引用。對象的內容能夠在被調用的方法中改變,但對象的引用是永遠不會變的。
19、咱們在web 應用開發中常常遇到輸出某種編碼的字符,如iso8859-1,如何輸出一個某種編碼的字符串?
答:
public String translate(String str) { String tempStr = ""; try { tempStr = new String(str.getBytes("ISO-8859-1"), "GBK"); tempStr = tempStr.trim(); } catch (Exception e) { System.err.println(e.getMessage()); } return tempStr; }
20、String, StringBuffer StringBuilder 的區別。
答:String 的長度是不可變的;StringBuffer 的長度是可變的,若是你對字符串中的內容,須要常常進行修改時,那麼使用StringBuffer,若是最後須要String,可使用StringBuffer 的toString()方法轉換成String;線程安全;StringBuilder是JDK1.5發佈的,它和StringBuffer本質上沒什麼區別,就是去掉了保證線程安全的那部分,減小了開銷。運行速度快慢爲:StringBuilder > StringBuffer > String一般應該優先使用StringBuilder 類,因爲它不執行同步,因此速度更快。
21、Overload 和Override 的區別。Overloaded 的方法是否能夠改變返回值的類型?
答:方法的重寫Overriding 和重載Overloading 是Java 多態性的不一樣表現。重寫Overriding 是父類與子類之間多態性的一種表現,重載Overloading 是一個類中多態性的一種表現。若是在子類中定義的某個方法與其父類中某個方法有相同的名稱和參數,咱們說該方法被重寫了(Overriding)。子類的對象使用這個方法時,將調用子類中的定義,對它而言,父類中的定義如同被「屏蔽」了。若是在一個類中定義了多個同名的方法,它們的參數個數或參數類型不一樣,則稱爲方法的重載(Overloading)。Overloaded 的方法是能夠改變返回值的類型。
22、定義類A 和類B 以下:
class A { int a = 1; double d = 2.0; void show() { System.out.println("Class A: a=" + a + "\td=" + d); } } class B extends A { float a = 3.0f; String d = "Java program."; void show() { super.show(); System.out.println("Class B: a=" + a + "\td=" + d); } }
(1) 若在應用程序的main 方法中有如下語句:
A a=new A();
a.show();
則輸出的結果如何?
(2) 若在應用程序的main 方法中定義類B 的對象b:
A b=new B();
b.show();
則輸出的結果如何?
答:輸出結果爲:
1)Class A: a=1 d=2.0 ;
2)Class A: a=1 d=2.0
Class B: a=3.0 d=Java program。
23、簡述JVM 加載class 文件的原理機制?
答:Java中的全部類,都須要由類加載器裝載到JVM中才能運行。類加載器自己也是一個類,而它的工做就是把class文件從硬盤讀取到內存中。在寫程序的時候,咱們幾乎不須要關心類的加載,由於這些都是隱式裝載的,除非咱們有特殊的用法,像是反射,就須要顯式的加載所須要的類。JVM 中類的裝載是由ClassLoader 和它的子類來實現的,Java ClassLoader是一個重要的Java 運行時系統組件。它負責在運行時查找和裝入類文件的類。
24、char 型變量中能不能存貯一箇中文漢字?爲何?
答:能夠,由於Java默認採用Unicode編碼,一個char 佔2個字節,一個漢字也是佔2個字節,因此放一箇中文漢字是沒問題的。
25、abstract class 和interface 有什麼區別?
答:含有 abstract 修飾符的類即爲抽象類,抽象類不能建立實例,含有抽象方法的類必須定義爲 abstract class。接口是一種特殊的抽象類,接口中的全部方法都必須是抽象的,接口中的方法默認定義爲 public abstract 類型,接口中的成員變量類型默認爲 public static final。
兩者的區別:
(1) 抽象類能夠有構造方法,接口中不能有構造方法。
(2) 抽象類中能夠有普通成員變量,接口中沒有普通成員變量。
(3) 抽象類中能夠包含非抽象的普通方法,接口中的全部方法必須都是抽象的,不能有非抽象的方法。
(4) 抽象類中的抽象方法的訪問權限能夠是 public、protected 和(默認類型,雖然 eclipse 不報錯,但通常不使用,由於默認類型子類不能繼承),接口中的抽象方法只能是 public 類型的,而且默認即爲 public abstract 類型。
(5) 抽象類中能夠包含靜態方法,在 JDK1.8 以前接口中不能不包含靜態方法,JDK1.8 之後能夠包含。
(6) 抽象類和接口中均可以包含靜態成員變量,抽象類中的靜態成員變量的訪問權限能夠是任意的,但接口中定義的變量只能是 public static final 類型的,而且默認即爲 public static final 類型。
(7) 一個類能夠實現多個接口,用逗號隔開,但只能繼承一個抽象類,接口不能夠實現接口,但能夠繼承接口,而且能夠繼承多個接口,用逗號隔開。
26、Static Nested Class(嵌套類)和 Inner Class(內部類)的不一樣?
答:Nested Class 通常是C++的說法,Inner Class 通常是JAVA的說法。
Nested class分爲靜態Static nested class 的和非靜態的 inner class。Static Nested Class 是被聲明爲靜態(static)的內部類,它能夠不依賴於外部類實例被實例化。而一般的內部類須要在外部類實例化後才能實例化。
27、java 中會存在內存泄漏嗎,請簡單描述。
答:會;理論上Java由於有垃圾回收機制(GC)不會存在內存泄露問題(這也是Java被普遍使用於服務器端編程的一個重要緣由);然而在實際開發中,可能會存在無用但可達的對象,這些對象不能被GC回收,所以也會致使內存泄露的發生。例如Hibernate的Session(一級緩存)中的對象屬於持久態,垃圾回收器是不會回收這些對象的,然而這些對象中可能存在無用的垃圾對象,若是不及時關閉(close)或清空(flush)一級緩存就可能致使內存泄露。
28、abstract 的method 是否可同時是static,是否可同時是native,是否可同時是synchronized?
答:都不能。不能是native的,本地方法是由本地代碼(如c代碼)實現的方法,抽象方法是沒有實現的,不能是synchronized的,synchronized和方法具體實現細節相關,抽象方法沒有方法的實現。不能是static的,static方法是不能被覆蓋的,而abstract方法正是要子類去覆蓋它。
29、靜態變量和實例變量的區別?
答:靜態變量也稱爲類變量,歸全類共有,它不依賴於某個對象,可經過類名直接訪問;而實例變量必須依存於某一實例,只能經過對象才能訪問到它。
30、是否能夠從一個static 方法內部發出對非static 方法的調用?
答:不能夠, 靜態方法只能訪問靜態變量,實例方法能夠訪問靜態變量和實例變量。