1. 程式人生 > >夯實Java基礎系列5:Java檔案和Java包結構

夯實Java基礎系列5:Java檔案和Java包結構

目錄

  • Java中的包概念
    • 包的作用
    • package 的目錄結構
    • 設定 CLASSPATH 系統變數
  • 常用jar包
    • java軟體包的型別
    • dt.jar
    • rt.jar
  • *.java檔案的奧祕
    • *.Java檔案簡介
    • 為什麼一個java原始檔中只能有一個public類?
    • Main方法
    • 外部類的訪問許可權
    • Java包的命名規則
  • 參考文章
  • 微信公眾號
    • Java技術江湖
    • 個人公眾號:黃小斜

- Java類

本系列文章將整理到我在GitHub上的《Java面試指南》倉庫,更多精彩內容請到我的倉庫裡檢視

https://github.com/h2pl/Java-Tutorial

喜歡的話麻煩點下Star哈

文章首發於我的個人部落格:

www.how2playlife.com

本文是微信公眾號【Java技術江湖】的《夯實Java基礎系列博文》其中一篇,本文部分內容來源於網路,為了把本文主題講得清晰透徹,也整合了很多我認為不錯的技術部落格內容,引用其中了一些比較好的部落格文章,如有侵權,請聯絡作者。
該系列博文會告訴你如何從入門到進階,一步步地學習Java基礎知識,並上手進行實戰,接著瞭解每個Java知識點背後的實現原理,更完整地瞭解整個Java技術體系,形成自己的知識框架。為了更好地總結和檢驗你的學習成果,本系列文章也會提供每個知識點對應的面試題以及參考答案。

如果對本系列文章有什麼建議,或者是有什麼疑問的話,也可以關注公眾號【Java技術江湖】聯絡作者,歡迎你參與本系列博文的創作和修訂。

Java中的包概念

Java中的包是封裝一組類,子包和介面的機制。軟體包用於:

防止命名衝突。例如,可以有兩個名稱分別為Employee的類,college.staff.cse.Employee和college.staff.ee.Employee
更輕鬆地搜尋/定位和使用類,介面,列舉和註釋

提供受控訪問:受保護和預設有包級別訪問控制。受保護的成員可以通過同一個包及其子類中的類訪問。預設成員(沒有任何訪問說明符)只能由同一個包中的類訪問。

包可以被視為資料封裝(或資料隱藏)。

我們所需要做的就是將相關類放入包中。之後,我們可以簡單地從現有的軟體包中編寫一個匯入類,並將其用於我們的程式中。一個包是一組相關類的容器,其中一些類可以訪問,並且其他類被儲存用於內部目的。
我們可以在程式中儘可能多地重用包中的現有類。

為了更好地組織類,Java 提供了包機制,用於區別類名的名稱空間。

包的作用

  • 1、把功能相似或相關的類或介面組織在同一個包中,方便類的查詢和使用。
  • 2、如同資料夾一樣,包也採用了樹形目錄的儲存方式。同一個包中的類名字是不同的,不同的包中的類的名字是可以相同的,當同時呼叫兩個不同包中相同類名的類時,應該加上包名加以區別。因此,包可以避免名字衝突。
  • 3、包也限定了訪問許可權,擁有包訪問許可權的類才能訪問某個包中的類。

Java 使用包(package)這種機制是為了防止命名衝突,訪問控制,提供搜尋和定位類(class)、介面、列舉(enumerations)和註釋(annotation)等。

包語句的語法格式為:

package  pkg1[.pkg2[.pkg3…]];

例如,一個Something.java 檔案它的內容

package  net.java.util; public  class  Something{ ... }

那麼它的路徑應該是 net/java/util/Something.java 這樣儲存的。 package(包) 的作用是把不同的 java 程式分類儲存,更方便的被其他 java 程式呼叫。

一個包(package)可以定義為一組相互聯絡的型別(類、介面、列舉和註釋),為這些型別提供訪問保護和名稱空間管理的功能。

以下是一些 Java 中的包:

  • java.lang-打包基礎的類
  • java.io-包含輸入輸出功能的函式

開發者可以自己把一組類和介面等打包,並定義自己的包。而且在實際開發中這樣做是值得提倡的,當你自己完成類的實現之後,將相關的類分組,可以讓其他的程式設計者更容易地確定哪些類、介面、列舉和註釋等是相關的。

由於包建立了新的名稱空間(namespace),所以不會跟其他包中的任何名字產生命名衝突。使用包這種機制,更容易實現訪問控制,並且讓定位相關類更加簡單。

package 的目錄結構

類放在包中會有兩種主要的結果:

  • 包名成為類名的一部分,正如我們前面討論的一樣。
  • 包名必須與相應的位元組碼所在的目錄結構相吻合。

下面是管理你自己 java 中檔案的一種簡單方式:

將類、介面等型別的原始碼放在一個文字中,這個檔案的名字就是這個型別的名字,並以.java作為副檔名。例如:

// 檔名 : Car.java package vehicle; public class Car { // 類實現 }

接下來,把原始檔放在一個目錄中,這個目錄要對應類所在包的名字。

....\vehicle\Car.java

現在,正確的類名和路徑將會是如下樣子:

  • 類名 -> vehicle.Car
  • 路徑名 -> vehicle\Car.java (在 windows 系統中)

通常,一個公司使用它網際網路域名的顛倒形式來作為它的包名.例如:網際網路域名是 runoob.com,所有的包名都以 com.runoob 開頭。包名中的每一個部分對應一個子目錄。

例如:有一個 com.runoob.test 的包,這個包包含一個叫做 Runoob.java 的原始檔,那麼相應的,應該有如下面的一連串子目錄:

....\com\runoob\test\Runoob.java

編譯的時候,編譯器為包中定義的每個類、介面等型別各建立一個不同的輸出檔案,輸出檔案的名字就是這個型別的名字,並加上 .class 作為擴充套件字尾。 例如:

// 檔名: Runoob.java package com.runoob.test; public class Runoob { } class Google { }

現在,我們用-d選項來編譯這個檔案,如下:

$javac -d .  Runoob.java

這樣會像下面這樣放置編譯了的檔案:

.\com\runoob\test\Runoob.class  .\com\runoob\test\Google.class

你可以像下面這樣來匯入所有 \com\runoob\test 中定義的類、介面等:

import com.runoob.test.*;

編譯之後的 .class 檔案應該和 .java 原始檔一樣,它們放置的目錄應該跟包的名字對應起來。但是,並不要求 .class 檔案的路徑跟相應的 .java 的路徑一樣。你可以分開來安排原始碼和類的目錄。


這樣,你可以將你的類目錄分享給其他的程式設計人員,而不用透露自己的原始碼。用這種方法管理原始碼和類檔案可以讓編譯器和java 虛擬機器(JVM)可以找到你程式中使用的所有型別。

類目錄的絕對路徑叫做 class path。設定在系統變數 CLASSPATH 中。編譯器和 java 虛擬機器通過將 package 名字加到 class path 後來構造 .class 檔案的路徑。

一個 class path 可能會包含好幾個路徑,多路徑應該用分隔符分開。預設情況下,編譯器和 JVM 查詢當前目錄。JAR 檔案按包含 Java 平臺相關的類,所以他們的目錄預設放在了 class path 中。

設定 CLASSPATH 系統變數

用下面的命令顯示當前的CLASSPATH變數:

  • Windows 平臺(DOS 命令列下):C:> set CLASSPATH
  • UNIX 平臺(Bourne shell 下):# echo $CLASSPATH

刪除當前CLASSPATH變數內容:

  • Windows 平臺(DOS 命令列下):C:> set CLASSPATH=
  • UNIX 平臺(Bourne shell 下):# unset CLASSPATH; export CLASSPATH

設定CLASSPATH變數:

  • Windows 平臺(DOS 命令列下): C:> set CLASSPATH=C:\users\jack\java\classes
  • UNIX 平臺(Bourne shell 下):# CLASSPATH=/home/jack/java/classes; export CLASSPATH

Java包(package)詳解
java包的作用是為了區別類名的名稱空間  

1、把功能相似或相關的類或介面組織在同一個包中,方便類的查詢和使用。、

2、如同資料夾一樣,包也採用了樹形目錄的儲存方式。同一個包中的類名字是不同的,不同的包中的類的名字是可以相同的,

當同時呼叫兩個不同包中相同類名的類時,應該加上包名加以區別。因此,包可以避免名字衝突。

3、包也限定了訪問許可權,擁有包訪問許可權的類才能訪問某個包中的類。

建立包
建立包的時候,你需要為這個包取一個合適的名字。之後,如果其他的一個原始檔包含了這個包提供的類、介面、列舉或者註釋型別的時候,都必須將這個包的宣告放在這個原始檔的開頭。

包宣告應該在原始檔的第一行,每個原始檔只能有一個包宣告,這個檔案中的每個型別都應用於它。

如果一個原始檔中沒有使用包宣告,那麼其中的類,函式,列舉,註釋等將被放在一個無名的包(unnamed package)中。

例子
讓我們來看一個例子,這個例子建立了一個叫做animals的包。通常使用小寫的字母來命名避免與類、介面名字的衝突。

在 animals 包中加入一個介面(interface):

package animals;
  
interface Animal {
   public void eat();
   public void travel();
}

  接下來,在同一個包中加入該介面的實現:

package animals;
  
/* 檔名 : MammalInt.java */
public class MammalInt implements Animal{
  
   public void eat(){
      System.out.println("Mammal eats");
   }
  
   public void travel(){
      System.out.println("Mammal travels");
   }
  
   public int noOfLegs(){
      return 0;
   }
  
   public static void main(String args[]){
      MammalInt m = new MammalInt();
      m.eat();
      m.travel();
   }
}

import 關鍵字
為了能夠使用某一個包的成員,我們需要在 Java 程式中明確匯入該包。使用 "import" 語句可完成此功能。

在 java 原始檔中 import 語句應位於 package 語句之後,所有類的定義之前,可以沒有,也可以有多條,其語法格式為:

1
import package1[.package2…].(classname|*);
  如果在一個包中,一個類想要使用本包中的另一個類,那麼該包名可以省略。

通常,一個公司使用它網際網路域名的顛倒形式來作為它的包名.例如:網際網路域名是 runoob.com,所有的包名都以 com.runoob 開頭。包名中的每一個部分對應一個子目錄。

例如:有一個 com.runoob.test 的包,這個包包含一個叫做 Runoob.java 的原始檔,那麼相應的,應該有如下面的一連串子目錄:

1
....\com\runoob\test\Runoob.java

常用jar包

java軟體包的型別

軟體包的型別有內建的軟體包和使用者定義的軟體包內建軟體包
這些軟體包由大量的類組成,這些類是Java API的一部分。一些常用的內建軟體包有:

1)java.lang:包含語言支援類(例如分類,用於定義基本資料型別,數學運算)。該軟體包會自動匯入。

2) java.io:包含分類以支援輸入/輸出操作。

3) java.util:包含實現像連結列表,字典和支援等資料結構的實用類; 用於日期/時間操作。

4) java.applet:包含用於建立Applets的類。

5) java.awt:包含用於實現圖形使用者介面元件的類(如按鈕,選單等)。

6) java.net:包含支援網路操作的類。

dt.jar

SUN對於dt.jar的定義:Also includes dt.jar, the DesignTime archive of BeanInfo files that tell interactive development environments (IDE's) how to display the Java components and how to let the developer customize them for the application。

中文翻譯過來就是:dt.jar是BeanInfo檔案的DesignTime歸檔,BeanInfo檔案用來告訴整合開發環境(IDE)如何顯示Java元件還有如何讓開發人員根據應用程式自定義它們。這段文字中提到了幾個關鍵字:DesignTime,BeanInfo,IDE,Java components。其實dt.jar就是DesignTime Archive的縮寫。那麼何為DesignTime。

    何為DesignTime?翻譯過來就是設計時。其實瞭解JavaBean的人都知道design time和runtime(執行時)這兩個術語的含義。設計時(DesignTIme)是指在開發環境中通過新增控制元件,設定控制元件或窗體屬性等方法,建立應用程式的時間。
  
    與此相對應的執行時(RunTIme)是指可以象使用者那樣與應用程式互動作用的時間。那麼現在再理解一下上面的翻譯,其實dt.jar包含了swing控制元件中的BeanInfo,而IDE的GUI Designer需要這些資訊。那讓我們看一下dt.jar中到底有什麼?下面是一張dt.jar下面的內容截圖:

    從上面的截圖可以看出,dt.jar中全部是Swing元件的BeanInfo。那麼到底什麼是BeanInfo呢?

    何為BeanInfo?JavaBean和BeanInfo有很大的關係。Sun所制定的JavaBean規範,很大程度上是為IDE準備的——它讓IDE能夠以視覺化的方式設定JavaBean的屬性。如果在IDE中開發一個視覺化應用程式,我們需要通過屬性設定的方式對組成應用的各種元件進行定製,IDE通過屬性編輯器讓開發人員使用視覺化的方式設定元件的屬性。

    一般的IDE都支援JavaBean規範所定義的屬性編輯器,當元件開發商釋出一個元件時,它往往將元件對應的屬性編輯器捆綁發行,這樣開發者就可以在IDE環境下方便地利用屬性編輯器對元件進行定製工作。JavaBean規範通過java.beans.PropertyEditor定義了設定JavaBean屬性的方法,通過BeanInfo描述了JavaBean哪些屬性是可定製的,此外還描述了可定製屬性與PropertyEditor的對應關係。

    BeanInfo與JavaBean之間的對應關係,通過兩者之間規範的命名確立:對應JavaBean的BeanInfo採用如下的命名規範:

    dt.jar裡面主要是swing元件的BeanInfo。IDE根據這些BeanInfo顯示這些元件以及開發人員如何定製他們。

rt.jar

rt.jar是runtime的歸檔。Java基礎類庫,也就是Java doc裡面看到的所有的類的class檔案。

 rt.jar 預設就在Root Classloader的載入路徑裡面的,而在Claspath配置該變數是不需要的;同時jre/lib目錄下的其他jar:jce.jar、jsse.jar、charsets.jar、resources.jar都在Root Classloader中。

*.java檔案的奧祕

*.Java檔案簡介

.java檔案你可以認為只是一個文字檔案, 這個檔案即是用java語言寫成的程式,或者說任務的程式碼塊。

.class檔案本質上是一種二進位制檔案, 它一般是由.java檔案通過 javac這個命令(jdk本身提供的工具)生成的一個檔案, 而這個檔案可以由jvm(java虛擬機器)裝載(類裝載),然後進java解釋執行, 這也就是執行你的程式。

你也可以這樣比較一下:
.java與 .c , .cpp, .asm等等檔案,本質 上一樣的, 只是用一種 語言來描述你要怎麼去完成一件事(一個任務), 而這種語言 計算機本身 是沒有辦法知道是什麼含義的, 它面向的只是程式設計師本身, 程式設計師可以通過 語言本身(語法) 來描述或組織這個任務,這也就 是所謂的程式設計。

最後你當然是需要計算機按照你的意圖來執行你的程式, 這時候就先得有一個翻譯(編譯, 彙編, 連結等等複雜的過程)把它變成機器可理解的指令(這就是大家說的機器語言,機器語言本身也是一種程式語言,只是程式很難寫,很難讀懂,基本上沒有辦法維護)。

這裡的.class檔案在計算的體系結構中本質上對應的是一種機器語言(而這裡的機器叫作JVM),所以JVM本身是可以直接執行這裡的.class檔案。所以 你可以進一步地認為,.java與.class與其它的程式設計語法一樣,它們都是程式設計師用來描述自己的任務的一種語言,只是它們面向的物件不一樣,而計算機本身只能識別它自已定義的那些指令什麼的(再次強調,這裡的計算機本身沒有那麼嚴格的定義)

In short:

.java是Java的原始檔字尾,裡面存放程式設計師編寫的功能程式碼。

.class檔案是位元組碼檔案,由.java原始檔通過javac命令編譯後生成的檔案。是可以執行在任何支援Java虛擬機器的硬體平臺和作業系統上的二進位制檔案。

.class檔案並不本地的可執行程式。Java虛擬機器就是去執行.class檔案從而實現程式的執行。

為什麼一個java原始檔中只能有一個public類?

  在java程式設計思想(第四版)一書中有這樣3段話(6.4 類的訪問許可權):

  1.每個編譯單元(檔案)都只能有一個public類,這表示,每個編譯單元都有單一的公共介面,用public類來表現。該介面可以按要求包含眾多的支援包訪問許可權的類。如果在某個編譯單元內有一個以上的public類,編譯器就會給出錯誤資訊。

  2.public類的名稱必須完全與含有該編譯單元的檔名相同,包含大小寫。如果不匹配,同樣將得到編譯錯誤。

  3.雖然不是很常用,但編譯單元內完全不帶public類也是可能的。在這種情況下,可以隨意對檔案命名。

總結相關的幾個問題:

1、一個”.java”原始檔中是否可以包括多個類(不是內部類)?有什麼限制?

  答:可以有多個類,但只能有一個public的類,並且public的類名必須與檔名相一致。

2、為什麼一個檔案中只能有一個public的類

  答:編譯器在編譯時,針對一個java原始碼檔案(也稱為“編譯單元”)只會接受一個public類。否則報錯。

3、在java檔案中是否可以沒有public類

  答:public類不是必須的,java檔案中可以沒有public類。

4、為什麼這個public的類的類名必須和檔名相同

  答: 是為了方便虛擬機器在相應的路徑中找到相應的類所對應的位元組碼檔案。

Main方法

主函式:是一個特殊的函式,作為程式的入口,可以被JVM呼叫

主函式的定義:

public:代表著該函式訪問許可權是最大的

static:代表主函式隨著類的載入就已經存在了

void:主函式沒有具體的返回值

main:不是關鍵字,但是一個特殊的單詞,能夠被JVM識別

(String[] args):函式的引數,引數型別是一個數組,該陣列中的元素師字串,字串陣列。main(String[] args) 字串陣列的 此時空陣列的長度是0,但也可以在 執行的時候向其中傳入引數。

主函式時固定格式的,JVM識別

主函式可以被過載,但是JVM只識別main(String[] args),其他都是作為一般函式。這裡面的args知識陣列變數可以更改,其他都不能更改。

一個java檔案中可以包含很多個類,每個類中有且僅有一個主函式,但是每個java檔案中可以包含多個主函式,在執行時,需要指定JVM入口是哪個。例如一個類的主函式可以呼叫另一個類的主函式。不一定會使用public類的主函式。

外部類的訪問許可權

外部類只能用public和default修飾。

為什麼要對外部類或類做修飾呢?

1.存在包概念:public 和 default 能區分這個外部類能對不同包作一個劃分 (default修飾的類,其他包中引入不了這個類,public修飾的類才能被import)

2.protected是包內可見並且子類可見,但是當一個外部類想要繼承一個protected修飾的非同包類時,壓根找不到這個類,更別提幾層了

3.private修飾的外部類,其他任何外部類都無法匯入它。

//Java中的檔名要和public修飾的類名相同,否則會報錯
//如果沒有public修飾的類,則檔案可以隨意命名
public class Java中的類檔案 {

}

//非公共開類的訪問許可權預設是包訪問許可權,不能用private和protected
//一個外部類的訪問許可權只有兩種,一種是包內可見,一種是包外可見。
//如果用private修飾,其他類根本無法看到這個類,也就沒有意義了。
//如果用protected,雖然也是包內可見,但是如果有子類想要繼承該類但是不同包時,
//壓根找不到這個類,也不可能繼承它了,所以乾脆用default代替。
class A{

}

Java包的命名規則

以 java.* 開頭的是Java的核心包,所有程式都會使用這些包中的類;

以 javax.* 開頭的是擴充套件包,x 是 extension 的意思,也就是擴充套件。雖然 javax.* 是對 java.* 的優化和擴充套件,但是由於 javax.* 使用的越來越多,很多程式都依賴於 javax.,所以 javax. 也是核心的一部分了,也隨JDK一起釋出。

以 org.* 開頭的是各個機構或組織釋出的包,因為這些組織很有影響力,它們的程式碼質量很高,所以也將它們開發的部分常用的類隨JDK一起釋出。

在包的命名方面,為了防止重名,有一個慣例:大家都以自己域名的倒寫形式作為開頭來為自己開發的包命名,例如百度釋出的包會以 com.baidu.* 開頭,w3c組織釋出的包會以 org.w3c.* 開頭,微學苑釋出的包會以 net.weixueyuan.* 開頭……

組織機構的域名字尾一般為 org,公司的域名字尾一般為 com,可以認為 org.* 開頭的包為非盈利組織機構釋出的包,它們一般是開源的,可以免費使用在自己的產品中,不用考慮侵權問題,而以 com.* 開頭的包往往由盈利性的公司釋出,可能會有版權問題,使用時要注意。

參考文章

https://www.cnblogs.com/ryanzheng/p/8465701.html
https://blog.csdn.net/fuhanghang/article/details/84102404
https://www.runoob.com/java/java-package.html
https://www.breakyizhan.com/java/4260.html
https://blog.csdn.net/qq_36626914/article/details/80627454

微信公眾號

Java技術江湖

如果大家想要實時關注我更新的文章以及分享的乾貨的話,可以關注我的公眾號【Java技術江湖】一位阿里 Java 工程師的技術小站,作者黃小斜,專注 Java 相關技術:SSM、SpringBoot、MySQL、分散式、中介軟體、叢集、Linux、網路、多執行緒,偶爾講點Docker、ELK,同時也分享技術乾貨和學習經驗,致力於Java全棧開發!

Java工程師必備學習資源: 一些Java工程師常用學習資源,關注公眾號後,後臺回覆關鍵字 “Java” 即可免費無套路獲取。

個人公眾號:黃小斜

作者是 985 碩士,螞蟻金服 JAVA 工程師,專注於 JAVA 後端技術棧:SpringBoot、MySQL、分散式、中介軟體、微服務,同時也懂點投資理財,偶爾講點演算法和計算機理論基礎,堅持學習和寫作,相信終身學習的力量!

程式設計師3T技術學習資源: 一些程式設計師學習技術的資源大禮包,關注公眾號後,後臺回覆關鍵字 “資料” 即可免費無套路獲取。

相關推薦

夯實Java基礎系列5Java檔案Java結構

目錄 Java中的包概念 包的作用 package 的目錄結構 設定 CLASSPATH 系統變數 常用jar包 java軟體包的型別 dt.jar rt.jar *.java檔案的奧祕 *.Java檔案簡介 為什麼一個java原始檔中只能有一個public類? Main方法 外部類的訪問許可權

Java基礎系列5Java程式碼的執行順序

該系列博文會告訴你如何從入門到進階,一步步地學習Java基礎知識,並上手進行實戰,接著瞭解每個Java知識點背後的實現原理,更完整地瞭解整個Java技術體系,形成自己的知識框架。   一、構造方法 構造方法(或建構函式)是類的一種特殊方法,用來初始化類的一個新的物件。Java 中的每個類都

Java基礎系列16使用JSONObjectJSONArray解析構造json字串

轉自:https://www.zifangsky.cn/561.html 一 介紹 在Java開發中,我們通常需要進行XML文件或JSON字串的構造和解析。當然在Java Web開發中有一些第三方外掛是可以自動完成Java物件和json之間的轉換的,比

夯實Java基礎系列4一文了解final關鍵字的特性、使用方法,以及實現原理

目錄 final使用 final變數 final修飾基本資料型別變數和引用 final類 final關鍵字的知識點 final關鍵字的最佳實踐 final的用法 關於空白final final記憶體分配 使用final修飾方法會提高速度和效率嗎 使用final修飾變數會讓變數的值不能被改變嗎; 如何保

夯實Java基礎系列6一文搞懂抽象類介面,從基礎到面試題,揭祕其本質區別!

目錄 抽象類介紹 為什麼要用抽象類 一個抽象類小故事 一個抽象類小遊戲 介面介紹 介面與類相似點: 介面與類的區別: 介面特性 抽象類和介面的區別 介面的使用: 介面最佳實踐:設計模式中的工廠模式 介面與抽象類的本質區別是什麼? 基本語法區別 設計思想區別 如何回答面試題:介面和抽象類的區別?

夯實Java基礎系列7一文讀懂Java 程式碼塊執行順序

目錄 Java中的構造方法 構造方法簡介 構造方法例項 例 1 例 2 Java中的幾種構造方法詳解 普通構造方法 預設構造方法 過載構造方法 java子類構造方法呼叫父類構造方法 Java中的程式碼塊簡介 Java程式碼塊使用 區域性程式碼塊 構造程式碼塊 靜態程式碼塊 Java程式碼塊、

夯實Java基礎系列9深入理解Class類Object類

目錄 Java中Class類及用法 Class類原理 如何獲得一個Class類物件 使用Class類的物件來生成目標類的例項 Object類 類構造器public Object(); registerNatives()方法; Clone()方法實現淺拷貝 getClass()方法 equals()方法

夯實Java基礎系列10深入理解Java中的異常體系

目錄 為什麼要使用異常 異常基本定義 異常體系 初識異常 異常和錯誤 異常的處理方式 "不負責任"的throws 糾結的finally throw : JRE也使用的關鍵字 異常呼叫鏈 自定義異常 異常的注意事項 當finally遇上return JAVA異常常見面試題 參考文章 微信公眾號 Java技術

夯實Java基礎系列11深入理解Java中的回撥機制

目錄 模組間的呼叫 多執行緒中的“回撥” Java回撥機制實戰 例項一 : 同步呼叫 例項二:由淺入深 例項三:Tom做題 參考文章

夯實Java基礎系列12深入理解Java中的反射機制

本系列文章將整理到我在GitHub上的《Java面試指南》倉庫,更多精彩內容請到我的倉庫裡檢視 https://github.com/h2pl/Java-Tutorial 喜歡的話麻煩點下Star哈 文章首發於我的個人部落格: www.how2playlife.com 列舉(enum)型別是Java

夯實Java基礎系列19一文搞懂Java集合類框架,以及常見面試題

本系列文章將整理到我在GitHub上的《Java面試指南》倉庫,更多精彩內容請到我的倉庫裡檢視 https://github.com/h2pl/Java-Tutorial 喜歡的話麻煩點下Star哈 文章首發於我的個人部落格: www.how2playlife.com 本文參考 https://ww

夯實Java基礎系列21Java8新特性終極指南

本系列文章將整理到我在GitHub上的《Java面試指南》倉庫,更多精彩內容請到我的倉庫裡檢視 https://github.com/h2pl/Java-Tutorial 喜歡的話麻煩點下Star哈 文章首發於我的個人部落格: www.how2playlife.com 這是一個Java8新增特性的總

夯實Java基礎系列22一文讀懂Java序列化反序列化

本系列文章將整理到我在GitHub上的《Java面試指南》倉庫,更多精彩內容請到我的倉庫裡檢視 https://github.com/h2pl/Java-Tutorial 喜歡的話麻煩點下Star哈 文章首發於我的個人部落格: www.how2playlife.com 本文參考 http://www

夯實Java基礎系列23一文讀懂繼承、封裝、多型的底層實現原理

本系列文章將整理到我在GitHub上的《Java面試指南》倉庫,更多精彩內容請到我的倉庫裡檢視 https://github.com/h2pl/Java-Tutorial 喜歡的話麻煩點下Star哈 文章首發於我的個人部落格: www.how2playlife.com 從JVM結構開始談多型 Jav

Java基礎_3.5簡單Java

inf 簡單 字符串 stat 被調用 name屬性 職位 void 類的定義 簡單Java類 簡單Java類是一種在實際開發之中使用最多的類的定義形式,在簡單Java類中包含有類、對象、構造方法、private封裝等核心概念的使用,而對於簡單Java類首先給出如下的基本開

Java基礎系列1Java面向物件

該系列博文會告訴你如何從入門到進階,一步步地學習Java基礎知識,並上手進行實戰,接著瞭解每個Java知識點背後的實現原理,更完整地瞭解整個Java技術體系,形成自己的知識框架。   概述: Java是面向物件的程式設計語言,Java語言提供了定義類、成員變數、方法等最基本的功能。類可被認為是一種自

Java基礎系列4抽象類與介面的前世今生

該系列博文會告訴你如何從入門到進階,一步步地學習Java基礎知識,並上手進行實戰,接著瞭解每個Java知識點背後的實現原理,更完整地瞭解整個Java技術體系,形成自己的知識框架。   1、抽象類:   當編寫一個類時,常常會為該類定義一些方法,這些方法用以描述該類的行為方式,那麼這些方法都

Java基礎系列6深入理解Java異常體系

該系列博文會告訴你如何從入門到進階,一步步地學習Java基礎知識,並上手進行實戰,接著瞭解每個Java知識點背後的實現原理,更完整地瞭解整個Java技術體系,形成自己的知識框架。   前言: Java的基本理念是“結構不佳的程式碼不能執行”。 “異常”這個詞有“我對此感到意外”的意思。問題出現了,你

java基礎之十三Abstract類方法

.get 引用 ava ESS 實現 print student 通過 bst 這篇介紹Java中抽象類和抽象方法,用關鍵字abstract表示抽象,是一個可以修飾類和方法的關鍵字。如果類名前面用abstract修飾,這個類就是抽象類。如果方法名稱前面有abstract修

go基礎系列(5)陣列

瞭解Python、Perl、JavaScript的人想必都知道它們的陣列是動態的,可以隨需求自動增大陣列長度。但Go中的陣列是固定長度的,陣列一經宣告,就無法擴大、縮減陣列的長度。但Go中也有類似的動態"陣列",稱為slice資料結構,在下一篇文章會詳細解釋它。 Go中的陣列是slice和map兩種資料型別的