中文一二三区_九九在线中文字幕无码_国产一二区av_38激情网_欧美一区=区三区_亚洲高清免费观看在线视频

首頁 > 個人簡歷 > 簡歷資料 > 面試試題 > java面試問題

java面試問題

發布時間:2019-04-11

java面試問題

  java常見面試題

  1)transient和volatile是java關鍵字嗎?(瞬聯)

  如果用transient聲明一個實例變量,當對象存儲時,它的值不需要維持。例如:

  class t

  {

  transient int a; //不需要維持

  int b; //需要維持

  }

  這里,如果t類的一個對象寫入一個持久的存儲區域,a的內容不被保存,但b的將被保存。

  volatile修飾符告訴編譯器被volatile修飾的變量可以被程序的其他部分改變。在多線程程序中,有時兩個或更多的線程共享一個相同的實例變量。考慮效率問題,每個線程可以自己保存該共享變量的私有拷貝。實際的變量副本在不同的時候更新,如當進入synchronized方法時。 用strictfp修飾類或方法,可以確保浮點運算(以及所有切斷)正如早期的java版本那樣準確。切斷只影響某些操作的指數。當一個類被strictfp修飾,所有的方法自動被strictfp修飾。

  strictfp的意思是fp-strict,也就是說精確浮點的意思。在java虛擬機進行浮點運算時,如果沒有指定strictfp關鍵字時,java的編譯器以及運行環境在對浮點運算的表達式是采取一種近似于我行我素的行為來完成這些操作,以致于得到的結果往往無法令你滿意。而一旦使用了strictfp來聲明一個類、接口或者方法時,那么所聲明的范圍內java的編譯器以及運行環境會完全依照浮點規范ieee-754來執行。因此如果你想讓你的浮點運算更加精確,而且不會因為不同的硬件平臺所執行的結果不一致的話,那就請用關鍵字strictfp。

  你可以將一個類、接口以及方法聲明為strictfp,但是不允許對接口中的方法以及構造函數聲明strictfp關鍵字,例如下面的代碼:

  strictfp interface a {}

  public strictfp class fpdemo1 {

  strictfp void f() {}

  }

  2. 錯誤的使用方法

  interface a {

  strictfp void f();

  }

  public class fpdemo2 {

  strictfp fpdemo2() {}

  }

  一旦使用了關鍵字strictfp來聲明某個類、接口或者方法時,那么在這個關鍵字所聲明的范圍內所有浮點運算都是精確的,符合ieee-754規范

  的。例如一個類被聲明為strictfp,那么該類中所有的方法都是strictfp的。

  2)抽象類和接口有什么區別?(瞬聯)

  1.abstract class 在 java 語言中表示的是一種繼承關系,一個類只能使用一次繼承關系。但是,一個類卻可以實現多個interface。

  2.在abstract class 中可以有自己的數據成員,也可以有非abstarct的成員方法,而在interface中,只能夠有靜態的不能被修改的數據成員(也就是必須是static final的,不過在 interface中一般不定義數據成員),所有的成員方法都是abstract的。

  3.abstract class和interface所反映出的設計理念不同。其實abstract class表示的是"is-a"關系,interface表示的是"like-a"關系。

  4.實現抽象類和接口的類必須實現其中的所有方法。抽象類中可以有非抽象方法。接口中則不能有實現方法。

  5.接口中定義的變量默認是public static final 型,且必須給其初值,所以實現類中不能重新定義,也不能改變其值。

  6.抽象類中的變量默認是 friendly 型,其值可以在子類中重新定義,也可以重新賦值。

  7.接口中的方法默認都是 public,abstract 類型的。

  3)能說一下java的反射(reflection)機制嗎?(瞬聯)

  開放性和原因連接(causally-connected)是反射系統的兩大基本要素

  4)在java中怎樣實現多線程?(瞬聯)

  extends thread

  implement runnable

  方法一:繼承 thread 類,覆蓋方法 run(),我們在創建的 thread 類的子類中重寫 run() ,加入線程所要執行的代碼即可。下面是一個例子:

  public class mythread extends thread

  {

  int count= 1, number;

  public mythread(int num)

  {

  number = num;

  system.out.println

  ("創建線程 " + number);

  }

  public void run() {

  while(true) {

  system.out.println

  ("線程 " + number + ":計數 " + count);

  if(++count== 6) return;

  }

  }

  public static void main(string args[])

  {

  for(int i = 0;i 〈 5; i++) new mythread(i+1).start();

  }

  }

  這種方法簡單明了,符合大家的習慣,但是,它也有一個很大的缺點,那就是如果我們的類已經從一個類繼承(如小程序必須繼承自 applet 類),則無法再繼承 thread 類,這時如果我們又不想建立一個新的類,應該怎么辦呢?

  我們不妨來探索一種新的方法:我們不創建thread類的子類,而是直接使用它,那么我們只能將我們的方法作為參數傳遞給 thread 類的實例,有點類似回調函數。但是 java 沒有指針,我們只能傳遞一個包含這個方法的類的實例。

  那么如何限制這個類必須包含這一方法呢?當然是使用接口!(雖然抽象類也可滿足,但是需要繼承,而我們之所以要采用這種新方法,不就是為了避免繼承帶來的限制嗎?)

  java 提供了接口 java.lang.runnable 來支持這種方法。

  方法二:實現 runnable 接口

  runnable接口只有一個方法run(),我們聲明自己的類實現runnable接口并提供這一方法,將我們的線程代碼寫入其中,就完成了這一部分的任務。但是runnable接口并沒有任何對線程的支持,我們還必須創建thread類的實例,這一點通過thread類的構造函數 public thread(runnable target);來實現。下面是一個例子:

  public class mythread implements runnable

  {

  int count= 1, number;

  public mythread(int num)

  {

  number = num;

  system.out.println("創建線程 " + number);

  }

  public void run()

  {

  while(true)

  {

  system.out.println

  ("線程 " + number + ":計數 " + count);

  if(++count== 6) return;

  }

  }

  public static void main(string args[])

  {

  for(int i = 0; i 〈 5;i++) new thread(new mythread(i+1)).start();

  }

  }

  嚴格地說,創建thread子類的實例也是可行的,但是必須注意的是,該子類必須沒有覆蓋 thread 類的 run 方法,否則該線程執行的將是子類的 run 方法,而不是我們用以實現runnable 接口的類的 run 方法,對此大家不妨試驗一下。

  使用 runnable 接口來實現多線程使得我們能夠在一個類中包容所有的代碼,有利于封裝,它的缺點在于,我們只能使用一套代碼,若想創建多個線程并使各個線程執行不同的代碼,則仍必須額外創建類,如果這樣的話,在大多數情況下也許還不如直接用多個類分別繼承 thread 來得緊湊。

  華為java面試問題

  question no: 1

  publicclass test1 {

  publicstaticvoid changestr(string str){

  str="welcome";

  }

  publicstaticvoid main(string[] args) {

  string str="1234";

  changestr(str);

  system.out.println(str);

  }

  }

  //輸出結果:1234

  //這里雖然是一個靜態方法,但是里面的變量是一個局部變量,

  //所以這里不因為是靜態方法,就誤認為里面的變量也是靜態變量了

  question no:2

  publicclass test2 {

  staticboolean foo(char c) {

  system.out.print(c);

  returntrue;

  }

  publicstaticvoid main(string[] argv) {

  int i = 0;

  //for(65;88&&(i<2);67)

  for (foo('a'); foo('b') && (i < 2); foo('c')) {

  i++;

  foo('d');

  }

  }

  }

  /*

  what is the result?

  a. abdcbdcb

  b. abcdabcd

  c. compilation fails.

  d. an exception is thrown at runtime.

  //輸出結果是:abdcbdcb

  分析:for循環里面講究的條件要為真,與你的判斷式是什么沒有關系

  就像這里,雖然是打印的字母,但是卻不是false,所以可以執行

  第一次進行循環:

  foo('a')打印字母a,(注:這里不是false條件就默認為true條件)

  foo('b')打印字母b,i=0,比較(i < 2),條件為true,進行循環體,foo('d')打印d

  foo('c')打印字母c

  第二次循環:

  foo('b')打印b,i=1,比較(i < 2)為true,進行循環體,foo('d')打印d

  foo('c')打印字母c

  第三次循環:

  foo('b')打印字母b,i=2,比較(i < 2)為false,退出循環,得結果

  */

主站蜘蛛池模板: 国产精品最新地址 | 日本阿v视频免费观看在线播放 | 成人亚洲欧美成αⅴ人在线观看 | 精品视频在线观看99 | 国产精品久久久久久久久久久久久久久久 | 一区二区三区视频免费观看 | 99热精品在线 | 在线看亚洲十八禁网站 | 女警一级毛片免费视频观看 | 成·人免费午夜视频 | 噜噜噜噜噜久久久久久91黄画 | 亚洲精品无码AV在线观看 | 久久婷婷色香五月综合激激情狠狠做五月 | 国产精品露脸国语对白 | 国内精品视频在线播放 | 热国产热综合 | 亚洲在线精品视频 | 视频在线日韩 | 欧美乱人伦人妻中文字幕 | 亚洲日韩欧美一区二区三区 | 中文无码天天AV天天爽 | 色吧综合 | 久久亚洲在线 | 午夜国产一区二区三区四区 | 天天狠天天透天天伊人 | 亚洲aⅴ在线 | 麻豆免费高清在线观看 | 97人妻中文字幕免费视频 | 天天宗合网 | 国产成人av片| 羞羞视频网站免费 | av观看国产 | 午夜看片在线观看 | 免费看黄色a级片 | 岛国av免费在线 | 成人欧美一区二区三区 | 亚洲精品人成无码中文毛片 | 热99re久久国免费超精品首页 | 国产亚洲精品精华液 | 好吊精品| 免费在线观看国产精品 |