java基礎面試(一)

来源:http://www.cnblogs.com/wjt-super/archive/2017/12/02/7910244.html
-Advertisement-
Play Games

1、使用final關鍵詞修飾一個變數時,是引用不能變,還是引用的變數不能變? 使用final關鍵字修飾一個變數時,是指引用變數不能變,引用變數所指向的對象中的內容還是可以改變的。例如,對於如下語句:final StringBuffer a=new StringBuffer("immutable"); ...


1、使用final關鍵詞修飾一個變數時,是引用不能變,還是引用的變數不能變?

   使用final關鍵字修飾一個變數時,是指引用變數不能變,引用變數所指向的對象中的內容還是可以改變的。例如,對於如下語句:final StringBuffer a=new StringBuffer("immutable");

執行如下語句將報告編譯錯誤:a=new StringBuffer("");

但是執行如下則可以通過編譯:a.append("lallaal");

有人在定義方法的參數時,可能想採用如下形式來阻止方法內部修改傳進來的參數對象:

public void method(final StringBuffer param){},實際上,這是辦不到的,該方法在內部依舊可以修改對象參數。

2、靜態變數和實例變數的區別?

   在語法定義上的區別:靜態變數需要static修飾,而實例變數則不需要。

   在程式運行時的區別:實例變數屬於某個對象的屬性,必須創建了實例對象,其中的是合理變數才會被分配空間,才能使用這個實例變數。靜態變數不屬於某個實例對象,而是屬於類,也稱為類變數,只要程式載入了類的位元組碼,不用創建任何實例對象,靜態變數就會被分配記憶體空間,靜態變數就可以被使用。總之,實例變數必須創建對象後才可以通過這個對象使用,靜態變數則可以直接使類名引用。

3、是否可以從一個static方法內部發出對非static方法的調用?

  不可以,因為非static方法是要和被創建對象關聯在一起的, 必須創建一個對象 後才可對非靜態方法調用,而static方法調用時不需要創建對象,可以直接調用。也就是說,當一個靜態方法被調用的時候,可能還沒創建任何實例對象,如果從static方法中發出對非static方法的調用,那非static方法無法確認是關聯到哪一個對象上。所以答案是不可以。

4、Integer和int的區別

   int是java提供的8中原始數據類型之一。java為每一個原始數據類型提供了封裝類。Integer就是int的封裝類。int預設值為0,Integer預設值為null。前者無法表達出未賦值的狀態,後者可以區分。

5、Overload和Override的區別?Overloaded的方法是否可以改變返回值的類型?

  Overload是重載,Overrid是覆蓋,也就是方法的重寫。

  overload表示同一個類中可以有多個名稱相同的方法,但是這些方法的參數列表各不相同(參數個數或參數類型不同)。

  重寫Override表示子類中的方法可以與父類中某個方法的名稱和參數完全相同,通過子類創建實例對象調用這個方式時,將調用子類中定義的方法,這相當於把父類中定義的方法完全覆蓋掉(這也是java多態一種體現)。子類覆蓋父類的方法時,只能比父類拋出更少的異常,或者比拋出父類異常的子類,因為子類可以解決父類的一些問題,不能比父類有更多的問題。子類方法的許可權只能比父類更大,不能更小。如果父類中的方法時private修飾,子類則不存在覆蓋限制,相當於子類增加了一個全新的方法。

  至於Overloaded的方法是否可以改變返回值的類型這個問題,要看你倒底想問什麼呢?這個題目很模糊。如果幾個Overloaded的方法的參數列表不一樣,它們的返回者類型當然也可以不一樣。但我估計你想問的問題是:如果兩個方法的參數列表完全一樣,是否可以讓它們的返回值不同來實現重載Overload。這是不行的,我們可以用反證法來說明這個問題,因為我們有時候調用一個方法時也可以不定義返回結果變數,即不要關心其返回結果,例如,我們調用map.remove(key)方法時,雖然remove方法有返回值,但是我們通常都不會定義接收返回結果的變數,這時候假設該類中有兩個名稱和參數列表完全相同的方法,僅僅是返回類型不同,java就無法確定編程者倒底是想調用哪個方法了,因為它無法通過返回結果類型來判斷。

  覆蓋需要註意一下幾點:

  a、覆蓋的方法的標誌必須要和被覆蓋的方法的標誌完全匹配,才能達到覆蓋的效果;

  b、覆蓋的方法的返回值必須和被覆蓋的方法的返回一致;

  c、覆蓋的方法所拋出的異常必須和被覆蓋方法所拋出的異常一致,或者是其子類;

  d、被覆蓋的方法不能是被private修飾的方法,否則在其子類中只是定義了一個名字相同的新方法;

  Overload需要註意的幾點:

  

  1、在使用重載時只能通過不同的參數樣式。例如,不同的參數類型,不同的參數個數,不同的參數順序(當然,同一方法內的幾個參數類型必須不一樣,例如可以是fun(int,float),但是不能為fun(int,int));

        2、不能通過訪問許可權、返回類型、拋出的異常進行重載;

        3、方法的異常類型和數目不會對重載造成影響;

6、abstractclass和interface語法上有什麼區別?

  1.抽象類可以有構造方法,介面中不能有構造方法。

  2.抽象類中可以有普通成員變數,介面中沒有普通成員變數

  3.抽象類中可以包含非抽象的普通方法,介面中的所有方法必須都是抽象的,不能有非抽象的普通方法。

  4. 抽象類中的抽象方法的訪問類型可以是public,protected和(預設類型,雖然

  eclipse下不報錯,但應該也不行),但介面中的抽象方法只能是public類型的,並且預設即為public abstract類型。

  5. 抽象類中可以包含靜態方法,介面中不能包含靜態方法

  6. 抽象類和介面中都可以包含靜態成員變數,抽象類中的靜態成員變數的訪問類型可以任意,但介面中定義的變數只能是publicstatic final類型,並且預設即為publicstatic final類型。

  7. 一個類可以實現多個介面,但只能繼承一個抽象類。

7、String、StringBuffer、StringBuilder的區別?

  String字元串常量(final修飾,不可被繼承),String是常量,當創建之後即不可更改。

  StringBuffer字元串變數,線程安全,也是final修飾,不允許被繼承,其中的絕大數方法都進行了同步處理,包括常用的appen方法也進行了同步處理(Synchronized),其toString方法會進行對象緩存,以減少元素的開銷。

1 public synchronized String toString() { 
2 if (toStringCache == null) { 
3 toStringCache = Arrays.copyOfRange(value, 0, count); 
4 } 
5 return new String(toStringCache, true); 
6 }

  StringBuilder字元串變數(非線程安全的)與StringBuffer一樣都繼承和實現了相同的介面和類,方法除了沒有進行同步處理(synchronize)以外基本一致,不同之處在於toString方法會返回一個對象

1 public String toString() { 
2 // Create a copy, don’t share the array 
3 return new String(value, 0, count); 
4 }

8、ArrayList和LinkedList有什麼區別?

  兩者都實現了list的介面,主要不同之處:

  1、ArrayList是基於索引的數據介面,它的底層是數組,可以以O(1)的時間複雜度對元素進行隨機訪問,LinkedList是以元素列表的形式存儲它的數據,每一行元素否和它的前一個和後一個元素連接在一起,這種情況下查找的複雜度為O(n)。

  2、相對ArrayList,LinkedList的插入、添加和刪除操作的速度快,因為元素被添加到集合中的任意位置是,不需要想數組那樣重新計算大小或者更新索引。

  3、LinkedList比ArrayList更占記憶體,因為LinkedList為每一個節點存儲了兩個引用個,一個指向前一個元素,一個指向後一個元素。

9、講講類的實例化順序,比如父類靜態數據,構造函數,欄位,子類靜態數據,構造函數,欄位,當 new 的時候, 他們的執行順序

父類的靜態變數-->父類的靜態代碼段-->子類的靜態變數-->子類的靜態代碼段-->父類的非靜態變數-->父類的構造函數-->子類的非靜態變數-->子類的構造函數。

10、


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

-Advertisement-
Play Games
更多相關文章
  • 看見頭文件中的條件編譯就犯怵,不知什麼意思,但是,師傅說:”就得那麼寫“,我照做,但是知其然而不知其所以然。 好吧,我承認自己只是一個代碼的搬運工,哦,不,或許還談不上。 下麵是學習後自己的理解~~~ 代碼: 也許我渣把,總之,之前我確實不會。 解釋: 第1、2行和第14行:防止重覆定義。 如果兩個 ...
  • import time# print(help(time)) # 顯示time模塊全文本# Functions: # 執行結果 # time() -- return current time in seconds since the Epoch as a float # 以浮點數返回以秒計算的從19 ...
  • Mojo: Maven plain Old Java Object 1、插件命名規則:maven-<yourplugin>-plugin是Maven的保留欄位,不允許使用,我們可以用<myplugin>-maven-plugin來命名自己開發的插件。 2、自定義插件代碼,註意pom文件的packag ...
  • java學習資料,僅供學習交流,自行取用↓ 鏈接:https://pan.baidu.com/s/1dF1wCST 密碼:i75g ...
  • 創建原型模板 1、在空目錄運行archetype:generate上面的命令,待下載完必要的jar包後,首先需要輸入內置的原型編號; 2、輸入任意編號後,繼續下載必要jar包,之後要求分別輸入groupId,artifactId,version,package,並確認 3、瀏覽Maven工程 4、內 ...
  • 在php官方文檔里有這麼一段: 代碼輸出結果如下: I am bar.I am bar.. 結果輸出了: I am bar.I am bar.you yyy. 確認 $foo->$baz[2] 即為 $foo->baz, 同理 $foo->$baz[1] 即 $foo->bar, 那麼第八行這裡 $ ...
  • 首先要說的是django與其他的框架不同,django是一個封裝的及其完善的框架,我們使用django也不會像之前寫學生系統那樣,django操作資料庫使用自帶的ORM來進行操作,Torando與Flask的資料庫使用就很自由(當然也可以使用我們之前的SQL helper),並且Flask的模板都不 ...
  • 操作系統 : CentOS7.3.1611_x64 go語言版本:1.8.3 linux/amd64 db2版本: db2_v101_linuxx64_expc 問題描述 怎麼使用go語言在CentOS環境下操作db2資料庫? 解決方案 go語言操作資料庫相關信息可以參考如下鏈接: https:// ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...