Java基礎知識(二)

1、String、StringBuffer、StringBuilder

  • 操作少量數據->String
  • 單線程操作字符串緩沖區下操作大量數據->StringBuilder
  • 多線程操作字符串緩沖區下操作大量數據->StringBuffer
  • 可變性:String類中使用final關鍵字private final char value[],所以String對象是不可變的。而StringBuilder和StringBuffer都繼承自AbstractStringBuilder類,在AbstractStringBuiler類中也是使用字符數組保存字符串char[] valur,但是沒有用到final關鍵字,所以StringBuilder和StringBuffer都是可變的
  • 線程安全性:String中的對象是不可變的,也就可以理解為常量,所以String是線程安全的。AbstractStringBuilder是StringBuilder和StringBuffer的公共父類,它定義了一些字符串的基本操作,如:append、insert、indexOf等公共方法。StringBuffer對方法加了同步鎖或者對調用的方法加了同步鎖,所以StringBuffer是線程安全的。而StringBuilder并沒有對方法進行加同步鎖,所以StringBuilder是線程不安全的
  • 性能:每次對String類型進行改變的時候,都會生成一個新的String對象,然后將指針指向新的String對象。StringBuffer每次都會對StringBuffer對象本身進行操作,而不是生成新的對象并改變對象引用。相同的情況下使用StringBuilder相對比StringBuffer能獲得10%-15%左右的性能提升,但要冒線程不安全的險。

2、裝箱、拆箱

  • 裝箱:將基本類型用它們對應的引用類型包裝起來
  • 拆箱:將包裝類型轉換為基本數據類型

3、無參構造函數的作用

程序在執行子類的構造方法之前,如果沒有用super()來調用父類特定的構造方法,則會調用父類中沒有參數的構造方法。因此,如果父類中只定義了有參數的構造方法,而在子類的構造方法中又沒有用super()來調用父類中特定的構造方法,則編譯時會發生錯誤。而且需要注意一點:如果沒有定義任何構造函數,那么程序會幫我們自動定義一個默認無參的構造函數;如果只定義了有參構造函數,那么程序就不會幫我們定義無參構造函數。所以最保守的方法還是手動定義無參的構造函數。

4、java包、javax包

起初JavaAPI所需的包時java包,javax包當時只是擴展API包來使用。隨著時間的推移,javax包逐漸擴展成為JavaAPI的組成部分。但是直接遷移比較麻煩,會破壞許多原有的代碼,因此最終決定javax包成為標準API的一部分。

5、接口、抽象類

  • 接口的方法默認是public,所有方法在接口中不能有實現(java8開始接口方法可以用默認實現),抽象類可以有非抽象的方法,抽象方法必須只能聲明,子類實現
  • 接口中的實例變量默認是final類型的,而抽象類中不一定
  • 一個類可以實現多個接口,但最多只能繼承一個抽象類
  • 一個類實現接口的話就要實現接口的所有方法,而繼承抽象類的話不一定
  • 接口不能用new實例化,但可以聲明,但是必須引用一個實現該接口的對象
  • 抽象是對類的抽象,是一種模板設計;接口是行為的抽象,是一種行為的規范
  • 注:java8中,接口可以定義靜態方法,可以直接用接口名調用,實現類和實現不可以調用。如果同時實現兩個接口,接口中定義了一樣的默認方法,必須重寫。

6、成員變量、局部變量

  • 語法形式:成員變量屬于類,局部變量屬于方法(在方法中定義or方法的參數);成員變量可以被public、private、static等修飾符所修飾,而局部變量不能被訪問控制修飾符和static修飾;但是,兩者都可以被final修飾
  • 在內存中存儲方式:局部變量,如果是基本數據類型,那么就直接存在棧中,如果是包裝類型,比如 Integer i = new Integer (12);,會把對象存在堆中,對象的引用存在棧中。 成員變量,類的成員在不同對象中各不相同,基本數據類型和引用數據類型都存儲在這個對象中,作為整體一并存儲在堆中。而類的方法是所有對象共享的,方法是存在方法區的,只用當調用的時候才會被壓棧,不用的時候是占內存的。
  • 生存時間:成員變量是對象的一部分,它隨著對象的創建而存在;局部變量隨著方法的調用完畢而自動消失
  • 沒有賦初始值:成員變量會按照類型的默認值而賦值(除了被final修飾的變量);局部變量不會自動賦值

7、創建一個對象用什么運算符?對象實體、對象引用的差異?

使用new運算符,new創建對象實例(對象實例在堆內存中),對象引用指向對象實例(對象引用存在棧內存中)。把對象實體比作氣球,把對象引用比作繩子:一根繩子可以不系氣球,也可以系一個氣球;一個氣球可以被n條繩子系住。結論:一個對象引用可以指向0個/1個對象實體;一個對象實體可以有n個對象引用指向它。

8、構造方法的特性

  • 名字與類名相同
  • 雖然沒有返回值,但是也不能用void聲明
  • 生成對象時自動執行,不用手動調用

9、靜態方法、實例方法

在外部調用靜態方法時,可以使用類名.方法名的方式,也可以使用對象名.方法名的方式。而實例方法只能通過對象名.方法名來調用。靜態方法在訪問本類的成員時,只允許訪問靜態變量、靜態方法,不允許訪問實例成員變量、方法,而實例方法沒有這樣的限制

10、final 關鍵字

  • 變量:對于一個final變量,如果是基本數據類型的變量,則其數值一旦在初始化之后便不能更改;如果是引用類型的變量,則在對其初始化之后便不能再讓其指向另一個對象。
  • 類:當用final修飾一個類時,表明這個類不能被繼承。final類中的所有成員方法都會被隱式地指定為final方法
  • 方法:第一個原因是把方法鎖定,以防任何繼承類修改它的含義,不能重寫;第二個原因是效率。在早期的Java實現版本中,會將final方法轉為內嵌調用。但是如果方法過于龐大,可能看不到內嵌調用帶來的任何性能提升(現在的Java版本已經不需要使用final方法進行這些優化了)。類中所有的private方法都隱式地指定為final。

轉載于:https://juejin.im/post/5c9894d15188252d5255f7e1

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

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

相關文章

C# WPF:初識布局容器

StackPanel堆疊布局 StackPanel是簡單布局方式之一&#xff0c;可以很方便的進行縱向布局和橫向布局 StackPanel默認是縱向布局的 <Window x:Class"WpfApplication1.MainWindow" xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation" …

Kibana源碼分析--Hapijs路由設置理解筆記

【ES6解構賦值】&#xff1a;https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment 【Joi APi】&#xff1a;https://github.com/hapijs/joi/blob/v13.1.2/API.md 轉載于:https://www.cnblogs.com/lishidefengchen/p/866874…

Python打包EXE神器 pyinstaller

最近由于項目需要&#xff0c;以前的python文件需要編輯為EXE供前端客戶使用。 由于最早接觸的是distutils&#xff0c;所以一開始準備使用distutils和py2exe搭配來進行python的exe化&#xff0c;也就是傳統的使用setup.py的方式來進行exe安裝。但是結果都不是很好&#xff0c;…

好程序員HTML5前端教程-css的引入方式和選擇器

好程序員HTML5前端教程-css的引入方式和選擇器 01.引入css方式&#xff08;重點掌握&#xff09; 行內樣式 內接樣式 外接樣式      3.1 鏈接式      3.1 導入式 css介紹 現在的互聯網前端分三層&#xff1a; HTML&#xff1a;超文本標記語言。從語義的角度描述頁面結…

4.4.6 數組也能無鎖:AtomicIntegerArray

數組也可以實現cas操作&#xff0c;有以下幾個類以及用法如下&#xff1a; public class AtomicTntegerArrayTest {public static void main(String[] args) {AtomicIntegerArray atomicIntegerArraynew AtomicIntegerArray(3);AtomicLongArray atomicIntegerArray1new AtomicL…

20種PLC元件編號和Modbus編號地址對應表

1、三菱&#xff1a; X元件支持Modbus之02功能碼&#xff1b; Y元件支持Modbus之01、05、15功能碼&#xff1b; D元件支持Modbus之03、06、16功能碼。 2、西門子&#xff1a; I元件支持Modbus之02功能碼&#xff1b; Q元件支持Modbus之01、05、15功能碼&#xff1b; V元件…

暑期學習

由于最后大作業的呈現情況與短學期所完成的還相差甚遠&#xff0c;所以在暑期的時候開始進一步的細化。 在這個過程之中產生了如下的問題&#xff1a; 已解決的有&#xff1a; 1.用a標簽在同一頁面實現跳轉。 要點&#xff1a;標記<a href"../home#pre">的時候…

五、RabbitMQ的消息屬性(讀書筆記)

2019獨角獸企業重金招聘Python工程師標準>>> 簡介 當使用RabbitMQ發布消息時&#xff0c;消息又AMQP規范中的三個低層幀類型組成&#xff1a; Basic.publish方法幀&#xff1b;內容頭幀&#xff1b;消息體幀&#xff1b;這三種幀類型按順序一起工作&#xff0c;以便…

異步和單線程

轉載于:https://www.cnblogs.com/sunmarvell/p/8674748.html

windows下解決mysql5中文亂碼的問題

1.問題描述&#xff1a;一開始無論是在命令行&#xff0c;還是在mysql的客戶端輸入中文都會出現 “???” 問題之類的亂碼問題&#xff1b; 2.解決辦法&#xff1a; 1&#xff09;cmd 進入mysql &#xff0c;命令mysql -uroot -p123456 2&#xff09;然后執行 show variable…

C#:把dll封入exe中方法

在這個事件中,可以重新為加載失敗的程序集手動加載 如果你將dll作為資源文件打包的你的應用程序中(或者類庫中) 就可以在硬盤加載失敗的時候 從資源文件中加載對應的dll 就像這樣: class Program {static Program(){ //這個綁定事件必須要在引用到TestLibrary1這個程序…

P2685 [TJOI2012]橋

P2685 [TJOI2012]橋 思路&#xff1a; 先求出最短路&#xff1a; d1[u] : u 到 1 的最短路&#xff0c; d2[u] : u 到 n 的最短路 再求出一條從 1 到 n 的最短路鏈&#xff0c;然后從鏈上的每一個點出發dfs, 求出&#xff1a; l[u] : u 到 1 的最短路徑過中和鏈的交點&#xf…

C#結構類型圖

轉載于:https://www.cnblogs.com/kangao/p/8674838.html

C# 全局鉤子實現掃碼槍獲取信息

1.掃描槍獲取數據原理基本相當于鍵盤數據&#xff0c;獲取掃描槍掃描出來的數據&#xff0c;一般分為兩種實現方式。 a&#xff09;文本框輸入獲取焦點&#xff0c;掃描后自動顯示在文本框內。 b&#xff09;使用鍵盤鉤子&#xff0c;勾取掃描槍虛擬按鍵&#xff0c;根據按鍵頻…

Centos下安裝mysql(二進制版)

Centos下安裝mysql&#xff08;二進制版&#xff09; 1.下載安裝包&#xff0c;選擇相應的平臺、版本&#xff0c;比如&#xff0c;選擇64位Linux平臺下的MySQL二進制包“Linux-Generic &#xff08;glibc 2.5&#xff09;&#xff08;x86&#xff0c;64-bit&#xff09;&#…

使用gradle多渠道打包

以友盟的多渠道打包為例&#xff0c;如果我們須要打包出例如以下渠道&#xff1a;UMENG, WANDOUJIA, YINGYONGBAO。 第一種方法。是須要創建文件的。我們在寫完我們的代碼之后&#xff0c;在app/src以下。分別創建和main同級目錄的目錄umeng, wandoujia, yingyongbao,這三個目錄…

SMMS 2016 啟用深色主題

1、用文本類編輯器 打開C:\Program Files (x86)\Microsoft SQL Server\130\Tools\Binn\ManagementStudio目錄下的 ssms.pkgundef 2、去除// Remove Dark theme行以下的注釋 3、重新打開SMMS&#xff0c;如果還沒有出現“深色”主題&#xff0c;請執行第4點 4、打開powershell【…

四大步驟,徹底關閉Win10自動更新

盡管Win11已經發布了一段時間&#xff0c;但目前互聯網上大部分電腦用戶所使用的的操作系統仍是Win10&#xff0c;對于Win10&#xff0c;筆者相信大部分人應該都不陌生&#xff0c;作為目前市面上占比最高的電腦系統&#xff0c;Win10的許多功能和操作邏輯都十分優秀&#xff0…

LeetCode算法題-Repeated String Match(Java實現)

這是悅樂書的第289次更新&#xff0c;第307篇原創 01 看題和準備 今天介紹的是LeetCode算法題中Easy級別的第156題&#xff08;順位題號是686&#xff09;。給定兩個字符串A和B&#xff0c;找到A必須重復的最小次數&#xff0c;使得B是它的子字符串。 如果沒有這樣的解決方案&a…

php

●轉載于:https://www.cnblogs.com/volcanorao/p/8678104.html