亚洲精品中文字幕无乱码_久久亚洲精品无码AV大片_最新国产免费Av网址_国产精品3级片

java語言

高級(jí)Java面試題

時(shí)間:2024-11-02 11:20:37 java語言 我要投稿

高級(jí)Java面試題精選

  這是百分網(wǎng)小編為Java開發(fā)人員收集整理的面試中經(jīng)常容易遇到的問題,相信你了解和掌握之后一定會(huì)有所提高。讓我們一起來看看吧。

高級(jí)Java面試題精選

 

  1. 什么是可變參數(shù)?

  2. 斷言的用途?

  3. 什么時(shí)候使用斷言?

  4. 什么是垃圾回收?

  5. 用一個(gè)例子解釋垃圾回收?

  6. 什么時(shí)候運(yùn)行垃圾回收?

  7. 垃圾回收的最佳做法?

  8. 什么是初始化數(shù)據(jù)塊?

  9. 什么是靜態(tài)初始化器?

  10.什么是實(shí)例初始化塊?

  11.什么是正則表達(dá)式?

  12.什么是令牌化?

  13.給出令牌化的例子?

  14.如何使用掃描器類(Scanner Class)令牌化?

  15.如何添加小時(shí)(hour)到一個(gè)日期對(duì)象(Date Objects)?

  16.如何格式化日期對(duì)象?

  17.Java中日歷類(Calendar Class)的用途?

  18.如何在Java中獲取日歷類的實(shí)例?

  19.解釋一些日歷類中的重要方法?

  20.數(shù)字格式化類(Number Format Class)的用途?

  什么是可變參數(shù)?

  可變參數(shù)允許調(diào)用參數(shù)數(shù)量不同的方法。請(qǐng)看下面例子中的求和方法。此方法可以調(diào)用1個(gè)int參數(shù),或2個(gè)int參數(shù),或多個(gè)int參數(shù)。

  //int(type) followed ... (three dot's) is syntax of a variable argument.

  public int sum(int... numbers) {

  //inside the method a variable argument is similar to an array.

  //number can be treated as if it is declared as int[] numbers;

  int sum = 0;

  for (int number: numbers) {

  sum += number;

  }

  return sum;

  }

  public static void main(String[] args) {

  VariableArgumentExamples example = new VariableArgumentExamples();

  //3 Arguments

  System.out.println(example.sum(1, 4, 5));//10

  //4 Arguments

  System.out.println(example.sum(1, 4, 5, 20));//30

  //0 Arguments

  System.out.println(example.sum());//0

  }

  斷言的用途?

  斷言是在Java 1.4中引入的。它能讓你驗(yàn)證假設(shè)。如果斷言失。捶祷豧alse),就會(huì)拋出AssertionError(如果啟用斷言);緮嘌匀缦滤。

  private int computerSimpleInterest(int principal,float interest,int years){

  assert(principal>0);

  return 100;

  }

  什么時(shí)候使用斷言?

  斷言不應(yīng)該用于驗(yàn)證輸入數(shù)據(jù)到一個(gè)public方法或命令行參數(shù)。IllegalArgumentException會(huì)是一個(gè)更好的選擇。在public方法中,只用斷言來檢查它們根本不應(yīng)該發(fā)生的情況。

  什么是垃圾回收?

  垃圾回收是Java中自動(dòng)內(nèi)存管理的另一種叫法。垃圾回收的目的是為程序保持盡可能多的可用堆(heap)。 JVM會(huì)刪除堆上不再需要從堆引用的對(duì)象。

  用一個(gè)例子解釋垃圾回收?

  比方說,下面這個(gè)方法就會(huì)從函數(shù)調(diào)用。

  void method(){

  

  Calendar calendar = new GregorianCalendar(2000,10,30);

  System.out.println(calendar);

  }

  通過函數(shù)第一行代碼中參考變量calendar,在堆上創(chuàng)建了GregorianCalendar類的一個(gè)對(duì)象。

  函數(shù)結(jié)束執(zhí)行后,引用變量calendar不再有效。因此,在方法中沒有創(chuàng)建引用到對(duì)象。

  JVM認(rèn)識(shí)到這一點(diǎn),會(huì)從堆中刪除對(duì)象。這就是所謂的垃圾回收。

  什么時(shí)候運(yùn)行垃圾回收?

  垃圾回收在JVM突發(fā)奇想和心血來潮時(shí)運(yùn)行(沒有那么糟糕)。運(yùn)行垃圾收集的可能情況是:

  堆可用內(nèi)存不足

  CPU空閑

  垃圾回收的最佳做法?

  用編程的方式,我們可以要求(記住這只是一個(gè)請(qǐng)求——不是一個(gè)命令)JVM通過調(diào)用System.gc()方法來運(yùn)行垃圾回收。

  當(dāng)內(nèi)存已滿,且堆上沒有對(duì)象可用于垃圾回收時(shí),JVM可能會(huì)拋出OutOfMemoryException。

  對(duì)象在被垃圾回收從堆上刪除之前,會(huì)運(yùn)行finalize()方法。我們建議不要用finalize()方法寫任何代碼。

  什么是初始化數(shù)據(jù)塊?

  初始化數(shù)據(jù)塊——當(dāng)創(chuàng)建對(duì)象或加載類時(shí)運(yùn)行的代碼。

  有兩種類型的初始化數(shù)據(jù)塊:

  靜態(tài)初始化器:加載類時(shí)運(yùn)行的的代碼

  實(shí)例初始化器:創(chuàng)建新對(duì)象時(shí)運(yùn)行的代碼

  什么是靜態(tài)初始化器?

  請(qǐng)看下面的例子: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 when Static Initializer is run is 0.

  什么是實(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);

  Listmatches = 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è)日期對(duì)象(Date Objects)?

  現(xiàn)在,讓我們?nèi)绾慰纯刺砑有r(shí)到一個(gè)date對(duì)象。所有在date上的日期操作都需要通過添加毫秒到date才能完成。例如,如果我們想增加6個(gè)小時(shí),那么我們需要將6小時(shí)換算成毫秒。6小時(shí)= 6 * 60 * 60 * 1000毫秒。請(qǐng)看以下的例子。

  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);

  如何格式化日期對(duì)象?

  格式化日期需要使用DateFormat類完成。讓我們看幾個(gè)例子。

  //Formatting Dates

  System.out.println(DateFormat.getInstance().format( date));//10/16/12 5:18 AM

  帶有區(qū)域設(shè)置的格式化日期如下所示:

  System.out.println(DateFormat.getDateInstance(

  DateFormat.FULL, new Locale("it", "IT"))

  .format(date));//marted“ 16 ottobre 2012

  System.out.println(DateFormat.getDateInstance(

  DateFormat.FULL, Locale.ITALIAN)

  .format(date));//marted“ 16 ottobre 2012

  //This uses default locale US

  System.out.println(DateFormat.getDateInstance(

  DateFormat.FULL).format(date));//Tuesday, October 16, 2012

  System.out.println(DateFormat.getDateInstance()

  .format(date));//Oct 16, 2012

  System.out.println(DateFormat.getDateInstance(

  DateFormat.SHORT).format(date));//10/16/12

  System.out.println(DateFormat.getDateInstance(

  DateFormat.MEDIUM).format(date));//Oct 16, 2012

  System.out.println(DateFormat.getDateInstance(

  DateFormat.LONG).format(date));//October 16, 2012

  Java中日歷類(Calendar Class)的用途?

  Calendar類在Java中用于處理日期。Calendar類提供了增加和減少天數(shù)、月數(shù)和年數(shù)的簡便方法。它還提供了很多與日期有關(guān)的細(xì)節(jié)(這一年的哪一天?哪一周?等等)

  如何在Java中獲取日歷類(Calendar Class)的實(shí)例?

  Calendar類不能通過使用new Calendar創(chuàng)建。得到Calendar類實(shí)例的最好辦法是在Calendar中使用getInstance() static方法。

  //Calendar calendar = new Calendar(); //COMPILER ERROR

  Calendar calendar = Calendar.getInstance();

  解釋一些日歷類(Calendar Class)中的重要方法?

  在Calendar對(duì)象上設(shè)置日(day),月(month)或年(year)不難。對(duì)Day,Month或Year調(diào)用恰當(dāng)Constant的set方法。下一個(gè)參數(shù)就是值。

  calendar.set(Calendar.DATE, 24);

  calendar.set(Calendar.MONTH, 8);//8 - September

  calendar.set(Calendar.YEAR, 2010);

  calendar get方法

  要獲取一個(gè)特定日期的信息——2010年9月24日。我們可以使用calendar get方法。已被傳遞的參數(shù)表示我們希望從calendar中獲得的值—— 天或月或年或……你可以從calendar獲取的值舉例如下:

  System.out.println(calendar.get(Calendar.YEAR));//2010

  System.out.println(calendar.get(Calendar.MONTH));//8

  System.out.println(calendar.get(Calendar.DATE));//24

  System.out.println(calendar.get(Calendar.WEEK_OF_MONTH));//4

  System.out.println(calendar.get(Calendar.WEEK_OF_YEAR));//39

  System.out.println(calendar.get(Calendar.DAY_OF_YEAR));//267

  System.out.println(calendar.getFirstDayOfWeek());//1 -> Calendar.SUNDAY

  數(shù)字格式化類(Number Format Class)的用途?

  數(shù)字格式用于格式化數(shù)字到不同的區(qū)域和不同格式中。

  使用默認(rèn)語言環(huán)境的數(shù)字格式

  System.out.println(NumberFormat.getInstance().format(321.24f));//321.24

  使用區(qū)域設(shè)置的數(shù)字格式

  使用荷蘭語言環(huán)境格式化數(shù)字:

  System.out.println(NumberFormat.getInstance(new Locale("nl")).format(4032.3f));//4.032,3

  使用德國語言環(huán)境格式化數(shù)字:

  System.out.println(NumberFormat.getInstance(Locale.GERMANY).format(4032.3f));//4.032,3

  使用默認(rèn)語言環(huán)境格式化貨幣

  System.out.println(NumberFormat.getCurrencyInstance().format(40324.31f));//$40,324.31

  使用區(qū)域設(shè)置格式化貨幣

  使用荷蘭語言環(huán)境格式化貨幣:

  System.out.println(NumberFormat.getCurrencyInstance(new Locale("nl")).format(40324.31f));//? 40.324,31

【高級(jí)Java面試題】相關(guān)文章:

高級(jí)Java多線程面試題及回答06-08

20個(gè)高級(jí)Java面試題及答案10-29

Java面試題(精選)06-30

java面試題05-20

Java 問答面試題09-03

經(jīng)典Java基礎(chǔ)面試題08-13

Java原理面試題07-13

Java基礎(chǔ)面試題集錦09-02

Java開發(fā)崗位面試題06-17

Java基礎(chǔ)語法面試題10-28