工欲善其事,必先利其器。
不過對于剛剛入門的菜鳥來說,最好的編輯器還是使用記事本。
原因不外乎是熟悉語法結構,而不是使用IDE自動生成。
java 體系:
J2SE? 桌面應用的開發? JAVA SE? (接下來學習的目標)
J2EE? 企業級開發? ? ? JAVA EE
J2ME? 手機應用的開發? JAVA ME
SDK? software development kit? 軟件開發包 函數庫或者工具等
JDK? java development kit? 是面向開發人員的,java開發工具
JRE? java runtime enviroment java運行環境,是面向應用程序使用者的
API application program interface 應用程序編程接口
配置環境變量:
JAVA_HOME? 值放Jdk的地址
PATH? 執行命令都從PATH中找? win7是最前面的先找? win10是最下面的先找? %JAVA_HOME%\bin? 好處:JAVA_HOME 變了就變了
CLASSPATH 運行java程序的時候查找對應的class
特點:jvm像鞋? Java就是腳? 這就是跨平臺性? 一次編寫 到處運行
gc
垃圾回收器:java中有一個線程,專門負責JVM中垃圾內存的釋放
垃圾:沒有引用的內存節點
垃圾回收的算法
注意:垃圾回收有自己的算法,我們是不能控制垃圾回收機制的,雖然有和垃圾回收相關的方法:java.lang.System.gc()? java.lang.Runtime.gc(),但是還是無法控制垃圾回收機制
在chap01下面建一個文件HelloWorld.java
文件內容如下:
public class HelloWorld{
public static void main(String[] args){
System.out.println("hello world");
}
}
寫完后保存,然后到終端里面編譯HelloWorld.java
注意路徑:自己的當前位置和HelloWorld.java文件所在的位置是不是一致
javac HelloWorld.java
編譯完了之后,會在當前目錄下,生成一個文件叫HelloWorld.class
最后我們運行的文件就是這個HelloWorld.class
這樣來運行HelloWorld.class文件:
java HelloWorld? ? 注意:運行的時候一定不要加后綴名 .class
這樣運行的前提是:XXX.java文件中 沒有寫包(package)名
編寫的java文件要以XXX.java命令
javac XXX.java? (注意當前路徑和java文件路徑)
XXX.java(源文件)
編譯完后會生成一個XXX.class(字節碼文件)
運行這個java代碼
java XXX? ? (后面不加.class)
可以把字節碼文件打成jar包
jar -cvf hello.jar? HelloWorld.class
類加載:? 雙親委托機制
啟動類加載
擴展類加載
本地類加載? classpath? Hello.class
JVM
類加載-->字節碼驗證-->JIT運行
字節碼驗證:
代碼要符合JVM的規范
代碼破壞計算機的系統或者硬件
棧不能溢出
方法的參數類型要正確
類型轉換要正確
java類名和文件名的關系:
一個java源文件(.java)中,可以有好多個類(class),但是,最多只能有一個類(class)被public修飾
如果有一個類被public修飾,那么這個源文件(.java)的名字就必須和這個被public修飾的類的名字一致,而且還要首字母大寫
java文件中的三個頂級元素:
package
1.最終會是以文件夾的形式體現出來(有什么包,就必須有什么文件夾,運行的時候.class文件必須在這個文件夾下面)
2.? .java文件中有多個package的時候,用.分割并且結尾用;號結束 例如:(com.hangsing.test;)
3.包也是java中類的標識的一部分,確定某一個類是通過包名加類名來唯一確定的 比如運行java類的時候:
java package.類名 (java com.hangsing.test.HelloPackage)
import
1.導包用的關鍵字
2.如果你想在當前這個類使用其他的類,那么就必須通過這個關鍵字,把那個類導入進來
3. java.lang包下面的類可以直接使用,不用導入.
4. 和當前這個類位于同一個包下面的類,也不需要導入,可以直接使用
class
java中標識一個類的關鍵字
(java類中可以沒有package,也可以沒有import,但是一定會class)
編寫帶包名的類 HelloPackage.java
package com.hangsing.test;
public class HelloPackage{
public static void main(String[] args){
System.out.println("hello world");
System.out.println("hello world");
System.out.print("hello world");
}
}
直接編譯 javac? HelloPackage.java
然后運行 java HelloPackage? 報錯!!!
在當前(ch01)目錄下面建立文件夾 com/hangsing/test
然后把HelloPackage.class文件剪切到了這個test目錄里面
然后在ch01目錄下運行:
java com.hangsing.test.HelloPackage
以上建立文件夾并且把.class文件剪切到相應的文件夾里面的操作,我們可以用命令在編譯的時候實現
javac -d . HelloPackage.java
-d 表示編譯的同時生產和這個.java文件中定義的包名相一致的是文件夾結構,
.? 表示在當前目錄下生產這個文件夾(這個不一定非是.? 也可以是其他路徑)
最后編譯完成后的.class文件也會自動的放進生產的文件夾里面
然后我們之間用package.類名去運行就可以了
java com.hangsing.test.HelloPackage
注意:沒有main方法的類是不能直接運行的
main的形式是固定的(大體是固定,之后會看到改動一些指定地方也是可以的)
public static void main(String[] args){
......
}
因為main方法是程序的入口,要直接運行的那個類,類加載之后,JVM沒有在這個類中找個main方法,那么就會報錯
JVM只會運行*java命令后面*指定的類中的main方法(如果沒有這個方法就報錯)
java com.hangsing.test.HelloWorld
Java環境變量配置比較簡單,多試試,有著印象即可