麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學院 > 開發設計 > 正文

java筆試題(4)

2019-11-14 20:53:15
字體:
來源:轉載
供稿:網友
java筆試題(4)
  • abstract的method是否可同時是static,是否可同時是native,是否可同時是synchronized?

abstract的method 不可以是static的,因為抽象的方法是要被子類實現的,而static與子類扯不上關系!

abstract的method 不可以是native的,native方法表示該方法要用另外一種依賴平臺的編程語言實現的,不存在著被子類實現的問題,所以,它也不能是抽象的,不能與abstract混用。例如,FileOutputSteam類要硬件打交道,底層的實現用的是操作系統相關的api實現,例如,在windows用c語言實現的,所以,查看jdk 的源代碼,可以發現FileOutputStream的open方法的定義如下:

PRivate native void open(String name) throws FileNotFoundException;

如果我們要用java調用別人寫的c語言函數,我們是無法直接調用的,我們需要按照java的要求寫一個c語言的函數,又我們的這個c語言函數去調用別人的c語言函數。由于我們的c語言函數是按java的要求來寫的,我們這個c語言函數就可以與java對接上,java那邊的對接方式就是定義出與我們這個c函數相對應的方法,java中對應的方法不需要寫具體的代碼,但需要在前面聲明native。abstract的method 不可以是synchronized的,在我幾年的學習和開發中,從來沒見到過這種情況,并且我覺得synchronized應該是作用在一個具體的方法上才有意義。而且,方法上的synchronized同步所使用的同步鎖對象是this,而抽象方法上無法確定this是什么。

  • super.getClass()方法調用

下面程序的輸出結果是多少?

import java.util.Date;  public  class Test extends Date{      public static void main(String[] args) {          new Test().test();      }           public void test(){          System.out.println(super.getClass().getName());      }  }

在test方法中,直接調用getClass().getName()方法,返回的是Test類名

由于getClass()在Object類中定義成了final,子類不能覆蓋該方法,所以,在test方法中調用getClass().getName()方法,其實就是在調用從父類繼承的getClass()方法,等效于調用super.getClass().getName()方法,所以,super.getClass().getName()方法返回的也應該是Test。如果想得到父類的名稱,應該用如下代碼:getClass().getSuperClass().getName();

  • try {}里有一個return語句,那么緊跟在這個try后的finally {}里的code會不會被執行,什么時候被執行,在return前還是后?

也許你的答案是在return之前,但往更細地說,我的答案是在return中間執行,請看下面程序代碼的運行結果:

public  class Test {  public static void main(String[] args) {        System.out.println(new Test().test());;  }    static int test()  {          int x = 1;      try{          return x;      }      finally{          ++x;      }  }     }

運行結果是1,為什么呢?主函數調用子函數并得到結果的過程,好比主函數準備一個空罐子,當子函數要返回結果時,先把結果放在罐子里,然后再將程序邏輯返回到主函數。所謂返回,就是子函數說,我不運行了,你主函數繼續運行吧,這沒什么結果可言,結果是在說這話之前放進罐子里的。

  • error和exception有什么區別?

error 表示恢復不是不可能但很困難的情況下的一種嚴重問題。 比如說內存溢出。不可能指望程序能處理這樣的情況。也就說當發生error的時候,運行程序會被終止,虛擬機退出。我們沒有任何辦法(try-catch)使得程序重新回到正常軌道上。 比如下面的代碼:

ublic class Outer{      public static void main(String[] args){          try{              int[] i=new int[1000000000];          }catch(Exception e){              System.out.println("aaa");          }      }  }

運行結果:

Exception in thread "main" java.lang.OutOfMemoryError : Java heap space    at hr.test.Outer.main(Outer.java:7)

exception 表示一種設計或實現問題。也就是說,它表示如果程序運行正常,從不會發生的情況。不過是運行時異常(如ArrayIndexOutOfBoundsException)還是需檢查異常(如FileNoFindException),都可以通過try-catch使得程序可以繼續運行下去。

注意,運行時異常和需檢查異常的唯一區別就是:前者無需再方法簽名后聲明異常類型,而后者必須聲明。error和exception都繼承了Throwable,因此都可以拋出。

異常是指java程序運行時(非編譯)所發生的非正常情況或錯誤,與現實生活中的事件很相似,現實生活中的事件可以包含事件發生的時間、地點、人物、情節等信息,可以用一個對象來表示,Java使用面向對象的方式來處理異常,它把程序中發生的每個異常也都分別封裝到一個對象來表示的,該對象中包含有異常的信息。Java對異常進行了分類,不同類型的異常分別用不同的Java類表示,所有異常的根類為java.lang.Throwable,Throwable下面又派生了兩個子類:Error和Exception,Error 表示應用程序本身無法克服和恢復的一種嚴重問題,程序只有死的份了。Exception表示程序還能夠克服和恢復的問題,其中又分為系統異常和普通異常,系統異常是軟件本身缺陷所導致的問題,也就是軟件開發人員考慮不周所導致的問題,軟件使用者無法克服和恢復這種問題,但在這種問題下還可以讓軟件系統繼續運行或者讓軟件死掉,例如,數組腳本越界(ArrayIndexOutOfBoundsException),空指針異常(NullPointerException)、類轉換異常(ClassCastException);普通異常是運行環境的變化或異常所導致的問題,是用戶能夠克服的問題,例如,網絡斷線,硬盤空間不夠,發生這樣的異常后,程序不應該死掉。我是天王蓋地虎的分割線

參考:http://hxraid.VEvb.com/blog/749507


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 欧美一级黄色影院 | 曰韩一级片 | 毛片大全免费 | 久久久久免费精品国产小说色大师 | 久久免费视频8 | 精品国产1区2区3区 av视屏 | 天天夜干| 成人在线观看免费爱爱 | 中文字幕在线观看视频www | 91久久国产综合精品女同国语 | 1区2区3区在线观看 欧美特黄a | 91网视频在线观看 | 午夜精品福利影院 | 懂色粉嫩av久婷啪 | 男女羞羞视频在线观看免费 | 日本欧美一区二区三区视频麻豆 | 免费在线观看国产精品 | 毛片在线视频观看 | 渔夫荒淫艳史 | 一区二区三区日韩在线观看 | 涩涩操 | 成人黄色小视频网站 | 黄www片 | 久久免费视频精品 | 久久久久久久久久久久久九 | 视频一区国产精品 | 精品中文字幕视频 | 毛片免费观看视频 | 欧美一级成人一区二区三区 | 桥本有菜免费av一区二区三区 | 欧美日韩在线视频一区二区 | 久久99精品久久久久久秒播蜜臀 | 亚洲综合无码一区二区 | 羞羞网站在线观看入口免费 | 成人免费福利网站 | 91成人久久| 久久思思爱 | 51国产偷自视频区视频小蝌蚪 | 久久久久久久免费看 | 免费a级毛片大学生免费观看 | 国产网站黄 |