学习笔记——Java
生活随笔
收集整理的這篇文章主要介紹了
学习笔记——Java
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Java基礎語法
-
第一個Java程序(HelloWorld.java)
public class HelloWorld { // 公開類 public static void main(String []args) { // 程序入口System.out.println("Hello World"); // 標準輸出} }- 1
- 2
- 3
- 4
- 5
- 1
- 2
- 3
- 4
- 5
-
一個Java程序可以認為是一系列對象的集合,而這些對象通過調用彼此的方法來協同工作。
- 類、對象、方法和實例?
- 類:類是一個模板,它描述一類對象的行為和狀態。
- 對象:對象是類的一個實例,有狀態和行為。
- 方法:方法就是行為。
- 實例變量:每個對象都有獨特的實例變量,對象的狀態由這些實例變量的值決定。
- 基本語法?
- 大小寫敏感
- 類名大寫
- 方法名小寫
- 源文件名必須和類名相同
- 主方法入口:所有的Java 程序由public static void main(String []args)方法開始執行
-
標識符
- 字母、美元符和下劃線開始
- 首字符之后可以是任何字符的組合
- 不能使用關鍵字
- 大小寫敏感
-
修飾符
- 可訪問:default, public , protected, private
- 不可訪問:final, abstract, strictfp
-
變量
- 局部變量
- 類變量(靜態變量)
- 成員變量(非靜態變量)
-
數組
- 數組可以存儲多個同類型的變量。
-
枚舉
- 枚舉限制變量只能是預先設定好的值。使用枚舉可以減少代碼中的bug。
-
注釋
- 單行注釋://
- 多行注釋:/*....*/
-
繼承
- 一個類可以由其他類派生。利用繼承的方法,可以重用已存在類的方法和屬性,而不用重寫這些代碼。超類→子類。
-
接口
- 對象間相互通信的協議。
- 接口只定義派生要用到的方法,但是方法的具體實現完全取決于派生類。
-
關鍵字
| abstract | 抽象方法,抽象類的修飾符 |
| assert | 斷言條件是否滿足 |
| boolean | 布爾數據類型 |
| break | 跳出循環或者label代碼段 |
| byte | 8-bit 有符號數據類型 |
| case | switch語句的一個條件 |
| catch | 和try搭配撲捉異常信息 |
| char | 16-bit Unicode字符數據類型 |
| class | 定義類 |
| const | 未使用 |
| continue | 不執行循環體剩余部分 |
| default | switch語句中的默認分支 |
| do | 循環語句,循環體至少會執行一次 |
| double | 64-bit雙精度浮點數 |
| else | if條件不成立時執行的分支 |
| enum | 枚舉類型 |
| extends | 表示一個類是另一個類的子類 |
| final | 表示一個值在初始化之后就不能再改變了。表示方法不能被重寫,或者一個類不能有子類 |
| finally | 為了完成執行的代碼而設計的,主要是為了程序的健壯性和完整性,無論有沒有異常發生都執行代碼。 |
| float | 32-bit單精度浮點數 |
| for | for循環語句 |
| goto | 未使用 |
| if | 條件語句 |
| implements | 表示一個類實現了接口 |
| import | 導入類 |
| instanceof | 測試一個對象是否是某個類的實例 |
| int | 32位整型數 |
| interface | 接口,一種抽象的類型,僅有方法和常量的定義 |
| long | 64位整型數 |
| native | 表示方法用非java代碼實現 |
| new | 分配新的類實例 |
| package | 一系列相關類組成一個包 |
| private | 表示私有字段,或者方法等,只能從類內部訪問 |
| protected | 表示字段只能通過類或者其子類訪問。子類或者在同一個包內的其他類 |
| public | 表示共有屬性或者方法 |
| return | 方法返回值 |
| short | 16位數字 |
| static | 表示在類級別定義,所有實例共享的 |
| strictfp | 浮點數比較使用嚴格的規則 |
| super | 表示基類 |
| switch | 選擇語句 |
| synchronized | 表示同一時間只能由一個線程訪問的代碼塊 |
| this | 表示調用當前實例,或者調用另一個構造函數 |
| throw 拋出異常 | ? |
| throws | 定義方法可能拋出的異常 |
| transient | 修飾不要序列化的字段 |
| try | 表示代碼塊要做異常處理或者和finally配合表示是否拋出異常都執行finally中的代碼 |
| void | 標記方法不返回任何值 |
| volatile | 標記字段可能會被多個線程同時訪問,而不做同步 |
| while | while循環 |
Java對象和類
-
Java支持以下概念:
- 多態
- 繼承
- 封裝
- 抽象
- 類:類是一個模板,它描述一類對象的行為和狀態。
- 對象:對象是類的一個實例,有狀態和行為。
- 實例
- 方法
- 重載
-
舉例:定義類
public class Dog{ // Dog類(模板)String breed; // 實例變量(屬性)int age;String color;void barking(){// 方法} }- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 1
- 2
- 3
- 4
- 5
- 6
- 7
-
類變量:
- 局部變量:在方法、構造方法或者語句塊中定義的變量被稱為局部變量。變量聲明和初始化都是在方法中,方法結束后,變量就會自動銷毀。
- 成員變量:成員變量是定義在類中,方法體之外的變量。這種變量在創建對象的時候實例化。成員變量可以被類中方法、構造方法和特定類的語句塊訪問。
- 類變量:類變量也聲明在類中,方法體之外,但必須聲明為static類型。
-
構造方法
- 構造方法的名稱必須與類同名。
- 一個類可以有多個構造方法。
- 如果沒有顯式地為類定義構造方法,Java編譯器將會為該類提供一個默認構造方法。
-
創建對象
- 使用關鍵字new來創建一個新的對象。
- 創建對象的步驟:?
- 聲明:包括名稱和類型。
- 實例化:用new創建對象。
- 初始化:調用構造方法初始化對象。
-
訪問實例的變量和方法
- 運算符:.
- 1
- 2
- 3
- 4
- 5
- 6
- 1
- 2
- 3
- 4
- 5
- 6
-
源文件聲明規則
- 一個源文件中只能有一個public類
- 一個源文件可以有多個非public類
- 源文件的名稱應該和public類的類名保持
- 如果一個類定義在某個包中,那么package語句應該在源文件的首行。
- mport語句放在package語句和類定義之間。
- import語句和package語句對源文件中定義的所有類都有效。
-
Java包:用于對類和接口分類。
- Import語句是用來提供一個合理的路徑,使得編譯器可以找到某個類。
基本數據類型
-
Java兩大數據類型:
- 內置數據類型
- 引用數據類型
-
內置數據類型
- Java語言提供了八種基本類型。六種數字類型(四個整數型,兩個浮點型),一種字符類型,還有一種布爾型。
- 四種整數類型:byte、short、int、long。
- 兩種浮點型:float、double。
- 一個布爾型:boolean (true、false)
- 一個字符型:char (16 bits Unicode字符)
-
引用類型
- 類似于C++指針。
- 引用類型指向一個對象,指向對象的變量是引用變量。
- 對象、數組都是引用數據類型。
- 所有引用類型的默認值都是null。
- 一個引用變量可以用來引用與任何與之兼容的類型。
- 例子:Site site = new Site("Runoob")
-
常量
- 使用final關鍵字修飾常量。
- 一般用大寫字母表示。
- 常量前綴:八進制(0)和十六進制(0x)。
- 字符串常量:"...."
- 字符串常量和字符常量都可以包含任何Unicode字符。String a = "\u0001";。
Java變量類型
- 聲明變量格式:type identifier [ = value][, identifier [= value] ...] ;。
- Java變量類型:?
- 局部變量?
- 聲明在方法、構造方法或者語句塊中;
- 用完即毀;
- 只在聲明它的方法、構造方法或者語句塊中可見;
- 在棧上分配;
- 沒有默認值,需要初始化。
- 成員變量(實例變量)?
- 聲明在一個類中,但在方法、構造方法和語句塊之外;
- 可以聲明在使用前或者使用后;
- 在對象創建的時候創建,在對象被銷毀的時候銷毀;
- 訪問修飾符可以修飾實例變量;
- 實例變量對于類中的方法、構造方法或者語句塊是可見的。一般情況下應該把實例變量設為私有。
- 實例變量具有默認值。數值型變量的默認值是0,布爾型變量的默認值是false,引用類型變量的默認值是null。
- 實例變量可以直接通過變量名訪問。但在靜態方法以及其他類中,就應該使用完全限定名:ObejectReference.VariableName。
- 類變量(靜態變量)?
- 在類中以static關鍵字聲明,但必須在方法構造方法和語句塊之外。
- 類只擁有類變量的一份拷貝。
- 靜態變量儲存在靜態存儲區。
- 靜態變量在程序開始時創建,在程序結束時銷毀。
- 靜態變量具有默認值。
- 類變量被聲明為public static final類型時,類變量名稱必須使用大寫字母。
- 局部變量?
Java修飾符
-
分為2類:
- 訪問修飾符
- 非訪問修飾符
-
訪問修飾符
- default,默認的,同一包內可見,不使用修飾符。
- private,私有的,同一類內可見。
- public,公有的,對所有類可見。
- protected,受保護的,同一包和所有子類可見。
-
基本知識
- 類和接口不能聲明為private。
- Private訪問修飾符的使用主要用來隱藏類的實現細節和保護類的數據。
- 私有訪問類型的變量只能通過類中公共的getter方法被外部類訪問。
- public的類、方法、構造方法和接口能夠被任何其他類訪問。
- 如果幾個相互訪問的public類分布在不同的包中,則需要導入相應public類所在的包。
- Java程序的main() 方法必須設置成公有的,否則,Java解釋器將不能運行該類。
- protected的變量、方法和構造器能被同一個包中的任何其他類訪問,也能夠被不同包中的子類訪問。
-
方法繼承規則:
- 父類中聲明為public的方法在子類中也必須為public。
- 父類中聲明為protected的方法在子類中要么聲明為protected,要么聲明為public。不能聲明為private。
- 父類中聲明為private的方法,不能夠被繼承。
-
非訪問修飾符
- static,創建類方法和類變量。
- final,inal修飾的類不能夠被繼承,修飾的方法不能被繼承類重新定義,修飾的變量為常量,是不可修改的。
- abstract,創建抽象類和抽象方法。
- synchronized和volatile,用于線程編程。
-
基本知識:
- 抽象類不能用來實例化對象,聲明抽象類的唯一目的是為了將來對該類進行擴充。
- 如果一個類包含抽象方法,那么該類一定要聲明為抽象類,否則將出現編譯錯誤。
- 抽象類可以包含抽象方法和非抽象方法。
- 抽象方法是一種沒有任何實現的方法,該方法的的具體實現由子類提供。
Java運算符
-
運算符分類:
- 算術運算符
- 關系運算符
- 位運算符
- 邏輯運算符
- 賦值運算符
- 其他運算符
-
算術運算符
- +、-、*、/、%、++、--
- 關系運算符?
- ==/!=、>、<、>=、<=
-
位運算符
- 應用對象:字節型(byte)、字符型(char)、短整型(short)、整型、長整型。
- &,按位與
- |,按位或
- ^,按位異或
- ~,按位補,翻轉每一位
- <<,按位左移
- >>,按位右移
- >>>,按位右移補零
-
邏輯運算符
- &&、||、!
-
賦值運算符
- =、+=、-=、*=、/=、%=、<<=、>>=、&=、^=、|=
-
條件運算符(?:)
- variable x = (expression) ? value if true : value if false
-
instanceOf
- 檢查該對象是否是一個特定類型(類類型或接口類型)
-
運算符優先級?
Java循環結構
- 三種循環結構:?
- while
- do…while
- for(主要用于數組)
-
while
- 最基本循環?
while( 布爾表達式 ) {//循環內容 }- 1
- 2
- 3
- 1
- 2
- 3
- 最基本循環?
-
do…while
- 至少執行一次?
do {//代碼語句 }while(布爾表達式);- 1
- 2
- 3
- 1
- 2
- 3
- 至少執行一次?
-
for
- for循環執行的次數是在執行前就確定的?
for(初始化; 布爾表達式; 更新) {//代碼語句 }- 1
- 2
- 3
- 1
- 2
- 3
- for循環執行的次數是在執行前就確定的?
-
增強for循環
- 主要用于數組?
for(聲明語句 : 表達式) {//代碼句子 }- 1
- 2
- 3
- 4
- 1
- 2
- 3
- 4
- 主要用于數組?
-
break
- 跳出一層循環和switch語句塊
-
continue
- 跳過一次循環
Java分支結構
-
2種分支結構:
- if…else…
- switch
-
if
if(布爾表達式) {//如果布爾表達式為true將執行的語句 }- 1
- 2
- 3
- 4
- 1
- 2
- 3
- 4
-
if…else…
if(布爾表達式){//如果布爾表達式的值為true }else{//如果布爾表達式的值為false }- 1
- 2
- 3
- 4
- 5
- 1
- 2
- 3
- 4
- 5
-
if…else if…else
if(布爾表達式 1){//如果布爾表達式 1的值為true執行代碼 }else if(布爾表達式 2){//如果布爾表達式 2的值為true執行代碼 }else if(布爾表達式 3){//如果布爾表達式 3的值為true執行代碼 }else {//如果以上布爾表達式都不為true執行代碼 }- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
-
嵌套的if…else
if(布爾表達式 1){////如果布爾表達式 1的值為true執行代碼if(布爾表達式 2){////如果布爾表達式 2的值為true執行代碼} }- 1
- 2
- 3
- 4
- 5
- 6
- 1
- 2
- 3
- 4
- 5
- 6
-
switch
- 判斷一個變量與一系列值中某個值是否相等,每個值稱為一個分支。
- switch語句中的變量類型只能為byte、short、int或者char。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
Number類
- Java語言為每一個內置數據類型提供了對應的包裝類。
- 所有的包裝類(Integer、Long、Byte、Double、Float、Short)都是抽象類Number的子類。
- 由編譯器特別支持的包裝稱為裝箱,所以當內置數據類型被當作對象使用的時候,編譯器會把內置類型裝箱為包裝類。相似的,編譯器也可以把一個對象拆箱為內置類型。Number類屬于java.lang包。
-
區分:內置數據類型和對象?
Integer x = 5;- 1
- 1
Character類
- 用于對單個字符進行操作。
- Character 類在對象中包裝一個基本類型 char 的值。
- 需要使用對象,而不是內置數據類型的情況。
- 注意:String類是不可改變的,所以你一旦創建了String對象,那它的值就無法改變了。 如果需要對字符串做很多修改,那么應該選擇使用StringBuffer & StringBuilder 類。
-
用于獲取有關對象的信息的方法稱為訪問器方法。
Character ch = 'a';- 1
- 1
String類
- 在Java中,String屬于對象。
- 創建字符串:String greeting = "Hello world!";
-
方法:
- 字符串長度:str.length()
- 連接字符串:str.concat()、str1+str2
- 創建格式化字符串?
- printf()
- format()
- String類的靜態方法format()能用來創建可復用的格式化字符串,而不僅僅是用于一次打印輸出。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
StringBuffer和StringBuilder
- 當對字符串進行修改的時候,需要使用StringBuffer和StringBuilder類。
- StringBuilder的方法不是線程安全的(不能同步訪問),這一點和StringBuffer不同。
-
StringBuilder有速度優勢,一般使用它。當程序要求線程安全時,必須使用StringBuffer。
public class Test{public static void main(String args[]){StringBuffer sBuffer = new StringBuffer(" test");sBuffer.append(" String Buffer");System.out.println(sBuffer); } }- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 1
- 2
- 3
- 4
- 5
- 6
- 7
Java數組
- Java數組是用來存儲固定大小的同類型元素。
-
聲明數組變量:
dataType[] arrayRefVar; // 首選的方法 //或 dataType arrayRefVar[]; // 效果相同,但不是首選方法- 1
- 2
- 3
- 1
- 2
- 3
-
創建數組(new)
arrayRefVar = new dataType[arraySize]; // 1. 使用dataType[arraySize]創建了一個數組。 // 2. 把新創建的數組的引用賦值給變量 arrayRefVar。- 1
- 2
- 3
- 1
- 2
- 3
-
創建數組和聲明數組變量
dataType[] arrayRefVar = new dataType[arraySize]; dataType[] arrayRefVar = {value0, value1, ..., valuek};- 1
- 2
- 1
- 2
-
處理數組
- 數組元素類型和大小都是確定的,通常使用基本循環或foreach循環。
- foreach循環或者加強型循環,它能在不使用下標的情況下遍歷數組。
- 數組可以作為參數傳遞給方法。
- 數組作為函數的返回值。
Java日期時間
- java.util包提供了Date類來封裝當前的日期和時間。
- Date類提供兩個構造函數來實例化Date對象。?
- 第一個構造函數使用當前日期和時間來初始化對象。
- 第二個構造函數接收一個參數,該參數是從1970年1月1日起的毫秒數。
Java正則表達式
-
Java正則表達式
- 正則表達式定義了字符串的模式。
- 正則表達式可以用來搜索、編輯或處理文本。
- Java正則表達式和Perl的是最為相似的。
- java.util.regex包主要包括以下三個類:?
- Pattern類:pattern對象是一個正則表達式的編譯表示。
- Matcher類:Matcher對象是對輸入字符串進行解釋和匹配操作的引擎。
- PatternSyntaxException類:PatternSyntaxException是一個非強制異常類,它表示一個正則表達式模式中的語法錯誤。
-
捕獲組
- 捕獲組是把多個字符當一個單獨單元進行處理的方法,它通過對括號內的字符分組來創建。
Java方法
- System.out.println()?
- System:系統類
- out:標準輸出對象
- println():方法
-
方法的定義:
修飾符 返回值類型 方法名 (參數類型 參數名){...方法體...return 返回值; }- 1
- 2
- 3
- 4
- 5
- 6
- 1
- 2
- 3
- 4
- 5
- 6
- 方法調用:?
- 根據是否返回值,分為2種:?
- 方法返回一個值的時候,方法調用通常被當做一個值。
- 如果方法返回值是void,方法調用一定是一條語句。
- 根據是否返回值,分為2種:?
Java Stream、File、IO
- Java.io包幾乎包含了所有操作輸入、輸出需要的類。所有這些流類代表了輸入源和輸出目標。
- Java.io包中的流支持很多種格式。
- 一個流可以理解為一個數據的序列。
-
讀取控制臺輸入
BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); //從控制臺讀取單字符 char c = br.read(); //從控制臺讀取字符串 String str = br.readLine();- 1
- 2
- 3
- 4
- 5
- 6
- 1
- 2
- 3
- 4
- 5
- 6
- 控制臺輸出?
- 控制臺的輸出由 print( ) 和println( )完成。這些方法都由類PrintStream 定義,System.out是該類對象的一個引用。
- PrintStream 繼承了OutputStream類,并且實現了方法write()。這樣,write()也可以用來往控制臺寫操作。
參考:
- Java教程
總結
以上是生活随笔為你收集整理的学习笔记——Java的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: OJ编程题教训
- 下一篇: 编码练习——Java-1-基础