java 命令行 编译 运行程序

Posted wzzkaifa

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 命令行 编译 运行程序相关的知识,希望对你有一定的参考价值。

学习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 命令行 编译 运行程序的主要内容,如果未能解决你的问题,请参考以下文章

Java程序在命令行的编译运行

JAVA代码在命令行下的编译

如何用javac 和java 编译运行整个Java工程

编译JAVA程序成功但运行javac命令时出现错误

编译JAVA程序成功但运行javac命令时出现错误

怎么在cmd里面运行 java