“面试不败计划”:面试题基础三
1、& 和 &&的區別
首先記住&是位操作,而&&是邏輯運算符.另外需要記住邏輯運算符具有短路特性,而&不具備短路特性.
publicclassTest{static String name;publicstaticvoidmain(String[] args){if(name!=null&userName.equals("")){System.out.println("ok");}else{System.out.println("erro");}} }以上代碼將會拋出空指針異常.
2、一個.java文件內部可以有類?(非內部類)
只能有一個public公共類,但是可以有多個default修飾的類.
3、如何正確的退出多層嵌套循環.
使用標號和break;
通過在外層循環中添加標識符
4、內部類的作用
內部類可以有多個實例,每個實例都有自己的狀態信息,并且與其他外圍對象的信息相互獨立.在單個外圍類當中,可以讓多個內部類以不同的方式實現同一接口,或者繼承同一個類.創建內部類對象的時刻不依賴于外部類對象的創建.內部類并沒有令人疑惑的”is-a”關系,它就像是一個獨立的實體.
5、final,finalize和finally的不同之處
final 是一個修飾符,可以修飾變量、方法和類。如果 final 修飾變量,意味著該變量的值在初始化后不能被改變。finalize 方法是在對象被回收之前調用的方法,給對象自己最后一個復活的機會,但是什么時候調用 finalize 沒有保證。finally 是一個關鍵字,與 try 和 catch 一起用于異常的處理。finally 塊一定會被執行,無論在 try 塊中是否有發生異常。
6、clone()是哪個類的方法?
java.lang.Cloneable 是一個標示性接口,不包含任何方法,clone 方法在 object 類中定義。并且需要知道 clone() 方法是一個本地方法,這意味著它是由 c 或 c++ 或 其他本地語言實現的。
7、深拷貝和淺拷貝的區別是什么?
淺拷貝:被復制對象的所有變量都含有與原來的對象相同的值,而所有的對其他對象的引用仍然指向原來的對象。換言之,淺拷貝僅僅復制所考慮的對象,而不復制它所引用的對象。
深拷貝:被復制對象的所有變量都含有與原來的對象相同的值,而那些引用其他對象的變量將指向被復制過的新對象,而不再是原有的那些被引用的對象。換言之,深拷貝把要復制的對象所引用的對象都復制了一遍。
8、static都有哪些用法?
幾乎所有的人都知道static關鍵字這兩個基本的用法:靜態變量和靜態方法.也就是被static所修飾的變量/方法都屬于類的靜態資源,類實例所共享.
除了靜態變量和靜態方法之外,static也用于靜態塊,多用于初始化操作:
public calss PreCache{static{//執行相關操作} }此外static也多用于修飾內部類,此時稱之為靜態內部類.
最后一種用法就是靜態導包,即import static.import static是在JDK 1.5之后引入的新特性,可以用來指定導入某個類中的靜態資源,并且不需要使用類名.資源名,可以直接使用資源名,比如:
9、final有哪些用法
final也是很多面試喜歡問的地方,能回答下以下三點就不錯了:
1.被final修飾的類不可以被繼承
2.被final修飾的方法不可以被重寫
3.被final修飾的變量不可以被改變.如果修飾引用,那么表示引用不可變,引用指向的內容可變.
4.被final修飾的方法,JVM會嘗試將其內聯,以提高運行效率
5.被final修飾的常量,在編譯階段會存入常量池中.
回答出編譯器對final域要遵守的兩個重排序規則更好:
1.在構造函數內對一個final域的寫入,與隨后把這個被構造對象的引用賦值給一個引用變量,這兩個操作之間不能重排序.
2.初次讀一個包含final域的對象的引用,與隨后初次讀這個final域,這兩個操作之間不能重排序
10、java中int char,long各占多少字節?
| short | 2 | 16 |
| int | 4 | 32 |
| long | 8 | 64 |
| float | 4 | 32 |
| double | 8 | 64 |
| char | 2 | 16 |
11、64位的JVM當中,int的長度是多少?
Java 中,int 類型變量的長度是一個固定值,與平臺無關,都是 32 位。意思就是說,在 32 位 和 64 位 的Java 虛擬機中,int 類型的長度是相同的。
12、int和Integer的區別
Integer是int的包裝類型,在拆箱和裝箱中,二者自動轉換.int是基本類型,直接存數值,而integer是對象,用一個引用指向這個對象
13、int 和Integer誰占用的內存更多?
Integer 對象會占用更多的內存。Integer是一個對象,需要存儲對象的元數據。但是 int 是一個原始類型的數據,所以占用的空間更少。
14、String,StringBuffer和StringBuilder區別
String是字符串常量,final修飾;StringBuffer字符串變量(線程安全);
StringBuilder 字符串變量(線程不安全).
15、String和StringBuffer
String和StringBuffer主要區別是性能:String是不可變對象,每次對String類型進行操作都等同于產生了一個新的String對象,然后指向新的String對象.所以盡量不在對String進行大量的拼接操作,否則會產生很多臨時對象,導致GC開始工作,影響系統性能.
StringBuffer是對對象本身操作,而不是產生新的對象,因此在有大量拼接的情況下,我們建議使用StringBuffer.
但是需要注意現在JVM會對String拼接做一定的優化:
String s=“This is only ”+”simple”+”test”會被虛擬機直接優化成String s=“This is only simple test”,此時就不存在拼接過程.
16、StringBuffer和StringBuilder
StringBuffer是線程安全的可變字符串,其內部實現是可變數組.StringBuilder是jdk 1.5新增的,其功能和StringBuffer類似,但是非線程安全.因此,在沒有多線程問題的前提下,使用StringBuilder會取得更好的性能.
17、什么是編譯器常量?使用它有什么風險?
公共靜態不可變(public static final )變量也就是我們所說的編譯期常量,這里的 public 可選的。實際上這些變量在編譯時會被替換掉,因為編譯器知道這些變量的值,并且知道這些變量在運行時不能改變。這種方式存在的一個問題是你使用了一個內部的或第三方庫中的公有編譯時常量,但是這個值后面被其他人改變了,但是你的客戶端仍然在使用老的值,甚至你已經部署了一個新的jar。為了避免這種情況,當你在更新依賴 JAR 文件時,確保重新編譯你的程序。
18、java當中使用什么類型表示價格比較好?
如果不是特別關心內存和性能的話,使用BigDecimal,否則使用預定義精度的 double 類型。
19、如何將byte轉為String
可以使用 String 接收 byte[] 參數的構造器來進行轉換,需要注意的點是要使用的正確的編碼,否則會使用平臺默認編碼,這個編碼可能跟原來的編碼相同,也可能不同。
20、可以將int強轉為byte類型么?會產生什么問題?
我們可以做強制轉換,但是Java中int是32位的而byte是8 位的,所以,如果強制轉化int類型的高24位將會被丟棄,byte 類型的范圍是從-128到128
總結
以上是生活随笔為你收集整理的“面试不败计划”:面试题基础三的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: “面试不败计划”: java语言基础面试
- 下一篇: “面试不败计划”:垃圾垃圾回收