JAVA:語言+開發環境+應用環境+部署環境
語言
關鍵字+文法要求
環境
jdk: 開發
jre: 運作 JVM+類庫
api:程式接口,封裝好的東西在jre裡面放着。而api提供給你了java開發者已經封裝好的包的用法
JAVA檔案介紹
bin:放着運作程式的指令
db:自帶的小型資料庫
include:java中使用C語言寫的那一部分
jre:自己運作需要的環境
jre-lib-中有個rt.jar 用java指令打出的壓縮包,java所有源碼以字尾class的形式存在,這也是java可以運作的原因
lib:所依賴的包
src:java中jdk的源碼--對應api中的内容
JAVA不同的三個運作平台:
JavaSE 基礎Java,提供最基本文法和關鍵字,以及API
JavaME 移動端開發。但界面是弱勢,鬼鬼,這也太醜了!!!
JavaEE 企業級應用開發。也叫做JavaWEB開發,在基礎文法上加上了一些網絡工具,內建了更多的API
作用方向不同,但語言相同
JDK:
安裝:
1.windows 輕按兩下安裝即可
之後配置路徑:
JAVA_HOME: 安裝路徑 #現在暫時用不着,等安裝tomcat之後會預設尋找JAVA_HOME
PATH: 安裝路徑、bin
PATH = blahblahblah\bin ;
2.linux:
JAVA_HOME=/opt/java/jdk1.8..
PATH=$JAVA_HOME/bin"$PATH
CLASSPATH
jvm:Java虛拟機
XXXX.class 這個檔案計算機都不認識,是以利用JVM将其翻譯成相應的機器語言進行識别
隻要有JVM,class檔案就可以運作
每個作業系統的JVM不同,是以是class跨平台,不是JVM
垃圾資源回收筒GC:專門用來管理記憶體,清理掉沒有引用的記憶體節點
C語言用完記憶體需要手動釋放記憶體,如果忘記記憶體就會一直停留
Java有了垃圾資源回收筒,使用記憶體時隻需要用new申請就可以
利用系統級的線程來控制,專門的算法計算哪個空間不需要,如果計算出不需要的就會自動回收
安全檢查機制:
将class交給虛拟機,會先進行檢測
書寫第一個Java程式
1.建立一個字尾名為.java的檔案Hello.java,
2.vim Hello.java
3.class name
{
程式内容
}
4.将源檔案編譯轉換成.class 位元組碼檔案
5.運作
編譯:javac -X XXXX.java
運作:java XXXX(沒有.class)
編寫時注意中英文符号
類加載器:
***PS: “ . ”代表目前路徑
将需要運作的程式從他原本所在的位置加載到虛拟器記憶體執行
采用雙親委托機制(推卸責任!)進行加載
三個加載器都可以進行加載,也都會執行
編譯時先交給本地類加載器,但是本地類不想加載,就把加載任務交給擴充類加載器,擴充類在推卸給啟動類,啟動類也不想加載,是以就去能加載的目錄中尋找XXX.jar
但是找不到,就下面傳遞給擴充類,擴充類去對應找,如果還找不見就去本地類,此時本地類才會去CLASSPATH查找
有很多分類,将自己可以加載的東西都加載到記憶體
1.啟動類加載器 隻加載jre--lib--rt.jar中的内容
2.擴充類加載器 隻加載jre--lib--ext中的jar包
3.本地類加載器 隻加載CLASS所指定的位置,有時候找不到或者無法加載主類,就是因為CLASSPATH指向錯誤
java -cp XXXX CLASSPATH臨時指向某一目錄
也可以将Hello.class打成一個jar包
Jar -cvf XXX.jar XXX.class
但是需要手動打開jar包,然後手動添加主函數的路徑
打開壓縮包,然後在META-INF中的檔案中添加主函數
運作jar包:java-jar XXX.jar
然後放到jre--lib--ext中
java -verbose可顯示詳細的編譯過程
這三個最重要
4.自定義加載器
...
Java規範
源檔案
public修飾的類名必須要與檔案名一模一樣,包括大小寫
同一個檔案中不允許出現兩個使用public修飾的類
同一個源檔案中允許出現多個class
同一個源檔案中可以在多個類中定義主方法,二期主方法不一定非要定義在用public修飾的類中
Java類的書寫規則
位元組碼驗證
代碼要符合JVM的規範(程式設計規範,文法錯誤)
代碼破壞計算機的系統或者硬體
棧不能溢出(記憶體一定要夠用)
方法的參數類型一定要正确
類型轉換要正确
Java的三大元素
包 package:為了避免命名沖突 可加可不加
定義: package com.briup.day1
class One{}
之後想找到這個class檔案,就要com.briup.day1.One
package 定義之後需要用包名+類名來尋找 java com.briup.day1.PackageTest
javac -d [将編譯後的封包件以及class想放到的目錄]
導包 import 隻要不在同一個包并且也不再Java.lang包下面類的引用都需要加import
one/Hello.class two/Hello.class
one中的Hello的類可導入two中Hello中
import two.* 導入全部
Java.lang 最基本的包,即使不做引入也會将這個包中的内容引入
class
定義類的關鍵字 必須要存在