靜態屬性_Java面試題—內部類和靜態內部類的區別

d5d3ea1b188b2abcdfa6ebbcc9dc58c1.png

內部類和靜態內部類的區別

內部類:

1、內部類中的變量和方法不能聲明為靜態的。

2、內部類實例化:B是A的內部類,實例化B:A.B b = new A().new B()。

3、內部類可以引用外部類的靜態或者非靜態屬性及方法。

靜態內部類:

1、靜態內部類屬性和方法可以聲明為靜態的或者非靜態的。

2、實例化靜態內部類:B是A的靜態內部類,A.B b = new A.B()。

3、靜態內部類只能引用外部類的靜態的屬性及方法。

inner classes——內部類

static nested classes——靜態嵌套類

其實人家不叫靜態內部類,只是叫習慣了,從字面就很容易理解了。

內部類依靠外部類的存在為前提,而靜態嵌套類則可以完全獨立,明白了這點就很好理解了。

非靜態內部類中的變量和方法不能聲明為靜態的原因

靜態類型的屬性和方法,在類加載的時候就會存在于內存中。使用某個類的靜態屬性和方法,那么這個類必須要加載到虛擬機中。但是非靜態內部類并不隨外部類一起加載,只有在實例化外部類之后才會加載。

我們設想一個場景:在外部類并沒有實例化,內部類還沒有加載的時候如果調用內部類的靜態成員或方法,內部類還沒有加載,卻試圖在內存中創建該內部類的靜態成員,就會產生沖突。所以非靜態內部類不能有靜態成員變量或靜態方法。

String,StringBuilder,StringBuffer的區別

  • String 字符串常量
  • StringBuffer 字符串變量(線程安全)
  • StringBuilder 字符串變量(非線程安全)

性能上通常StringBuilder > StringBuffer > String。

String是不可變對象,每次對String類型進行改變的時候都等同于生成了一個新的String對象,然后將指針指向新的String對象,所以性能最差,對于要經常改變內容的字符串不用String。

StringBuffer是字符串變量,對它操作時,并不會生成新的對象,而是直接對該對象進行更改,所以性能較好。

StringBuilder和StringBuffer一樣,是字符串變量,但是他不帶有synchronized關鍵字,不保證線程安全,所以性能最好。在單線程的情況下,建議使用StringBuilder。

總體來說:

  • String:適用于少量的字符串操作的情況。
  • StringBuilder:適用于單線程下在字符緩沖區進行大量操作的情況。
  • StringBuffer:適用多線程下在字符緩沖區進行大量操作的情況。

來一些問題:

下面這段代碼的輸出結果是什么?

String a = "helloworld";String b = "hello" + "world";System.out.println((a == b));

輸出結果為:True。

原因是String對字符串的直接相加,會在編譯期進行優化。即hello+world在編譯時期,被優化為helloworld,所以在運行時期,他們指向了同一個對象。我們也可以推理,對于直接字符串的相加,String不一定比其余兩個慢。

下面這段代碼的輸出結果是什么?

String a = "helloworld";String b = "hello"; String c = b + "world"; System.out.println((a == c));

輸出結果為:False。

原因是c并非兩個字符串直接相加,包含了一個字符串引用,這時不會做編譯期的優化。所以a、c最終生成了兩個對象,這時他的效率低。

集合和數組之間的相互轉換

數組變集合:

通常我們會回答的是以下代碼:

List list = Arrays.asList(array);

但這并不是很好的答案,此時組合成的list是Arrays里面的一個靜態內部類,該類并未實現add、remove方法,因此在使用時存在問題。

可以這樣:

String array[]= {"hello

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/371819.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/371819.shtml
英文地址,請注明出處:http://en.pswp.cn/news/371819.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

儲存與更新 access_token

做微信的項目,一開始就是 access_token 的申請,微信文檔上寫的比較清楚: 1、為了保密appsecrect,第三方需要一個access_token獲取和刷新的中控服務器。而其他業務邏輯服務器所使用的access_token均來自于該中控服務器,…

Eclipse安裝以及JDK環境變量配置

首先是下載Eclipse;點擊鏈接打開Eclipse官網eclipse官網點擊DownLoad Packages,注意是點擊“DownLoad Packages”點擊你需要的版本開始下載(一般是64bit Eclipse IDE)等待幾秒鐘,開始下載這樣Eclipse已經下載好了&…

完整的Web應用程序Tomcat JSF Primefaces JPA Hibernate –第1部分

我們創建了這篇文章,將展示如何使用以下工具創建完整的Web應用程序:Tomcat7,帶有Primefaces的JSF2(Facelets和Libraries)(具有AutoComplete),JPA / Hibernate(具有NxN關系…

mysql主從架構升級_實戰項目——mysql主從架構的實現

一主一從1.1 環境準備:centos系統服務器2臺、 一臺用戶做Mysql主服務器, 一臺用于做Mysql從服務器, 配置好yum源、 防火墻關閉、 各節點時鐘服務同步、 各節點之間可以通過主機名互相通信1.2 準備步驟:1)iptables -F && s…

FastReport.Net使用:[30]對話框使用

使用對話框需要知道的地方 1.按鈕的DialogResult屬性。 假如DialogResult屬性值為OK的按鈕被點擊,報表將會展現后面的對話框或者報表頁;如果屬性值為None,則停留在當前窗體;如果為其他值,則直接退出報表打印&#xff0…

模擬聊天室顯示語句保持最新顯示

<!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <title>模擬聊天室顯示語句保持最新顯示</title> <style> *{ border-collapse: collapse; } .dialog_box{ width:400px; height: 600px; margin…

改善Java EE生產支持技能的8種方法

參與Java EE生產支持的每個人都知道這項工作可能很困難。 7/24傳呼機支持&#xff0c;定期處理的多個事件和錯誤修復&#xff0c;來自客戶和管理團隊的壓力&#xff0c;要求它們盡快解決生產問題并防止再次發生。 在日常工作中&#xff0c;您還必須照顧由多個IT交付團隊驅動的多…

plsql連接mysql_安裝了mysql和pl/sql,怎么配置讓pl/sql能聯接mysql數據庫

64位環境下&#xff0c;使用PL/SQL Developer連接Oracle&#xff1a;?1. 下載32位Oracle InstantClient&#xff0c;并展開到某目錄&#xff0c;例如C:\instantclient-basic-nt-11.2.0.2.0&#xff1b;?2. 將系統的tnsnames.ora拷貝到該目錄下&#xff1b;?3. 在PLSQL Devel…

varnish基礎

varnish概念 初步認識 首先來跟我學習&#xff0c;v~a~r~n~i~s~h~~ &#xff0c;學會了沒有~ 當然還有很重要的一個概念&#xff0c;它是高性能緩存服務器&#xff0c;舉個例子。 好比我們要去買東西&#xff0c;所有的我們需要的東西是在超市廠家生產出來的&#xff0c;我們需…

引入Spring集成

在本文中&#xff0c;我們介紹Spring Integration 。 如果您以前沒有使用過Spring Integration&#xff0c;那么可能會幫助您復習Gregor Hohpe的Enterprise Integration Patterns 。 我還將推薦Josh Long 撰寫的這篇出色的介紹性文章 。 上下文設置 簡而言之&#xff0c; 企業…

PAT 1024. 科學計數法 (20)

科學計數法是科學家用來表示很大或很小的數字的一種方便的方法&#xff0c;其滿足正則表達式[-][1-9]"."[0-9]E[-][0-9]&#xff0c;即數字的整數部分只有1位&#xff0c;小數部分至少有1位&#xff0c;該數字及其指數部分的正負號即使對正數也必定明確給出。 現以科…

Mac上Hive環境搭建

本文介紹在Mac上搭建Hive環境。 建議首先配置好Hadoop&#xff0c;搭建與配置可以參考我之前的博文Mac Hadoop的安裝與配置。 當然你也可以選擇使用Docker搭建環境&#xff0c;本文不作介紹。 安裝 對于MacOs&#xff0c;推薦使用HomeBrew安裝hive&#xff0c;一步到位。 $ bre…

mysql+創建備份賬戶_mysql 添加用戶,授予權限,數據庫備份等 (轉載)

一&#xff0c;連接MySQL格式&#xff1a;mysql -h 遠程主機地址 -u 用戶名 -p 回車輸入密碼進入&#xff1a;mysql -u root -p 回車Enter password: ,輸入密碼就可以進入mysql> 進入了退出命令:>exit 或者ctrlD二&#xff0c;MySQL管理與授權1.修改密碼&#xff1a;格式…

分代緩存和轉換

康拉德&#xff08;Konrad&#xff09;最近在我們公司的技術室中分享了有關如何完成緩存的有趣文章&#xff0c;這是一個大型的波蘭社交網絡nk.pl。 算法中的核心概念之一是分代緩存 &#xff08;請參閱此處或此處 &#xff09;。 基本思想是&#xff0c;對于緩存鍵&#xff0c…

css精靈

○ css 精靈&#xff08;Sprites&#xff09;技術利用photoshop將圖片整合&#xff0c;然后用background-images&#xff0c;background-position&#xff0c;background-repeat技術&#xff0c;對圖片進行精確定位。 ○ 優點&#xff1a;減少http請求數量&#xff0c;減少服務…

基于Jenkins+Gitlab的自動化部署實戰

故事背景 一個中小型企業&#xff0c;是典型的互聯網公司&#xff0c;當初期的時候可能運維只能標配到2~3人&#xff0c;此時隨著公司的發展&#xff0c;項目會逐漸增多。前期部署項目可能都是手動的&#xff0c; 俗稱“人肉部署”&#xff0c;這簡直是無比的痛苦&#xff0c;不…

cmd如何刷新MySQL數據庫_怎樣在cmd中用命令操作MySQL數據庫 需要技巧

用命令來操作MySQL是工作必備的&#xff0c;今天我就來分享一下cmd命令操作MySQL數據庫的方法&#xff0c;希望有幫助。工具/材料電腦xampp操作方法01首先&#xff0c;啟動MySQL服務才行哦。這里我是用xampp集成的數據庫&#xff0c;方便&#xff0c;點擊‘start’。02如圖&…

Java順序IO性能

許多應用程序將一系列事件記錄到基于文件的存儲中&#xff0c;以供以后使用。 從日志記錄和審核&#xff0c;直到在事件源設計或其緊密相關的CQRS中保留事務重做日志&#xff0c;這都可以是任何東西。 Java具有多種方法&#xff0c;可以通過這些方法將文件順序寫入或重新讀取。…

text段,data段,bss段,堆和棧

.bss段和.data段的區別 text段,data段,bss段,堆和棧轉載于:https://www.cnblogs.com/jingzhishen/p/6203107.html

[BZOJ3529][Sdoi2014]數表

[BZOJ3529][Sdoi2014]數表 試題描述 有一張Nm的數表&#xff0c;其第i行第j列&#xff08;1 < i < n&#xff0c;1 < j < m&#xff09;的數值為能同時整除i和j的所有自然數之和。給定a&#xff0c;計算數表中不大于a的數之和。輸入 輸入包含多組數據。輸入的第一行…