撩課-Java每天10道面試題第3天

来源:https://www.cnblogs.com/gxq666/archive/2018/11/12/9944613.html
-Advertisement-
Play Games

21.final, finally, finalize的區別 22、finally是在異常處理時 23. Java中的String,StringBuilder,StringBuffer三者的區別? 24.GC是什麼? 為什麼要有GC? 25.構造器如何工作? 26.構造器Constructor是否可 ...


21.final, finally, finalize的區別

1、final修飾符(關鍵字)。
被final修飾的類,
就意味著不能再派生出新的子類,
不能作為父類而被子類繼承。
因此一個類不能既被abstract聲明,
又被final聲明。將變數或方法聲明為final,
可以保證他們在使用的過程中不被修改。
被聲明為final的變數必須在聲明時給出變數的初始值,
而在以後的引用中只能讀取。
被final聲明的方法也同樣只能使用,
即不能方法重寫。

 

22、finally是在異常處理時

提供finally塊來執行任何清除操作。
不管有沒有異常被拋出、捕獲,finally塊都會被執行。
try塊中的內容是在無異常時執行到結束。
catch塊中的內容,
是在try塊內容發生catch所聲明的異常時,
跳轉到catch塊中執行。
finally塊則是無論異常是否發生,
都會執行finally塊的內容,
所以在代碼邏輯中有需要
無論發生什麼都必須執行的代碼,
就可以放在finally塊中。

3、finalize是方法名。
java技術允許使用finalize()方法
在垃圾收集器將對象從記憶體中
清除出去之前做必要的清理工作。
這個方法是由垃圾收集器
在確定這個對象沒有被引用時對這個對象調用的。
它是在object類中定義的,
因此所有的類都繼承了它。
子類覆蓋finalize()方法以整理系統資源或者被執行其他清理工作。
finalize()方法是在垃圾收集器
刪除對象之前對這個對象調用的。 

###2.Overload和Override的區別。
首先重載和重寫是應用於兩個不同場景下麵的兩種不同的手段:
兩者各自的特征:
重載(Overload):首先是位於一個類之中或者其子類中,
具有相同的方法名,
但是方法的參數不同,
返回值類型可以相同也可以不同。
(1):方法名必須相同
(2):方法的參數列表一定不一樣。
(3):訪問修飾符和返回值類型可以相同也可以不同。
其實簡單而言:重載就是對於不同的情況寫不同的方法。
 比如,同一個類中,
寫不同的構造函數用於初始化不同的參數。

重寫(override):一般都是表示子類和父類之間的關係,
其主要的特征是:
方法名相同,
參數相同,
但是具體的實現不同。

重寫的特征:
(1):方法名必須相同,返回值類型必須相同
(2):參數列表必須相同
(3):訪問許可權不能比父類中被重寫的方法的訪問許可權更低。
例如:如果父類的一個方法被聲明為public,
那麼在子類中重寫該方法就不能聲明為protected。
(4):子類和父類在同一個包中,
那麼子類可以重寫父類所有方法,
除了聲明為private和final的方法。
(5):構造方法不能被重寫,
簡單而言:就是具體的實現類對於父類的該方法實現不滿意,
需要自己在寫一個滿足於自己要求的方法。

 

23. Java中的String,StringBuilder,StringBuffer三者的區別?

首先說運行速度,或者說是執行速度,
在這方面運行速度快慢為:StringBuilder > StringBuffer > String
String最慢的原因:
String為字元串常量,
而StringBuilder和StringBuffer均為字元串變數,
即String對象一旦創建之後該對象是不可更改的,
但後兩者的對象是變數,是可以更改的。
而StringBuilder和StringBuffer的對象是變數,
對變數進行操作就是直接對該對象進行更改,
而不進行創建和回收的操作,
所以速度要比String快很多。

String               ---->     字元串常量
StringBuffer      ---->     字元串變數(線程安全的)
StringBuilder    ---->     字元串變數(非線程安全的)

String:適用於少量的字元串操作的情況
StringBuilder:適用於單線程下在字元緩衝區進行大量操作的情況
StringBuffer:適用多線程下在字元緩衝區進行大量操作的情況

 

24.GC是什麼? 為什麼要有GC?

GC是垃圾收集的意思,
記憶體處理是編程人員容易出現問題的地方,
忘記或者錯誤的記憶體回收
會導致程式或系統的不穩定甚至崩潰,
Java提供的GC功能
可以自動監測對象是否超過作用域
從而達到自動回收記憶體的目的,

Java語言沒有提供釋放已分配記憶體的顯示操作方法。J
ava程式員不用擔心記憶體管理,
因為垃圾收集器會自動進行管理。
要請求垃圾收集,
可以調用下麵的方法之一:
System.gc()或Runtime.getRuntime().gc(),
但JVM可以屏蔽掉顯示的垃圾回收調用。 

垃圾回收可以有效的防止記憶體泄露,
有效的使用可以使用的記憶體。
垃圾回收器通常是作為一個單獨的低優先順序的線程運行,
不可預知的情況下對記憶體堆中
已經死亡的或者長時間沒有使用的對象進行清除和回收,
程式員不能實時的調用垃圾回收器
對某個對象或所有對象進行垃圾回收。

Java有了GC,
就不需要程式員去人工釋放記憶體空間。
當Java虛擬機發覺記憶體資源緊張的時候,
就會自動地去清理無用變數所占用的記憶體空間。
當然,如果需要,
程式員可以在Java程式中顯式地使用System.gc()
來強制進行一次立即的記憶體清理。

 

25.構造器如何工作?

 Java在構造實例時的順序是這樣的:
1、分配對象空間,並將對象中成員初始化為0或者空
,java不允許用戶操縱一個不定值的對象。   
2、執行屬性值的顯式初始化   
3、執行構造器   
4 、將變數關聯到堆中的對象上

而執行構造器的步驟有可以分為以下幾步:

1、Bind構造器的參數
2、如果顯式的調用了this,那就遞歸調用this構造器然後跳到步驟5
3、遞歸調用顯式或者隱式的父類構造器,除了Object以外,因為它沒有父類
4、執行顯式的實例變數初始化(也就是上邊的流程中的第二步,調用返回以後執行,
   這個步驟相當於在父構造器執行後隱含執行的,看樣子像一個特殊處理)

 

26.構造器Constructor是否可被override?

構造器Constructor不能被繼承,
因此不能重寫Overriding,
但可以被重載Overloading 
1). 構造器不能是native,final,static,synchronized 的,
可以是public,private,或什麼都沒有。 
2). 構造器函數里可以寫return呢,但後面什麼都不許有(包括null) 
3). 構造器不能返回值. 
但如果有個"構造器"返值了,
它就不是構造器嘍,只是個普通方法 
4). super();this();這兩個方法只能在構造方法里調用. 
5). 成員變數聲明時候賦值,比構造函數還早.

 

27.寫一個Singleton出來。

Singleton模式主要作用是保證在Java應用程式中,
一個類Class只有一個實例存在。 
一般Singleton模式通常有幾種種形式: 
第一種形式: 定義一個類,
它的構造函數為private的,
它有一個static的private的該類變數,
在類初始化時實例話,
通過一個public的getInstance方法獲取對它的引用,
繼而調用其中的方法。 

public class Singleton { 
  private Singleton(){} 
  //在自己內部定義自己一個實例,是不是很奇怪? 
  //註意這是private 只供內部調用 
  private static Singleton instance = new Singleton(); 
  //這裡提供了一個供外部訪問本class的靜態方法,可以直接訪問   
  public static Singleton getInstance() { 
    return instance;    
   } 
} 

第二種形式: 
public class Singleton { 
  private static Singleton instance = null; 
  public static synchronized Singleton getInstance() { 
  //這個方法比上面有所改進,不用每次都進行生成對象,只是第一次      
  //使用時生成實例,提高了效率! 
  if (instance==null) 
    instance=new Singleton(); 
return instance;   } 
} 

其他形式: 
定義一個類,
它的構造函數為private的,
所有方法為static的。 
一般認為第一種形式要更加安全些

 

28.error和exception有什麼區別?

Error類和Exception類都繼承自Throwable類。
二者的不同之處:
Exception:
1.可以是可被控制(checked) 或不可控制的(unchecked)。
2.表示一個由程式員導致的錯誤。
3.應該在應用程式級被處理。

Error:
1.總是不可控制的(unchecked)。
2.經常用來用於表示系統錯誤或低層資源的錯誤。
3.如何可能的話,應該在系統級被捕捉。

error 表示恢復不是不可能但很困難的情況下的一種嚴重問題。
比如說記憶體溢出。
不可能指望程式能處理這樣的情況。 

exception 表示一種設計或實現問題。
也就是說,
它表示如果程式運行正常,
從不會發生的情況。 

 

29.HashMap和Hashtable的區別?

hashmap:
1.線程不安全
2.允許有null的鍵和值
3.效率高一點、
4.方法不是Synchronize的要提供外同步
5.有containsvalue和containsKey方法
6.HashMap 是Java1.2 引進的Map interface 的一個實現
7.HashMap是Hashtable的輕量級實現

hashtable:
1.線程安全
2.不允許有null的鍵和值
3.效率稍低、
4.方法是是Synchronize的
5.有contains方法方法
6.Hashtable 繼承於Dictionary 類
7.Hashtable 比HashMap 要舊

 

30.==和equals()區別?

對於==,
如果作用於基本數據類型的變數,
則直接比較其存儲的 
“值”是否相等;
如果作用於引用類型的變數,
則比較的是所指向的對象的地址

對於equals方法,
註意:equals方法不能作用於基本數據類型的變數
如果沒有對equals方法進行重寫,
則比較的是引用類型的變數所指向的對象的地址;
諸如String、Date等類對equals方法進行了重寫的話,
比較的是所指向的對象的內容。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 我們都知道在React中使用函數時,有兩種寫法,一是回調函數,二是直接調用,但需要在構造函數中綁定this,只有這樣,函數中的this才指向本組件 總結一下沒有綁定this的函數中的this指向 不管是在本組件的元素上調用的函數還是傳遞給子組件的函數,不管有沒有綁定this,它們調用的都是本組件里的 ...
  • 因為沒有學過其他編程語言,因此作為我的第一門編程“母語”我在這就不舉其他編程語言的例子了,JavaScript這個動態類型腳本語言的變數號稱是沒有類型的,那麼我們怎麼轉換他的變數呢?而且還要強行轉換。 JavaScript的變數的確是沒有類型的,就是說你用var聲明變數後,可以隨便給變數賦值,不會有 ...
  • 在React中,解耦了對DOM元素的操作,但有時我們確實需要對DOM操作,比如設置元素的滾動條,這時ref就滿足了我們的需求 在低版本的react中,ref可以是一個string類型的屬性,通過this.refs.[refString]來獲取相應的DOM元素,但在高版本的react中已被棄用 在高版 ...
  • 在IE6中對圖片格式png24支持度不高,如果使用的圖片格式是png24,則會導致透明效果無法正常顯示 解決方法: 1.可以使用png8來代替png24,即可解決問題,但是使用png8代替png24以後,圖片的清晰圖會有所下降 2.使用JavaScript來解決該問題,需要向頁面中引入一個外部的Ja ...
  • 本節內容簡單介紹下html都有哪些標簽 還是百度首頁,查看源代碼看看: 我把源代碼複製下來另存為html文件里: 註意:網頁文件的尾碼都是html或者htm 我這用的pycharm編輯器(Python編輯器,也可以編輯web頁面),編輯器有很多種,比如notepad... ...
  • 緩存 緩存如何工作 web中的緩存 web緩存的優勢 web緩存的問題 webpack緩存原理 可以通過命中緩存,以降低網路流量,使網站載入速度更快,然而,如果我們在部署新版本時不更改資源的文件名,瀏覽器可能會認為它沒有被更新,就會使用它的緩存版本。由於緩存的存在,當你需要獲取新的代碼時,就會顯得很 ...
  • jQuery -- 知識點回顧篇(二):jQuery效果的使用 1. jQuery 效果 -- 隱藏和顯示: 使用 hide() 和 show() 方法來隱藏和顯示 HTML 元素。 2. jQuery 效果 - 淡入淡出 (1) fadeIn() 方法用於淡入已隱藏的元素。 (2) fadeOut ...
  • model field 類型1、AutoField 一個自增的IntegerField,一般不直接使用,Django會自動給每張表添加一個自增的primary key。2、BigIntegerField 64位整數, -9223372036854775808 到 922337203685477580 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...