首頁  >  文章  >  类库下载  >  JAVA中一些需要記錄的知識點(基礎部分)

JAVA中一些需要記錄的知識點(基礎部分)

高洛峰
高洛峰原創
2016-10-10 09:06:061510瀏覽

JDK與JRE的區別:

JRE是所有JAVA程式運作所需的環境,任何JAVA程式的運作都依賴JRE,目前從JAVA官網選擇安裝JAVA即安裝的是JRE。

JDK是為開發人員所提供的工具包,對開發人員來說屬於必備項,一般在JDK本身包含JRE,但是一般JDK還會再安裝一套JRE,這套JRE被成為公共JRE(如圖),JDK需要從oracle的官網下載。

目前的主流編輯器,如eclipse會找到JRE和JDK的位置,當然也可以再進行手工修改。

 

JAVA所需環境變數說明:

PATH:(必需)指定編譯、執行java程式是所需的程式所在路徑,一般在jdk安裝目錄(注意是JDK!!!和JRE是不一樣的程式所在路徑,一般在jdk安裝目錄(注意是JDK!!!和JRE是不一樣的!目前常用的設定辦法是先定義一個JAVA_HOME變量,在PATH中引用JAVA_HOME:%JAVA_HOME%/bin;

CLASSPATH:(之前必需,現在非必需)設定Classpath的目的,在於告訴Java執行環境,在哪些目錄下可以找到您要執行的Java程式(.class檔案),現在已經不需要;

JAVA_HOME:(理論上非必需,實際必需)設定變數存放java程式運行所需的程式所在路徑,方便其他地方進行引用(不用再輸入一長串路徑,直接使用JAVA_HOME變數即可),同時,現在不少軟體也會直接呼叫JAVA_HOME變量,不設定容易出錯。

 

1.java主要結構闡述

java中每一個.java文件都是一個類,一個java工程由許許多多的.java文件組成,也就是由java類組成。一般而言一個java類中主要的結構如下:

1.包申明:java類在本工程中屬於哪個包,即在工程中的位置;

2.導入的包:外部庫,工具;

3.公共類別(或介面)定義:類別名稱與java檔案的名稱必須相同,類別中內容即java檔案的主要內容

4.其他:其他類別的定義和介面定義。

java專案中,由外至內分別為:source資料夾、套件(package)、類別(.java,就是上面bb了半天的那個東西),經過編譯後會將編譯後的類別(.class)放在與source資料夾同級的bin資料夾中。不同的source floder 中的package可以同名,相同的package中的類別不能同名(在兩個不同source floder中的相同package中也不行)

 

2.基本資料類型

基本資料類型8中:整數4種、浮點2種、字元、布林;

btye最大128-1;short最大32768-1;int包含最大2開頭的10位數;數值計算注意整數數值範圍,記得加轉換符;long資料在賦值時若整數的數值超出int的最大範圍則要在整數後面加上l說明;

浮點型對於float的賦值要在小數後面加f說明;

單純的字符型變量相加(即每個元素都是字元變數(PS.加入整形也是ascii碼相加))等於把各個字元的ascii碼相加;(與字串的加法運算不同!!!字元和字串相加得到的是字串)

 

3.基礎包裝類別

基礎的常用的包裝好的類別有7種(一定注意大小寫!!!):String、Integer、Boolean、Byte、Character、Double、Number ;

 

4.型別轉換:

char、int、double等之間可以用強制轉換的方式轉化,如(int)'a',(char)25;boolean型別變數無法由強制轉換得到

各個變數與各個類別之間的轉換,需要透過呼叫各個物件的方法來實現。如:整形、字符型轉換為String物件,可以使用String.valueOf();

 

5.常數賦值:

全域常數初始化時必須賦值;局部常數初始化時可以不賦值,但是只能賦值一次。

 

6.變數有效範圍:

全域變數分為實例變數和靜態變數(static),靜態變數可以在其他類別中使用類別名稱.變數名的方式使用,實例變數只可在本類中使用。

局部變數只在定義變數的程式碼區塊中有效,即{}兩個大括號之間,從變數申明開始算。

與局部變數同名的全域變量,在局部變數的使用範圍內失效。

 

7.switch與if elseif的區別

兩者可實現相同的功能,但從邏輯上說,if elseif必須對匹配項前面的每一個項目都執行檢查,而switch通過一定的查找辦法去尋找匹配項。在需要檢查的項目較多時,switch效率較高,switch另一個優點是程式碼清晰,但缺點是難以進行複雜操作。

 

8.使用foreach循環方式

使用foreach循環方式可以快速的遍歷數組、物件等,具體方式:for(int x : arr){操作},但需要注意foreach形式無法將資料寫入

 

9.String物件常用方法記錄(依個人理解的常用程度排序,參數和具體用法未說明,下同)

length()取得字串長度;

equals()判斷字串的內容是否相同,注意,不能直接使用等號比較,使用等號會比較記憶體中的位置! ! ! ! !

replace()字串中的子字串替換;

split(),將字串按給定的符號進行分割,保存在數組中;

toCharArray(),將字串轉換為字元數組;

trim()去除字串前後的空格,注意,不對字串進行更改,而是返回相應副本;

substring()截取字元字串;

toLowerCase(),toUpperCase()進行字串的大小寫轉換;

indexOf(),lastIndexOf()在字串中尋找子字串位置;

charAt()傳回字串中指定位置的字元;

startsWith(),endsWith()判斷字串的開始和結尾是否為指定字串;

compareTo(),按字典順序比較字串;

 

10.Arrays物件常用方法記錄(按個人理解的常用程度排序,參數和具體用法未說明)

Arrays. fill(),填入數組,可用於數組初始化、賦值;

Arrays.sort(),對數組初始化、賦值;

Arrays.sort(),對數組進行排序;

Arrays.copyOf(),Arrays.copyOfRange對數組進行複製;

static關鍵字的使用

具體解析見技術部落格:http://www.cnblogs.com/dolphin0520/p/3799052.html

在使用的時候,如要在類別外部呼叫的方法、變數都需要加上上static限制符,而有static限制符的類別(方法)若需要呼叫其他方法或全域變量,那麼被呼叫的方法和全域變數也必須有static修飾(這是因為非靜態變數必須要建立實例才能被調用)。一般用於不需要建立實例的類別(方法),例如用作工具的類別。

要區分static與權限修飾符的區別,static的目的是,在不建立實例的情況下也可使用static變數和方法,而權限修飾符則規定了該方法與變數的使用範圍。

 

12.Java的集合類別保存資料說明

Arraylist、HashMap等集合類別是java中的一個特色, 但在其中只能保存引用型的數據,不能保存基本資料。即:Integer可以但int不行。

 

13.對於class的權限修飾符說明

對於頂級類別(包內部第一層的類別)來說,只有public修飾符可用,表示可跨包使用該類,若不用public則默認在該套件內可用,一個.java檔案中使用public的類別至多存在一個。對於頂層類別的內部類別,其權限修飾符為private、protected、public與預設。

關於內部類別的權限問題需要深入研究(例如內部類別中存在private變量,需要在外部類別的內部使用該變數等情況),此處暫時跳過。

 

14.判斷一個類別的兩個物件是否相等

除了基礎變量,引用變數(物件)不能使用兩個等號==來判斷值是否相等(一個類別產生的兩個物件是否相等) ,需要使用equals方法。但注意的是,一般使用者定義的類別的equals方法內部都是使用雙等號判斷的,要實現判斷的效果還需要使用者重載equals。 (就是自己寫一個方法判斷)

 

15.基本變數對應的包裝類別中可能常用的方法

Integer

equals(),比較兩個integer物件的值是否相等

byteValue(),intValue (),shortValue(),傳回對應類型的值

toString(),將Integer物件轉換為String物件(toBinaryString()、toHexString()、toOctalString()同理)

Integer.valueOf(),將String物件轉換為Integer物件

Integer.parseInt(),將String物件轉換為int變數。

Boolean

Byte

Character

Character.inUpperCase()、Character.inLowerCase(),判斷是否為大寫、小寫字元

toString(),將字元轉換為字串

Double(Float可以參考Doubel,方法是一樣的)

intValue(),傳回整形變數

toString(),傳回字串

.DoubleueOf. ),將String物件轉換為Double物件

 

總結:需要進行基礎類別的轉換時,可使用toString()轉換成字串,再將字串用各類別的valueOf轉換為所需的類別。

 

16.常用數學計算方法

DecimalFormat類

當中的各個方法對數字進行格式化,得到的是字符串;

Math類

三角函數方法,可進行各類三角函數計算,包括弧度角度互換

指數函數方法,平方、平方根、立方、立方根方法等

取整數方法,向上、向下取整,最近取整

最大值絕對值

隨機數方法(產生0到1之間的任意double型數值)

Random類

nextInt()傳回一個整數、nextLong()傳回一個長整數、nextBoolean()傳回一個布林變數、nextFloat()傳回一個浮點數

 

17.關於方法重寫(不同於重載!!!!)

重寫方法時,可以修改方法的修飾符、傳回值類型(參數類型、個數不可變),大多數情況下父類別中的final方法不可重寫(private final在子類別中不可見,可重寫,是比較特殊的情況)

子類別方法對父類別方法重寫時,子類別方法的修飾符必須比父類別方法的修飾符權限更大;

子類別對父類別方法從重寫入時,若要修改子類別方法中傳回值類型,該類型必須是父類別中同方法傳回值的子類別;

 

18.關於方法重寫與重載的差異

在同一類別中,方法無法重寫,即在一個類別中不能存在兩個相同方法名稱、參數個數、參數類型的方法,在同一個類別中,方法可以重載,即一個類別中允許多個相同的方法名,不同的參數型別、參數個數的方法存在。方法的重寫涉及到父類、子類至少兩個類,若要重寫,不能修改方法的參數型別和數,方法的重載只在一個類中發生,若要重載,必須修改參數類型、個數。所有的父類別中的方法都會在子類別中被繼承,所以父類別與子類別中存在兩個方法名稱相同、參數不同的方法時,可以看作先被繼承,然後被重載。

 

19.抽象類別(abstract關鍵字)

抽象類別只能被繼承,沒有其他任何功能,而抽象類別中的抽象方法在被繼承後必須要進行重寫,抽象方法沒有方法體。若類別中含有抽象方法,則該類別必定為抽象類別。

 

20.介面

介面(interface)的權限修飾符(待解決),介面中的方法均為public且不含方法體需要繼承後重寫,

先不管原理談應用,介面一般使用public修飾,不加public的介面只能在同套件中的不同類別中使用(依然預設的protected),加上public的介面才能跨套件使用,但是只有與.java名稱相同的interface才能使用public 。而在介面內部,除去static、default方法,其他方法均不能有方法體。

 

21.物件的轉變

物件轉型分為向轉型和向下轉型,子類別物件可以一直向上轉型(會自動轉換),父類物件的轉型要考慮其是否屬於子類別物件才能轉(需要強制轉型)。如:A a = new B();,B為A的子類,則最終a當作A類型的對象,但本質上仍是B類,父類類型的引用可以調用父類中定義的所有屬性和方法,對於只存在與子類別中的方法和屬性它就望塵莫及了,即a可以調用B類型中從A類繼承到的方法和屬性,但不能調用B類中獨有的方法和屬性。在方法呼叫時同理,假設C繼承於B繼承於A,則C型別物件c在呼叫類別中某一方法時,會在可用範圍內(可用範圍參考上一句)先找出以C型別為參數的方法重載版本,若不存在,則向上轉型為B並尋找B類型為參數的方法重載版本,直至找到可執行的方法重載版本,若不存在,則無法調用,會報錯。

 

22.關於類別包

在實際開發中,應為所有的類別指定類別包,包的聲明必須是文件中第一行非註解程式碼,所有類別包均為小寫字母構成。導入包時,若使用*​​來導入包中的所有類,則不會導入子類,如需要導入子類還需要重新import。使用import static 可以導入類別當中的靜態成員。

 

23.關於常數

final定義的常數分類局部常數和全局常數,局部常數在其生命週期內不能重定義,但是需要的話可在每次創建的時候都可以賦新值,全局常數一般使用public static final,在程式運行期間,全域常數的值都不會被改變。

 

PS:

多態沒能理解透徹,待深入

介面的權限修飾符未能理解透徹,待深入

JDK與JRE的區別:

JRE是所有JAVARERE是所有JAVA的區別環境,任何JAVA程式的運作都依賴JRE,目前從JAVA官網選擇安裝JAVA即安裝的是JRE。

JDK是為開發人員所提供的工具包,對開發人員來說屬於必備項,一般在JDK本身包含JRE,但是一般JDK還會再安裝一套JRE,這套JRE被成為公共JRE(如圖),JDK需要從oracle的官網下載。

目前的主流編輯器,如eclipse會找到JRE和JDK的位置,當然也可以再進行手工修改。

 

JAVA所需環境變數說明:

PATH:(必需)指定編譯、執行java程式是所需的程式所在路徑,一般在jdk安裝目錄(注意是JDK!!!和JRE是不一樣的程式所在路徑,一般在jdk安裝目錄(注意是JDK!!!和JRE是不一樣的!目前常用的設定辦法是先定義一個JAVA_HOME變量,在PATH中引用JAVA_HOME:%JAVA_HOME%/bin;

CLASSPATH:(之前必需,現在非必需)設定Classpath的目的,在於告訴Java執行環境,在哪些目錄下可以找到您要執行的Java程式(.class檔案),現在已經不需要;

JAVA_HOME:(理論上非必需,實際必需)設定一個變數存放java程式運行所需的程式所在路徑,方便在其他地方進行引用(不用再輸入一長串路徑,直接使用JAVA_HOME變數即可),同時,現在不少軟體也會直接呼叫JAVA_HOME變量,不設定容易出錯。

 

1.java主要結構闡述

java中每一個.java文件都是一個類,一個java工程由許許多多的.java文件組成,也就是由java類組成。一般而言一個java類中主要的結構如下:

1.包申明:java類在本工程中屬於哪個包,即在工程中的位置;

2.導入的包:外部庫,工具;

3.公共類別(或介面)定義:類別名稱與java檔案的名稱必須相同,類別中內容即java檔案的主要內容

4.其他:其他類別的定義和介面定義。

java專案中,由外至內分別為:source資料夾、套件(package)、類別(.java,就是上面bb了半天的那個東西),經過編譯後會將編譯後的類別(.class)放在與source資料夾同級的bin資料夾中。不同的source floder 中的package可以同名,相同的package中的類別不能同名(在兩個不同source floder中的相同package中也不行)

 

2.基本資料類型

基本資料類型8中:整數4種、浮點2種、字元、布林;

btye最大128-1;short最大32768-1;int包含最大2開頭的10位數;數值計算注意整數數值範圍,記得加轉換符;long資料在賦值時若整數的數值超出int的最大範圍則要在整數後面加上l說明;

浮點型對於float的賦值要在小數後面加f說明;

單純的字符型變量相加(即每個元素都是字元變數(PS.加入整形也是ascii碼相加))等於把各個字元的ascii碼相加;(與字串的加法運算不同!!!字元和字串相加得到的是字串)

 

3.基礎包裝類別

基礎的常用的包裝好的類別有7種(一定注意大小寫!!!):String、Integer、Boolean、Byte、Character、Double、Number ;

 

4.型別轉換:

char、int、double等之間可以用強制轉換的方式轉化,如(int)'a',(char)25;boolean型別變數無法由強制轉換得到

各個變數與各個類別之間的轉換,需要透過呼叫各個物件的方法來實現。如:整形、字符型轉換為String物件,可以使用String.valueOf();

 

5.常數賦值:

全域常數初始化時必須賦值;局部常數初始化時可以不賦值,但是只能賦值一次。

 

6.變數有效範圍:

全域變數分為實例變數和靜態變數(static),靜態變數可以在其他類別中使用類別名稱.變數名的方式使用,實例變數只可在本類中使用。

局部變數只在定義變數的程式碼區塊中有效,即{}兩個大括號之間,從變數申明開始算。

與局部變數同名的全域變量,在局部變數的使用範圍內失效。

 

7.switch與if elseif的區別

兩者可實現相同的功能,但從邏輯上說,if elseif必須對匹配項前面的每一個項目都執行檢查,而switch通過一定的查找辦法去尋找匹配項。在需要檢查的項目較多時,switch效率較高,switch另一個優點是程式碼清晰,但缺點是難以進行複雜操作。

 

8.使用foreach循環方式

使用foreach循環方式可以快速的遍歷數組、物件等,具體方式:for(int x : arr){操作},但需要注意foreach形式無法將資料寫入

 

9.String物件常用方法記錄(依個人理解的常用程度排序,參數和具體用法未說明)

length()取得字串長度;

equals()判斷的內容是否相同,字串注意,不能直接使用等號比較,使用等號會比較記憶體中的位置! ! ! ! !

replace()字串中的子字串替換;

split(),將字串按給定的符號進行分割,保存在數組中;

toCharArray(),將字串轉換為字元數組;

trim()去除字串前後的空格,注意,不對字串進行更改,而是返回相應副本;

substring()截取字元字串;

toLowerCase(),toUpperCase()進行字串的大小寫轉換;

indexOf(),lastIndexOf()在字串中尋找子字串位置;

charAt()傳回字串中指定位置的字元;

startsWith(),endsWith()判斷字串的開始和結尾是否為指定字串;

compareTo(),按字典順序比較字串;

 

10.Arrays物件常用方法記錄(按個人理解的常用程度排序,參數和具體用法未說明)

Arrays. fill(),填入數組,可用於陣列初始化、賦值;

Arrays.sort(),對陣列進行排序;

Arrays.copyOf(),Arrays.copyOfRange複製陣列

🎜 

11.注意static關鍵字的使用

具體解析見技術部落格:http://www.cnblogs.com/dolphin0520/p/3799052.html

在使用的時候,如要在類別外部呼叫的方法、變數都需要加上static限制符,而有static限制符的類別(方法)若需要呼叫其他方法或全域變量,那麼被呼叫的方法和全域變數也必須有static修飾(這是因為非靜態變數必須要創建實例才能被呼叫)。一般用於不需要建立實例的類別(方法),例如用作工具的類別。

要區分static與權限修飾符的區別,static的目的是,在不建立實例的情況下也可使用static變數和方法,而權限修飾符則規定了該方法與變數的使用範圍。

 

12.Java的集合類別保存資料說明

Arraylist、HashMap等集合類別是java中的一個特色, 但在其中只能保存引用型的數據,不能保存基本資料。即:Integer可以但int不行。

 

13.對於class的權限修飾符說明

對於頂級類別(包內部第一層的類別)來說,只有public修飾符可用,表示可跨包使用該類,若不用public則默認在該套件內可用,一個.java檔案中使用public的類別至多存在一個。對於頂層類別的內部類別,其權限修飾符為private、protected、public與預設。

關於內部類別的權限問題需要深入研究(例如內部類別中存在private變量,需要在外部類別的內部使用該變數等情況),此處暫時跳過。

 

14.判斷一個類別的兩個物件是否相等

除了基礎變量,引用變數(物件)不能使用兩個等號==來判斷值是否相等(一個類別產生的兩個物件是否相等) ,需要使用equals方法。但注意的是,一般使用者定義的類別的equals方法內部都是使用雙等號判斷的,要實現判斷的效果還需要使用者重載equals。 (就是自己寫一個方法判斷)

 

15.基本變數對應的包裝類別中可能常用的方法

Integer

equals(),比較兩個integer物件的值是否相等

byteValue(),intValue (),shortValue(),傳回對應類型的值

toString(),將Integer物件轉換為String物件(toBinaryString()、toHexString()、toOctalString()同理)

Integer.valueOf(),將String物件轉換為Integer物件

Integer.parseInt(),將String物件轉換為int變數。

Boolean

Byte

Character

Character.inUpperCase()、Character.inLowerCase(),判斷是否為大寫、小寫字元

toString(),將字元轉換為字串

Double(Float可以參考Doubel,方法是一樣的)

intValue(),回傳整形變數

toString(),傳回字串

.DoubleueOf. ),將String物件轉換為Double物件

 

總結:需要進行基礎類別的轉換時,可使用toString()轉換成字串,再將字串用各類別的valueOf轉換為所需的類別。

 

16.常用數學計算方法

DecimalFormat類

當中的各個方法對數字進行格式化,得到的是字符串;

Math類

三角函數方法,可進行各類三角函數計算,包括弧度角度互換

指數函數方法,平方、平方根、立方、立方根方法等

取整數方法,向上、向下取整,最近取整

最大值絕對值

隨機數方法(產生0到1之間的任意double型數值)

Random類

nextInt()傳回一個整數、nextLong()傳回一個長整數、nextBoolean()傳回一個布林變數、nextFloat()傳回一個浮點數

 

17.關於方法重寫(不同於重載!!!!)

重寫方法時,可以修改方法的修飾符、回傳值類型(參數類型、個數不可變),大多數情況下父類別中的final方法不可重寫(private final在子類別中不可見,可重寫,是比較特殊的情況)

子類別方法對父類別方法重寫時,子類別方法的修飾符必須比父類別方法的修飾符權限更大;

子類別對父類別方法從重寫時,若要修改子類別方法中傳回值類型,該類型必須是父類別中同方法傳回值的子類別;

 

18.關於方法重寫與重載的差異

在同一個類別中,方法無法重寫,即在一個類別中不能存在兩個相同方法名稱、參數個數、參數類型的方法,在同一個類別中,方法可以重載,即一個類別中允許多個相同的方法名,不同的參數型別、參數個數的方法存在。方法的重寫涉及到父類、子類至少兩個類,若要重寫,不能修改方法的參數型別和數,方法的重載只在一個類中發生,若要重載,必須修改參數類型、個數。所有的父類別中的方法都會在子類別中被繼承,所以父類別與子類別中存在兩個方法名稱相同、參數不同的方法時,可以看作先被繼承,然後被重載。

 

19.抽象類別(abstract關鍵字)

抽象類別只能被繼承,沒有其他任何功能,而抽象類別中的抽象方法在被繼承後必須要進行重寫,抽象方法沒有方法體。若類別中含有抽象方法,則該類別必定為抽象類別。

 

20.介面

介面(interface)的權限修飾符(待解決),介面中的方法均為public且不含方法體需要繼承後重寫,

先不管原理談應用,介面一般使用public修飾,不加public的介面只能在同套件中的不同類別中使用(依然預設的protected),加上public的介面才能跨套件使用,但是只有與.java名稱相同的interface才能使用public 。而在介面內部,除去static、default方法,其他方法均不能有方法體。

 

21.物件的轉變

物件轉型分為向轉型和向下轉型,子類別物件可以一直向上轉型(會自動轉換),父類物件的轉型要考慮其是否屬於子類別物件才能轉(需要強制轉型)。如:A a = new B();,B為A的子類,則最終a當作A類型的對象,但本質上仍是B類,父類類型的引用可以調用父類中定義的所有屬性和方法,對於只存在與子類別中的方法和屬性它就望塵莫及了,即a可以調用B類型中從A類繼承到的方法和屬性,但不能調用B類中獨有的方法和屬性。在方法呼叫時同理,假設C繼承於B繼承於A,則C型別物件c在呼叫類別中某一方法時,會在可用範圍內(可用範圍參考上一句)先找出以C型別為參數的方法重載版本,若不存在,則向上轉型為B並尋找B類型為參數的方法重載版本,直至找到可執行的方法重載版本,若不存在,則無法調用,會報錯。

 

22.關於類別包

在實際開發中,應為所有的類別指定類別包,包的聲明必須是文件中第一行非註解程式碼,所有類別包均為小寫字母構成。導入包時,若使用*​​來導入包中的所有類,則不會導入子類,如需要導入子類還需要重新import。使用import static 可以導入類別當中的靜態成員。

 

23.關於常數

final定義的常數分類局部常數和全局常數,局部常數在其生命週期內不能重定義,但是需要的話可在每次創建的時候都可以賦新值,全局常數一般使用public static final,在程式運行期間,全域常數的值都不會被改變。

 

PS:

多態沒能理解透徹,待深入

介面的權限修飾符未能理解透徹,待深入


陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn