zoukankan      html  css  js  c++  java
  • java dos下带包编译问题

    转自 http://blog.163.com/leichi3255@126/blog/static/7483338720099302353547/

    1、前提准备:已经设定好了环境变量(一下给出通用的一般设置方法)
    在高级>环境变量>系统变量中新建一下内容
    JAVA_HOME   C:\Program Files\Java\jdk1.5.0_05(自己机子上java的安装位置)
    CLASSPATH   %JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;.(注意最后的“点”也要加上,这是加入当前路径,以便程序员可以不用考虑绝对路径的引起的影响)
    Path中添加 %JAVA_HOME%\bin(这就是加入系统外部的命令)
    dt.jar和tools.jar是在一些java类中可以直接用来作用的。

    以上配置便于修改,当JDK重新安装时只修改JAVA_HOME变量即可。还有一种配置,就是直接在Path中添加C:\Program Files\Java\jdk1.5.0_05\bin即可,这种配置简洁,能够解决普通的java程序,作为初学者即可,修改可就牵一发而动全身了。
    相关配置可以参照网上的资料了,这里不做详解了。
    2、开始工作:
    假如在D:\chengxu\abc文件夹下有个test.java(假设main方法就在我这个test类中)小程序,里面首句包含了“package abc;”语句,那么在DOS下用javac编译时应该直接对文件操作,而不是像网上说的回到D:\chengxu下用javac abc.test.java编译,这是错误的。因为运行的时候才会考虑有包存在的情况下,应该为
    D:\chengxu\abc>javac test.java
    完成之后,运行时应该回退到D:\chengxu然后用java abc.test(如果有多个类在你的程序中,那么运行的类应该是包含main方法的那个类)就可以看到结果。
    简言之,即:

    D:\chengxu\abc>javac test.java
    D:\chengxu>java abc.test

    下来我具体介绍下为什么是这样?在程序中包含package语句时,那么生成所有的class文件都将放到指定的包里头(对应的目录中),那么执行的时候就会在当前目录下寻找以包语句为路径的class了。因此针对上例假如你的执行为D:\chengxu\abc>java abc.test或者D:\chengxu\abc>java test都会抛出java.lang.NoClassDefFoundError问题。原因前者相当于在abc目录下找abc目录里的test.class但是很明显你得目录结构不是这样的,那么有人想问后者问什么还不对呢?呵呵,原因是带了package,编译器会始终记录类的层次关系,会告诉你这个test类“没有发现,不存在,我不识别了,这个和我这个abc.test类貌似很像,但不是了。”
    正确分析路径和包中类的层次关系,才能正确执行了。
    3、注意事项:
    I、网上说根据java的机制可以用  javac   -d     包的父目录   类名.java  来进行编译
    但是,可知java -d的含义并不是这样的,而是把要生成的class放在那个地方。如上例假如这样写:D:\chengxu\abc>javac -d d:\classes test.java那么编译完后所生成的class文件就在classes目录中了,但有前提,这个classes目录必须存在,不会自动创建的。呵呵,自己尝试了~
    II、要进行带包编译必须在根盘目录里至少建立两级目录才行。假如上例,test.java放在d:\chengxu下,在用正确的编译和运行就会出错,说什么禁止访问和安全机制方面的问题了。最终研究我发现这是java机制是以工程概念来保存和运行项目的,也就是说,平常我们只是做个小程序体验了,而真正项目必须符合工程的相关事宜。还是假设上例,chengxu文件夹就相当于workspace,是所有工程项目的保存地。而abc就相当于你自己的project文件了,因此所有的java程序必须放在这里或者更深的目录结构里。这就是工程化概念了,看看自己机子上C:\Program Files\里不是这样的结构呢?O(∩_∩)O~

    其实两种方式原理是一样的,都是在该class文件的根目录下面运行

  • 相关阅读:
    sed cat 命令
    Datetime 时间模块求日期差
    Selenium:截图显示等待
    SAS常用函数
    SAS笔记
    python 简明教程 【转】
    numpy 笔记
    android Adapter使用详解
    Eclipse的使用技巧之eclipse里的查找:
    Hierarchy Viewer之官方文档翻译之中英对照之未完不续版之使用详解.
  • 原文地址:https://www.cnblogs.com/javahuang/p/2821017.html
Copyright © 2011-2022 走看看