天天看點

core java--day1(在linux環境下)(安裝配置,java簡介,編譯運作指令,jdk包中相關目錄介紹,類加載機制)簡介:

簡介:

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修飾