java无参试题_JavaEE基础面试题0
2019/7/30
1.java 和 C++ 的區別?
都是面向對象的語言,都支持封裝、繼承和多態
Java 不提供指針來直接訪問內存,程序內存更加安全
Java 的類是單繼承的,C++ 支持多重繼承;雖然 Java 的類不可以多繼承,但是接口可以多繼承
Java 有自動內存管理機制,不需要程序員手動釋放無用內存
2.java 程序的主類--------------》主類是 Java 程序執行的入口點。
應用程序中的主類:
這個主類是指包含 main()方法的類,主類不一定要求是 public類
小程序中的主類:
這個主類是一個繼承自系統類 JApplet 或 Applet 的子類,小程序的主類要求必須是 public 類
總結:簡單說應用程序是從主線程啟動(也就是 main() 方法)。applet 小程序沒有main 方法,主要是嵌在瀏覽器頁面上運行(調用 init()線程或者 run()來啟動)
3.繼承的理解
繼承是使用已存在的類的定義作為基礎建立新類的技術,新類的定義可以增加新的數據或新的功能,也可以用父類的功能,但不能選擇性地繼承父類。
通過使用繼承我們能夠非常方便地復用以前的代碼。
子類擁有父類非 private 的屬性和方法
子類可以擁有自己屬性和方法,即子類可以對父類進行擴展。
子類可以用自己的方式實現父類的方法。------override
4.多態的理解
必須在由程序運行期間才能決定。
在 Java 中有兩種形式可以實現多態:繼承(多個子類對同一方法的重寫)和接口(實現接口并覆蓋接口中同一方法)。
5.封裝的理解
封裝把一個對象的屬性私有化,同時提供一些可以被外界訪問的屬性的方法,
6.無參構造的理解
Java 程序在執行子類的構造方法之前,如果沒有用 super() 來調用父類特定的構造方法,則會調用父類中“沒有參數的構造方法
如果父類中只定義了有參數的構造方法,而在子類的構造方法中又沒有用 super() 來調用父類中特定的構造方法,則編譯時將發生錯誤
在調用子類構造方法之前會先調用父類的無參構造方法-------》幫助子類做初始化工作!!!
7.靜態方法和實例方法有什么不同
在外部調用靜態方法時,可以使用"類名.方法名"的方式,也可以使用"對象名.方法名"的方式。而實例方法只有后面這種方式。也就是說,調用靜態方法可以無需創建對象。
靜態方法在訪問本類的成員時,只允許訪問靜態成員(即靜態成員變量和靜態方法),而不允許訪問實例成員變量和實例方法;實例方法則無此限制.
8.== 和 equals()
== : 它的作用是判斷兩個對象的地址是不是相等。即,判斷兩個對象是不是同一個對象。(基本數據類型==比較的是值,引用數據類型==比較的是內存地址)
equals() : 它的作用也是判斷兩個對象是否相等。但它一般有兩種使用情況:
情況 1:類沒有覆蓋 equals() 方法。則通過 equals() 比較該類的兩個對象時,等價于通過“==”比較這兩個對象。
情況 2:類覆蓋了 equals() 方法。一般,我們都覆蓋 equals() 方法來兩個對象的內容相等;若它們的內容相等,則返回 true (即,認為這兩個對象相等)。
9.hashCode() 和 equals()
hashCode() 的作用是獲取哈希碼,也稱為散列碼;它實際上是返回一個 int 整數。這個哈希碼的作用是確定該對象在哈希表中的索引位置
hashCode() 定義在 JDK 的 Object.java 中,這就意味著 Java 中的任何類都包含有 hashCode() 函數。
兩者的相關規定:
1. 如果兩個對象相等,則 hashcode 一定也是相同的
2. 兩個對象相等,對兩個對象分別調用 equals 方法都返回 true
3. 兩個對象有相同的 hashcode 值,它們也不一定是相等的(存儲結構:哈希值一樣的以鏈表串起來,超過負載因子后轉為紅黑樹結構)
4. 因此,equals 方法被覆蓋過,則 hashCode 方法也必須被覆蓋
5. hashCode() 的默認行為是對堆上的對象產生獨特值。如果沒有重寫hashCode(),則該 class 的兩個對象無論如何都不會相等(即使這兩個對象指向相同的數據)
10.為什么JAVA 中只有值傳遞?
引用傳遞(pass by reference)是指在調用函數時將實際參數的地址直接傳遞到函數中,那么在函數中對參數所進行的修改,將影響到實際參數。
值傳遞(pass by value)是指在調用函數時將實際參數復制一份傳遞到函數中,這樣在函數中如果對參數進行修改,將不會影響到實際參數。
所以,值傳遞和引用傳遞的區別并不是傳遞的內容。而是實參到底有沒有被復制一份給形參。
所以說,Java中其實還是值傳遞的,只不過對于對象參數,值的內容是對象的引用。(注意參照物是誰)
總結:
無論是值傳遞還是引用傳遞,其實都是一種求值策略(Evaluation strategy)。在求值策略中,還有一種叫做按共享傳遞(call by sharing)。
其實Java中的參數傳遞嚴格意義上說應該是按共享傳遞。
按共享傳遞,是指在調用函數時,傳遞給函數的是實參的地址的拷貝(如果實參在棧中,則直接拷貝該值)。在函數內部對參數進行操作時,需要先拷貝的地址尋找到具體的值, 再進行操作。如果該值在棧中,那么因為是直接拷貝的值,所以函數內部對參數進行操作不會對外部變量產生影響。如果原來拷貝的是原值在堆中的地址,那么需要先根 據該地址找到堆中對應的位置,再進行操作。因為傳遞的是地址的拷貝所以函數內對值的操作對外部變量是可見的。
簡單點說,Java中的傳遞,是值傳遞,而這個值,實際上是對象的引用。
而按共享傳遞其實只是按值傳遞的一個特例罷了。所以我們可以說Java的傳遞是按共享傳遞,或者說Java中的傳遞是值傳遞。
11.以下4種特殊情況,finally塊不會被執行!!
1. 在 finally 語句塊中發生了異常。
2. 在前面的代碼中用了 System.exit()退出程序。
3. 程序所在的線程死亡。
4. 關閉 CPU。
12.Java 序列化中如果有些字段不想進行序列化怎么辦
對于不想進行序列化的變量,使用 transient 關鍵字修飾。
transient 關鍵字的作用是:阻止實例中那些用此關鍵字修飾的的變量序列化;當對象被反序列化時,被 transient 修飾的變量值不會被持久化和恢復。
transient 只能修飾變量,不能修飾類和方法
13.獲取用鍵盤輸入常用的的兩種方法
方法 1:通過 Scanner
Scanner input = new Scanner(System.in);
String s = input.nextLine();
input.close();
方法 2:通過 BufferedReader
BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
String s = input.readLine();
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的java无参试题_JavaEE基础面试题0的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java模拟国际象棋游戏_java国际象
- 下一篇: java mission 篡改后 网速很