java mldn_MLDN java面试题
1、? Java中的異常處理機制的簡單原理和應用。
每當產生異常之后,如果沒有程序進行相應的處理,則程序將出現(xiàn)中斷的現(xiàn)象,那么,此時實際上一旦產生一個異常之后,JVM會跑出一個異常類的實例化對象,如果此時使用了try語句進行不活的話,則可以進行異常處理,如果沒有的話,則交給JVM進行處理,當tru語句捕獲到了異常之后,會與catch中的異常類型進行匹配,如果匹配成功,則使用catch語句進行處理。
應用:簡單的引用,就是在所有有throws關鍵字的地方加入try…catch
如果按照一個標準做的話,try、catch、finally、throw、throws關鍵字應該一起使用。
2、? 垃圾回收的優(yōu)點和原理。并考慮2種回收機制。
將無用的對象空間進行釋放,兩種回收:自動回收,手工調用System.gc()方法,實際上調用System.gc()就相當于調用了Runtime.getRuntime().gc()方法。
3、? Error與Exception有什么區(qū)別。
Error表示有JVM進行處理的,是JVM出錯。
Exception表示可以由程序進行處理的,使用try..catch 進行處理。
4、? 談談final,finally,finalize的區(qū)別。
Final是定義常量、方法、類的,生命的方法不能被覆寫、生命的類不能被繼承。
Finally:是一場的統(tǒng)一出口。
Finalize:是垃圾回收前的收尾工作,是Object類中定義的。
5、? Anonymous Inner Class (匿名內部類)是否可以extends(繼承)其他類,是否可以implements(實現(xiàn))interface(接口)?
允許繼承或實現(xiàn),因為匿名內部類就是在抽象類和接口的基礎之上發(fā)展起來的。
6、? Static Nested Class 和Inner Class的不同。
使用static聲明的內部類就是外部類,可以通過 外部類.內部類 直接訪問。
普通的內部類是不能夠直接被外部所訪問的,需要通過外部類實例再找到內部類實例。
7、? HashMap和Hashtable的區(qū)別。
HashMap
|-JDK1.2之后推出,是新的類。
|-采用異步處理方式,性能較高,但是屬于非線程安全。
|-允許設置null。
Hashtable
|-JDk1.0時推出,是舊的類。
|-采用同步處理方式,性能較高,但是屬于線程安全。
|-不允許設置null,否則將出現(xiàn)NullPointerException。
8、? 什么時候用assert?
JDK1.4之后增加的新關鍵字——assert,表示斷言,既程序執(zhí)行到某個地方之后值肯定是預計好的。
一般開發(fā)中很少使用assert。
要想使用斷言,則必須使用-ea參數。
9、? GC是什么?為什么要有GC?
GC:垃圾收集
使用GC可以進行垃圾空間的釋放操作。
10、sleep()和wait()有什么區(qū)別?
sleep()是Thred類中定義的方法,表示線程的休眠,會自動喚醒。
wait()是Object中定義的方法,需要手工調用notify()或notifyAll()方法。
11、String s = new String(“xyz”); 創(chuàng)建了幾個String Object?
產生了兩個實例化對象,一個是匿名對象“xyz”,另外一個是通過關鍵字new實例化的。
12、Java有沒有goto?
goto屬于保留的關鍵字,java中存在goto,知識無法使用。
13、數組有沒有l(wèi)ength()這個方法?String有沒有l(wèi)ength()這個方法?
數組中存在length的屬性,String中存在length()方法。
14、Overload和Override的區(qū)別。Overloaded的方法是否可以改變返回值的類型?
·重載:overload
在一個定義的若干方法。
所有的方法名稱相同,但是參數的類型或個數不同
·腹瀉:override
在繼承的關系中。
在類定義了與父類同名的方法,參數類型或個數最好完全一樣,注意訪問權限不能更加嚴格。
·重載的時候不是依靠返回值類型區(qū)分的,而是靠參數。
15、Set里的元素是不能重復的,那么用什么方法來區(qū)分重復與否呢?使用==還是equals()?他們有何區(qū)別?
依靠hashCode()和equals()兩個方法完成,==屬于地址值比較,兒equals()屬于內容比較。使用的是equals()方法。
16、列舉出常見的runtime exception。
NumberFormatException、ArrayOutIndexofBoundException、NullPointerException、ClassCastException
17、abstract class和interface有什么區(qū)別?
·抽象類
由抽象方法和常量、變量、全局常量、構造方法、普通方法組成。
使用abstract聲明。
子類要通過extends繼承抽象類,子類如果不是抽象類,則必須覆寫抽象類中的全部抽象方法。
存在單繼承局限,一個子類只能繼承一個抽象類。
抽象類可以實現(xiàn)若干個接口。
·接口
全部由抽象方法和全局變量組成。
使用interface聲明
子類通過implements實現(xiàn)接口,子類如果不是抽象類,則必須覆寫抽象類中的全部抽象方法。
不存在單繼承局限,一個子類可以實現(xiàn)多個接口。
接口不能繼承一個抽象類,但是允許繼承多個接口。
18、啟動一個線程是用run()還是start()?
使用start()方法,因為要通知JVM進行CPU資源的分類。
19、 try{}里有一個return語句,那么緊跟在這個try{}后的finally{}里的code是不會被執(zhí)行,什么時候被執(zhí)行,在return前還是后?
會執(zhí)行,在return之前執(zhí)行,只要是finally{}的代碼永遠會被執(zhí)行。
20、編程題:寫一個Singleton出來(單例設計模式)。
·核心就是構造方法私有化。
寫上包名
class單詞的首字母要大寫
package org.pzx.demo;
public class Singleton{
private static final Singletonsin = new Singleton(); ——在內部產生singleton()對象
private Singleto(){?????? } ?????????????????????????????????????? ??——將構造方法私有化
public static Singleton getInstance(){??????????????? ? ——通過靜態(tài)方法renturn sin
return sin;
}
}
21、編一段代碼,實現(xiàn)在控制臺輸入一組數字后,排序后在控制臺輸出。
·假設數字中間使用“”進行分割,既然要排序,則可以使用集合保存,使用TreeSet保存。
package org.pzx.demo;
import java.io.BufferedReader;
import java.io.InputStremReader;
import java.util.Iterator;
import java.util.Set;
import java.util.TreeSet;
public class Demo{
public static void main(String args[]) throws Exception{
BufferedReader buf = new BufferedReader(new InputStreamReader(System.in));
System.out.print("請輸入一組數據,中間使用空格分隔:");
String str = buf.readLine();
Set set = new TreeSet();
String s[] = str.split(" ");//進行拆分
for (String x : s){
set.add(Integer.parseInt(x));//加入數據
}
System.out.println("排序之后的結果是:");
Iterator iter = set.iterator();
while(iter.hasNext()){
System.out.print(iter.next() + "、");
}
}
}
以上的操作中,因為所有的數據都已經架設是正確的數字,但是實際中可能是字符串。
·第一種方法:允許有字符串,但是將所有的字符串忽略。
·第二種方法:不允許有字符串,如果出現(xiàn)了字符串,則程序不再向下繼續(xù)執(zhí)行。
為程序改善功能:第二種方法
package org.pzx.demo;
import java.io.BufferedReader;
import java.io.InputStremReader;
import java.util.Iterator;
import java.util.Set;
import java.util.TreeSet;
public class Demo{
public static void main(String args[]) throws Exception{
BufferedReader buf = new BufferedReader(new InputStreamReader(System.in));
System.out.print("請輸入一組數據,中間使用空格分隔:");
String str = buf.readLine();
Set set = new TreeSet();
String s[] = str.split(" ");//進行拆分
for (String x : s){
if(x.matches("\\d+")){
set.add(Integer.parseInt(x));//加入數據
}
}
System.out.println("排序之后的結果是:");
Iterator iter = set.iterator();
while(iter.hasNext()){
System.out.print(iter.next() + "、");
}
}
}
為程序改善功能:第一種方法
package org.pzx.demo;
import java.io.BufferedReader;
import java.io.InputStremReader;
import java.util.Iterator;
import java.util.Set;
import java.util.TreeSet;
public class Demo{
public static void main(String args[]) throws Exception{
BufferedReader buf = new BufferedReader(new InputStreamReader(System.in));
System.out.print("請輸入一組數據,中間使用空格分隔:");
String str = buf.readLine();
Set set = new TreeSet();
String s[] = str.replaceAll("\\D+", "").trim()split(" +");//進行拆分
for (String x : s){
set.add(Integer.parseInt(x));//加入數據
}
System.out.println("排序之后的結果是:");
Iterator iter = set.iterator();
while(iter.hasNext()){
System.out.print(iter.next() + "、");
}
}
}
22、列出某文件夾下的所有文件。
·遞歸調用
package org.pzx.demo;
import java.io.Files;
public class ListFiles{
public static void main(Strign args[]){
File file = new File("D:"+File.separator+"doc");
fun(file);
}
public static void fun(File file){
if(file.isDirectory()){
File f[]=file.listFiles();
if(f != null){
for (int x = 0;x < f.length;x++){
fun(f[x]);
}
}
}else{
System.out.println(file);
}
}
}
23、char型變量中能不能存貯一個中文漢字?為什么?
·可以存放,因為使用的是unicode編碼。
24、多線程有幾種實現(xiàn)方法,都是什么?同步有幾種實現(xiàn)方法,都是什么?
·兩種實現(xiàn)方法,繼承Thread類,實現(xiàn)Runnable接口
|-Thread類是Runnable接口的子類。
|-使用Runnable接口可以實現(xiàn)資源共享的目的
|-所有的線程操作都必須通過Thread類的Start()方法啟動
·兩種實現(xiàn)同步的方法:
|-同步代碼塊:Synchronized(this){}
|-同步方法
25、float型 float f=3.4是否正確?
·不正確,默認情況下3.4是double類型的數據。
26、String與StringBuffer區(qū)別?
·String不可修改,StringBuffer允許修改。
27、Class.forName的作用?為什么要用?
Class.forName屬于向容器之中加載驅動程序。
28、int和Integer區(qū)別?
int是基本數據類型,Integer是包裝類
在JDK1.5之后,可以實現(xiàn)自動裝箱及拆箱的操作。
29、用最有效的方法算出2乘以8等于幾?
使用移位操作:2<<3
30、請說出類集框架的完整結構。
·類集框架最大的接口:Collection、Map、Iterator、Enumeration
·Collection:存放單值
|-List:允許有重復內容
|-ArrayList:一步處理,新的操作類,非線程安全
|-Vector:同步處理,舊的操作類,線程安全,支持Enumeration輸出
|-Set:不允許有重復內容,靠hashCode()和equals()進行重復的驗證
·Map:存放一對值
|-HashMap:新的類,異步處理,非線程安全,允許有null
|-Hashtable:舊的類,同步處理,非線程安全,不允許有null
|-Properties:屬性操作類
|-TreeMap:有序排列,按key排序,根據Comparable制定排序規(guī)則
·Iterator:
|-迭代輸出,依靠Collection接口中的Iterator方法輸出,是新的輸出標準
·Enumeration:舊的輸出操作。
31、是否可以繼承String類?
·不允許,因為使用了final聲明。
總結
以上是生活随笔為你收集整理的java mldn_MLDN java面试题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 工作317:uni-修改其他页面整体样式
- 下一篇: adb自动退出