簡介:
java的安裝配置:
1,java 的下載下傳:SUN公司的java 已經被oracle公司收購。
: http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
Java SE Development Kit 8u172部分 勾選Accept License Agreement
然後選中所需要版本進行下載下傳。
2,安裝jdk ,然後安裝jre
注意:安裝目錄不要有中文,不要有空格。
3,配置環境變量:
window : 1.1:建立JAVA_HOME = jdk安裝目錄
1.2:建立classpath:.
1.3:修改path : 在path的最前面添加java的工具路徑,
%JAVA_HOME%/bin;
ubuntu : 在登陸使用者的家目錄下面:
配置環境變量(檔案: .bashrc 這檔案的最後一行開始配置)
export JAVA_HOME=/home/briup/jdk/jdk1.8.0_172
export CLASSPATH=. //從目前目錄下找要運作的.class檔案
export PATH=$JAVA_HOME/bin:$PATH
配置完了之後,需求讓檔案立刻生效: source .bashrc
mac : 請參考 https://www.cnblogs.com/dingzhijie/p/7016397.html
第一代 : 機器語言
0101 --> 計算機底層能識别
可以操作計算機
但是可讀性不好
第二代 : 彙編語言
使用指令代替 0101 機器碼
第三代:程式設計語言:
面向對象程式設計語言
[以對象為最小機關進行程式設計]
java C C++ C# Py js
程式設計語言:
主要完成什麼功能?
[使用程式設計語言操作計算機處理資料,
利用計算機的快速運算能力,
解決一些實際問題]
重點 : 處理資料
java :
java程式設計語言:
資料結構:資料在記憶體中怎麼存放
二叉樹,棧和隊列,連結清單,數組,hash表
算法 :處理資料時的最優解決方案
時間複雜度
記憶體 :開辟記憶體空間
銷毀記憶體空間
java = javaSE + javaEE + javaME
corejava : 桌面程式
類庫
javaEE:
操作資料庫:JPA javaEE規範
Hibernate
springDataJpa
...
javaME:
移動端
java 是一個平台 :
平台: 是在程式運作的硬體或軟體環境,大多數平台可以被描述為作業系統和底層硬體的組合
流行的平台: window...Mac OS
java平台有兩個元件:
java虛拟機 和 java應用程式接口
java 可以做什麼?
javaSe 桌面應用
javaEE 企業級應用開發
一套規範,
用來解決企業級開發遇到的問題
javaME 手機開發
使用:
1,安裝JDK :java develpment kit
jdk = jre + kit(tool)+ API
jre 包括 jvm
類庫,jre,jvm虛拟機,解析程式
2,jre : java runtime environment
3,SDK : software development kit 軟體開發包 函數庫或者工具
普通編譯:c c++
把源代碼 轉化 為機器能識别的機器碼
javac編譯:
把源代碼 轉化 為位元組碼 .class檔案
java運作:
位元組碼-->jvm-->機器碼-->底層運作
bin : 存放可執行檔案
javac : 編譯.java檔案 變成.class檔案
cmd : javac Hello.java
java : 運作.class檔案
cmd : java Hello
javadoc:生成java文檔
javadoc HelloWorld.java
jar : 把 .class 檔案 變成jar包。
jar -cvf hello.jar HelloWorld.class
db : java提供的資料庫
include : C語言的頭檔案内容
jre : java 的運作環境
lib : java 所用的基本jar包
簡單性:面向對象
跨平台:通過jvm
多線程:同時開啟多個任務;其他語言的多線程一般是系統級别的,java的多線程是語言級别的
線程 : 一個程序下 其他多個任務同時完成
程序 : 一個應用 運作 會在記憶體中開辟一塊獨立的記憶體空間
動态編譯:在一個項目中,如果需要修改一個java檔案的話,那麼就修改這一個檔案就行了,其他的java檔案不需要動
記憶體管理方案:gc:垃圾回收機制:堆中的記憶體
如果被引用數為0,就是垃圾
先進行一次次标記,一定時間後進行處理
java中有一個專門負責JVM中的垃圾釋放的線程
java代碼:
System.gc(); //可以手動代碼删除垃圾,但并不能保證系統真的去做這件事
java.lang.System.gc();
android系統,就時java寫的,垃圾處理機制也一樣,是以會慢慢變卡,因為不一定真的會處理垃圾
注意:垃圾回收有自己的算法,我們是不能控制垃圾回收機制的,雖然有和垃圾回收相關的方法:java.lang.System.gc() java.lang.Runtime.gc(),但是還是無法控制垃圾回收機制
java代碼必須寫在方法中,方法必須寫在類中,有主方法的類是可以運作的
類{
方法{
int a = 10;
}
}
java代碼的類加載機制
把Hello.class位元組碼檔案中Hello類加載到記憶體的過程
java Hello 就會觸發java類加載
類加載:雙親委托機制:本地對于請求先交給擴充類,擴充類再将該請求交給啟動類,啟動類選擇處理或下發給擴充類,擴充類選擇處理或下發給本地類,最後本地類進行處理
(先當于一個優先級問題 : 啟動類>拓展類>本地類)
(為了避免類的重複加載)
啟動類加載器:老子(孔子爹)
加載/jre/lib/rt.jar中的所有類
擴充類加載器:孔子(孔融爹)
/jdk/lib/ext/*.jar
本地類加載器:孔融
classpath: . (.代表目前)
什麼時候觸發類加載?
java Hello
雙親委托機制加載類的流程:
1,執行java HelloWord 指令時候開始類加載(得到加載類的指令)
2,本地類加載器接到 加載HelloWorld類的指令,但是不做處理,回報給上級 擴充類加載器
3,擴充類加載器得到 加載HelloWorld類的指令,但是也不做處理,回報給上級 啟動類加載
4,啟動類加載器得到 加載HelloWorld類的指令,直接處理,進行類加載。加載rt.jar中的類,但是沒有加載到HelloWorl的類,接着啟動類加載器又把加載 HelloWorld類的指令 向下交給擴充類加載器進行完成
5,擴充類加載器 得到上級配置設定的任務:加載HelloWorld類,立刻加載jre/lib/ext/*.jar,但是也沒有加載到HelloWorl的類,接着 擴充類加載器又把加載HelloWorld類的指令 向下交給本地類加載器進行完成。
6,本地類加載器 得到上級配置設定的任務:加載HelloWorld類,立刻執行加載ClassPath下的類,如果加載到了HelloWorld類 調用main方法執行,如果沒有加載到HelloWorld類就報異常,ClassNotFindException 類找不到。
jar -cvf a.jar Hello.class
mv /home/briup/briup/ch1/a.jar /home/opt/jdk1.7.0_05/jre/lib/ext
cd /home/opt/jdk1.7.0_05/jre/lib/ext
java Hello
java中的頂級元素(頂級關鍵字)
class :目前是一個類
一個源檔案.java隻能有一個public修飾的類,并且類名要與檔案名相同
一個源檔案.java可以有多個class
但是隻能有一個class被public修飾