1、一個java源文件是否可以包含多個類,有什麼限制?
可以包含多個類,只能有一個public類,且必須與文件名相同
2、java中如何跳出當前的多重嵌套循環?
兩種方式:
1、外面添加標號(不常用)
ok;
for(int i=0;i<10;i++){
for(int j=0;j<10;j++){
System.out.println();
if(j==5){
break ok;
}
}
}
2、外層條件表達式受到裡層循環代碼的控制
boolean found=false;
for(int i=0;i<10&&!found;i++){
for(int j=0;j<10;j++){
System.out.println();
if(j==5){
found=true;
break ;
}
}
}
3、"=="和equals方法有啥區別?
==用於比較兩個變量的數值是否相等,即內存中的數值是否相等
equals用於比較兩個獨立的對象內容是否相等
4、靜態變量和實例變量的區別?
外觀上:靜態變量比實例變量多一個static的關鍵字
本質上:靜態變量屬於某個類的屬性,實例變量屬於某個實例的屬性
靜態變量可以用對象名或者類名調用,實例變量只能用對象名調用
舉例:
public class variantTest{
public static int staticVar=0;
public int IinstaticVar =0;
public variantTest(){
staticVar++;
instaticVar++;
System.out.println(staticVar+"-----"+instaticVar);
}
}
每創建一個實例staticVar++;IinstaticVar只加一次
5、是否可以從一個static方法內部發出對非static方法的調用?
不可以,static方法創建不需要實例對象,非static方法在實例對象創建後才能被調用
6、Integer和int的區別
Integer是int的封裝類,默認值是null
int是java8種基本數據類型之一,默認值是0
Integer適合作web表單數據類型,還提供了與整數有關的操作
7、作用域public、private、potected、默認之間的區別?
作用域 當前類 同一包 子孫類 其他包
public v v v v
protected v v v x
默認 v v x x
private v x x x
8、overloaded和override的區別?
overloaded是重載,override是重寫
9、構造器Constructor是否可以被override?
不可以,構造器不能被繼承,因此不能override,刻意pverload
10、接口接口是否可以繼承接口?抽象類是否可以可以繼承具體類?抽象類是否可以含有靜態main方法?
都可以,抽象類是為了讓別的類繼承而存在的,接口是為了讓別的接口或者類實現而存在的
11、面向對象的特征有哪些?
封裝、抽象、繼承、多態
12、java中實現多態的機制是什麼?
靠的是父類或者接口定義的引用變量可以指向子類或者具體實現類的實例對象
13、基本數據類型有哪些?
byte、char、int、long、short、float、double、boolean
14、final、finally、finalize的區別?
final聲明屬性、方法、類,表示書香不能變、方法不能被覆蓋、類不能被繼承
finally是異常處理語句結構的一部分
finalize是Object類的一個方法,用於垃圾回收
15、java中異常處理機制的簡單原理和應用
java把每個異常封裝到一個對象來表示,對象包含異常信息
不同類型的異常用不同的類
異常的根類:java.lang.Throwable,派生的子類Error和Exception(系統異常、普通異常),Error表示程序本身無法恢復的異常,Exception表示程序還能夠克服和恢復的問題
16、5個常見的runtime exception
NullPointerException ArrayIndexOutOfBoundException、ClassCastExceptio
17、java如何進行異常處理?
throws 捕獲並向外拋出異常
throw 拋出異常
try...catch 內部捕獲異常並處理
finally 無論是否有異常都會執行
18、sleep()和wait()有什麼區別?
sleep就是正在執行的線程主動讓出cpu,cpu去執行其他線程,sleep時間過後,再來執行這個線程
wait是針對已經進入同步鎖的程序,讓其占時讓出同步鎖,讓其他程序得到同步鎖,當其他程序調用notity時,它執行完畢後返回這個程序
19、啟動一個程序是run()還是start()?
啟動一個線程是start(),run()是該線程說關聯的執行代碼
20、HashMap和Hashtable的區別?
歷史原因:Hashtable是基於陳舊的Dictionary類,HashMap是java1.2引進的Map接口的一個實現
同步性:Hashtable是線程安全的,HashMap是線程不安全的
值:HashMap可以將空值作為表條目的值
21、List和Map的區別?
List存儲數據是有順序的,並且允許重復的
Map存儲數據是無序的,鍵是不能重復的,值可以重復
22、List、Set、Map存取元素時,各種有什麼特點?
List和Set都是單列元素,其父接口是Collection
Set是不允許有重復元素的無序的,因此set的add方法有boolean的返回值
List是有順序的集合
Map是雙列集合
23、說出一些常用的類、包、接口
類:String、Integer、Date、ArrayList、HashMap、BuffteredReader、buffteredWriter、FileReader、FileWriter
包:java.util、java.io、java.lang、java.sql、java.servlet
接口:List、Map、Servlet、HttpServletRequest、HttpServletPesponse
24、描述一下JVM加載class文件的原理機制
JVM對類的裝載是通過ClassLoader和它的子類JavaClassLoader實現的
25、GC是什麼?
GC(Gabage Collection),垃圾回收,自動檢測對象是否超過作用域從而達到垃圾回收的目的
26、heap和stack的區別?
棧是程序運行時,調用方法臨時創建的內存空間,方法使用完畢,空間釋放
堆是創建實例對象所創建的內存空間,不隨著方法的使用結束而釋放內存