Java程序運行機制及開發環境


Java既是編譯型語言,又是解釋型語言

java源文件首先需要通過javac編譯生成后綴名為.class的字節碼文件(與平台無關,只面向JVM),然后使用Java虛擬機將字節碼解釋成特定平台上的機器碼運行。

Java虛擬機JVM

不同平台上的JVM不同,但是都提供了相同的接口。

開發Java准備

  1. 下載安裝Java8的JDK,並將jdk的安裝路徑添加到環境變量中。
  2. 開發Java需要安裝JDK,JDK包含Java編譯器(javac命令工具)、Java運行時環境(JRE)、常用的Java類庫等。
  3. JRE包含JVM,還包含類加載器、字節碼校驗器及大量的基礎類庫等環境支持。
  4. 如果只是運行Java程序,可以只安裝JRE。

第一個Java程序

  1. 編寫第一個著名的程序:HelloWorld。
pulic calss HelloWorld
{
	public static void main(String[] args)
    {
    	System.out.println("HelloWorld");
    }
}
  1. 使用javac命令編譯java程序。
    • 命令行輸入cmd,進入Java源文件所在的路徑
    • 輸入如下命令,其中destdir是目標生成路徑
      javac -d destdir HelloWorld.java
      進入destdir路徑下,可以看到已經生成了后綴名為.class的字節碼文件
  2. 使用java命令解釋執行字節碼文件。
    • 運行如下命令執行程序
      java HelloWorld
  3. 分析main()方法
    • JVM需要調用main()方法來調用類,使用public修飾符將main暴露出來
    • JVM通過該類來調用main()方法,沒有該類的對象,用static修飾
    • 返回值給JVM,沒有意義
    • 字符串數組形參,由JVM賦值

Java程序的基本規則

  1. Java是純面向對象的語言,類是Java程序的最小程序單位。
  2. javac可以編譯一個類,而解釋執行一個類則需要以main方法為入口,main方法的寫法是固定的。
  3. Java嚴格區分大小寫,類名首字母大寫,方法名第一個單詞首字母小寫,關鍵字小寫。
  4. 一個java源文件最多只能定義一個public類,因源文件名需要與public類的類名相同。

垃圾回收機制

  1. 顯式進行垃圾回收的缺點
    • 忘記回收導致內存泄漏,降低系統性能
    • 錯誤回收程序核心類庫的內存,導致系統崩潰
  2. Java虛擬機的堆內存用來保存類的對象,JVM的一個超級線程會進行檢測,如果一個對象長時間不被引用GC會釋放其所占用的內存空間,同時進行碎片整理將所占用的堆內存移到堆的一端,整理出新內存分配給其他對象。
  3. 使用GC的優點
    • 提高編程效率
    • 保護程序的完整性和安全性
  4. 使用GC的缺點
    • 垃圾回收在cpu空閑或者內存不足時進行,影響程序性能
  5. GC的特點
    • 只能回收JVM堆內存的內存空間,不能回收物理內存的資源
    • 將對象的引用變量設置為null可以暗示GC回收該對象
    • 使用GC回收對象之前,會先調用可恢復對象的finalize()方法可能將其變成可達狀態。
    • 調用Runtime對象的gc()方法Runtime.getRuntime().gc()或者System.gc()僅僅是建議系統進行垃圾回收,不能精確控制
    • 使用如下命令運行程序顯示每次垃圾回收后的提示信息
      java -verbose:gc Test
    • 平常用的基本是強引用對象,除此之外還有軟引用(SoftReferance,用於對內存敏感的程序中),弱引用(WeakReferance,不管內存強制回收),虛引用(PhantomReferance,只能和引用隊列一起使用跟蹤對象被垃圾回收的狀態)。

使用IDE工具

  1. 下載安裝Eclipse開發工具
  2. 配置自動補全
    Windows-Preferences-Java-Editor-Content Asist,將Auto activation triggers for Java改為“.abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ”即可
  3. 熟悉快捷鍵
    自動導入相關包:Ctrl+Shift+O

使用jar命令

  1. 創建jar包
    jar cvf test.jar test
  2. 查看jar包
    jar tvf test.jar
  3. 解壓縮jar包
    jar xvf test.jar
  4. 更新jar包里的文件
    jar uvf test.jar Filename

發布Java應用程序

  1. 利用Windows批處理,添加如下執行命令
    java package.MainClass
    不顯示命令行窗口用以下命令
    start javaw package.MainClass
  2. 創建可執行jar包
    指定主類的類名作為程序入口
    jar cvfe test.jar package.MainClass test
    運行上面的jar包命令java -jar test.jar或者javaw test.jar

獲得用戶輸入

  1. 給main()方法字符串數組形參賦值
    運行Java程序時在類名后緊跟一個或多個字符串,用空格隔開,則JVM將這些字符串依次賦值給args數組元素
    java test str1 str2 str3
  2. 使用Scanner類從文件、輸入流、字符串中解析數據,它提供了兩個方法:
    • 判斷是否還有下一項基本數據/字符串/一行:hasNextInt()、hasNext()、hasNextLine()
    • 獲取下一個輸入項:nextInt()、next()、nextLine()
    • 默認使用空白符作為分隔符,可以使用useDelimiter("\n")方法自定義分隔符
      下面的示例程序涉及文件輸入,並沒有進行異常處理及文件關閉!
	//獲取鍵盤輸入
	Scanner sc = new Scanner(System.in);
	while (sc.hasNext()) {
		String str = (String) sc.next();
		System.out.println("str");
	}
	
	//獲取文件輸入
	Scanner sca = new Scanner("Test.java");
	//使用回車作為分隔符
	sca.useDelimiter("\n");
	while (sca.hasNext()) {
		String str = (String) sca.next();
		System.out.println("str");
	}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM