- 相關(guān)推薦
高級(jí)Java面試題集合(2)
垃圾回收的最佳做法?
用編程的方式,我們可以要求(記住這只是一個(gè)請求——不是一個(gè)命令)JVM通過調(diào)用System.gc()方法來運(yùn)行垃圾回收。
當(dāng)內(nèi)存已滿,且堆上沒有對象可用于垃圾回收時(shí),JVM可能會(huì)拋出OutOfMemoryException。
對象在被垃圾回收從堆上刪除之前,會(huì)運(yùn)行finalize()方法。我們建議不要用finalize()方法寫任何代碼。
什么是初始化數(shù)據(jù)塊?
初始化數(shù)據(jù)塊——當(dāng)創(chuàng)建對象或加載類時(shí)運(yùn)行的代碼。
有兩種類型的初始化數(shù)據(jù)塊:
靜態(tài)初始化器:加載類時(shí)運(yùn)行的的代碼
實(shí)例初始化器:創(chuàng)建新對象時(shí)運(yùn)行的代碼
什么是靜態(tài)初始化器?
請看下面的例子:static{和}之間的代碼被稱為靜態(tài)初始化器。它只有在第一次加載類時(shí)運(yùn)行。只有靜態(tài)變量才可以在靜態(tài)初始化器中進(jìn)行訪問。雖然創(chuàng)建了三個(gè)實(shí)例,但靜態(tài)初始化器只運(yùn)行一次。
public class InitializerExamples {
static int count;
int i;
static{
//This is a static initializers. Run only when Class is first loaded.
//Only static variables can be accessed
System.out.println("Static Initializer");
//i = 6;//COMPILER ERROR
System.out.println("Count when Static Initializer is run is " + count);
}
public static void main(String[] args) {
InitializerExamples example = new InitializerExamples();
InitializerExamples example2 = new InitializerExamples();
InitializerExamples example3 = new InitializerExamples();
}
}
示例輸出
Static Initializer
Count whenStaticInitializer is run is0.
什么是實(shí)例初始化塊?
讓我們來看一個(gè)例子:每次創(chuàng)建類的實(shí)例時(shí),實(shí)例初始化器中的代碼都會(huì)運(yùn)行。
public class InitializerExamples {
static int count;
int i;
{
//This is an instance initializers. Run every time an object is created.
//static and instance variables can be accessed
System.out.println("Instance Initializer");
i = 6;
count = count + 1;
System.out.println("Count when Instance Initializer is run is " + count);
}
public static void main(String[] args) {
InitializerExamples example = new InitializerExamples();
InitializerExamples example1 = new InitializerExamples();
InitializerExamples example2 = new InitializerExamples();
}
}
示例輸出
Instance Initializer
Count when Instance Initializer is run is 1
Instance Initializer
Count when Instance Initializer is run is 2
Instance Initializer
Count when Instance Initializer is run is 3
什么是正則表達(dá)式?
正則表達(dá)式能讓解析、掃描和分割字符串變得非常容易。Java中常用的正則表達(dá)式——Patter,Matcher和Scanner類。
什么是令牌化?
令牌化是指在分隔符的基礎(chǔ)上將一個(gè)字符串分割為若干個(gè)子字符串。例如,分隔符;分割字符串a(chǎn)c;bd;def;e為四個(gè)子字符串a(chǎn)c,bd,def和e。
分隔符自身也可以是一個(gè)常見正則表達(dá)式。
String.split(regex)函數(shù)將regex作為參數(shù)。
給出令牌化的例子?
private static void tokenize(String string,String regex) {
String[] tokens = string.split(regex);
System.out.println(Arrays.toString(tokens));
}
tokenize("ac;bd;def;e",";");//[ac, bd, def, e]
如何使用掃描器類(Scanner Class)令牌化?
private static void tokenizeUsingScanner(String string,String regex) {
Scanner scanner = new Scanner(string);
scanner.useDelimiter(regex);
List matches = new ArrayList();
while(scanner.hasNext()){
matches.add(scanner.next());
}
System.out.println(matches);
}
tokenizeUsingScanner("ac;bd;def;e",";");//[ac, bd, def, e]
如何添加小時(shí)(hour)到一個(gè)日期對象(Date Objects)?
現(xiàn)在,讓我們?nèi)绾慰纯刺砑有r(shí)到一個(gè)date對象。所有在date上的日期操作都需要通過添加毫秒到date才能完成。例如,如果我們想增加6個(gè)小時(shí),那么我們需要將6小時(shí)換算成毫秒。6小時(shí)= 6 * 60 * 60 * 1000毫秒。請看以下的例子。
Date date = new Date();
//Increase time by 6 hrs
date.setTime(date.getTime() + 6 * 60 * 60 * 1000);
System.out.println(date);
//Decrease time by 6 hrs
date = new Date();
date.setTime(date.getTime() - 6 * 60 * 60 * 1000);
System.out.println(date);
如何格式化日期對象?
格式化日期需要使用DateFormat類完成。讓我們看幾個(gè)例子。
//Formatting Dates
System.out.println(DateFormat.getInstance().format(
date));//10/16/12 5:18 AM
帶有區(qū)域設(shè)置的格式化日期如下所示:
【高級(jí)Java面試題(2)】相關(guān)文章:
java面試題及答案10-03
10個(gè)經(jīng)典的Java面試題集合09-20
德國公司經(jīng)典面試題(2)07-10
計(jì)算機(jī)二級(jí)JAVA沖刺試題及答案(2)08-13
評(píng)高級(jí)職稱述職報(bào)告范文(2)05-15
小學(xué)高級(jí)教師述職報(bào)告(2)06-14
計(jì)算機(jī)二級(jí)Java備考沖刺試題及答案(2)09-24