1. 程式人生 > >java 命令行 編譯 運行程序

java 命令行 編譯 運行程序

launch error 文件 fine div method cep top find

學習java使用IDE前最好先用用命令行的javac、java來跑一跑簡單的程序,這樣能夠熟悉一下包管理對.class文件路徑的影響。

我們先寫一段簡單的代碼:

package com.csdn.lkasdolka;

public class test_1{
    public static void main(String[] args){
	for(int i = 0; i < 10; ++i ){
	    System.out.println(i);
	}
    }
}

寫好後保存為test_1.java,windows環境下WIN+R打開命令行。cd到test_1.java文件文件夾下。

用命令

javac test_1.java 

編譯文件。假設之前java環境都配置好了的話,這時候在命令行中輸入dir我們能夠看到文件夾下多了一個test_1.class文件:

2014/10/06  16:23    <DIR>          .
2014/10/06  16:23    <DIR>          ..
2014/10/06  16:23               454 test_1.class
2014/10/06  16:09               173 test_1.java
               2 個文件            627 字節
               2 個文件夾 13,711,450,112 可用字節


接下來用

java test_1

嘗試執行字節碼文件,卻出現了異常。

Exception in thread "main" java.lang.NoClassDefFoundError: test_1 (wrong name: c
n/bupt/d10_1006_1/test_1)
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
        at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:14
2)
        at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
        at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
        at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:482)
這是由於我們在代碼開頭的地方建立了一個
com.csdn.lkasdolka
的包。

包是java其中用於管理命名空間的一種機制。

我們須要在當前文件夾中手動建立com\csdn\lkasdolka,然後把test_1.class剪切到com\csdn\lkasdolka\文件夾下。

這時候再cd回最初的工作文件夾(com的父文件夾),在命令行輸入

java com.csdn.lkasdolka.test_1
或者

java com/csdn/lkasdolka/test_1
應該就能看到正確的輸出結果了:

C:\Users\acer\Desktop\technology\test_java>java com.csdn.lkasdolka.test_1
0
1
2
3
4
5
6
7
8
9

C:\Users\acer\Desktop\technology\test_java>java com/csdn/lkasdolka/test_1
0
1
2
3
4
5
6
7
8
9

總結:

1.javac用來編譯.java文件生成.class文件(字節碼文件),java用來運行.class文件,運行的時候去掉.class後綴。

2.假設在源文件裏定義了包(package),須要將.class文件放到包定義的相應文件夾下,否則運行java 命令的時候會出 NoClassDefFoundError的異常


The End~

(如有錯誤,歡迎指正)

java 命令行 編譯 運行程序