zoukankan      html  css  js  c++  java
  • 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其中用于管理命名空间的一种机制。

    我们须要在当前文件夹中手动建立comcsdnlkasdolka,然后把test_1.class剪切到comcsdnlkasdolka文件夹下。

    这时候再cd回最初的工作文件夹(com的父文件夹),在命令行输入

    java com.csdn.lkasdolka.test_1
    
    或者

    java com/csdn/lkasdolka/test_1
    应该就能看到正确的输出结果了:

    C:UsersacerDesktop	echnology	est_java>java com.csdn.lkasdolka.test_1
    0
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    C:UsersacerDesktop	echnology	est_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~

    (如有错误,欢迎指正)

  • 相关阅读:
    javascript如何处理字符串中的u
    查看postgresql的日志show queries log in PostgreSQL?
    angular7 promiss
    解决echarts的叠堆折线图数据出现坐标和值对不上的问题
    微信小程序将图片数据流添加到image标签中
    深入理解flex布局的flex-grow、flex-shrink、flex-basis
    优先级:content –> width –> flex-basis (limted by max|min-width)
    ubuntu17.10 python3.6 install plugins for AI
    tensorflow import 没找到cudnn库问题解决
    ubuntu17.10 安装ssh
  • 原文地址:https://www.cnblogs.com/wzzkaifa/p/6979832.html
Copyright © 2011-2022 走看看