我的Java开发学习之旅------>在Dos环境下Java内部类的编译和运行
来源:互联网 发布:ubuntu vi 强制保存 编辑:程序博客网 时间:2024/05/20 10:11
习惯了在IDE工具上进行代码编写,连最基本的Javac命令和Java命令都忘记的差不多了,今天对一个Java内部类进行编译和运行的时候,就出糗了。IDE是把双刃剑,它可以什么都帮你做了,你只要敲几行代码,点几下鼠标,程序就跑起来了,用起来相当方便。你不用去关心它后面做了些什么,执行了哪些命令,基于什么原理。然而也是这种过分的依赖往往让人散失了最基本的技能,当到了一个没有IDE的地方,你便觉得无从下手,给你个代码都不知道怎么去跑。
首先我在C盘上编写了一个InnerClassTest.java代码,代码内容如下:
package com.csdn.oyp.inner;public class InnerClassTest {static class One{private static class Two{public static void main(String[] args) {System.out.println("two");}}}}
然后我在Dos窗口下使用命令进行编译
C:\Users\Administrator>cd C:\C:\>javac InnerClassTest.javaC:\>java InnerClassTest$One$TwoException in thread "main" java.lang.NoClassDefFoundError: InnerClassTest$One$Two (wrong name: com/csdn/oyp/inner/InnerClassTest$One$Two) at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClass(ClassLoader.java:621) at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124) at java.net.URLClassLoader.defineClass(URLClassLoader.java:260) at java.net.URLClassLoader.access$000(URLClassLoader.java:56) at java.net.URLClassLoader$1.run(URLClassLoader.java:195) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:188) at java.lang.ClassLoader.loadClass(ClassLoader.java:307) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) at java.lang.ClassLoader.loadClass(ClassLoader.java:252) at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)Could not find the main class: InnerClassTest$One$Two. Program will exit.
当运行完 javac InnerClassTest.java 命令后,在C盘生成了以下三个class文件,分别是:InnerClassTest$One$Two.class
InnerClassTest$One.class
InnerClassTest.class
但是运行 java InnerClassTest$One$Two命令时,却报了异常:Exception in thread "main" java.lang.NoClassDefFoundError: InnerClassTest$One$Two (wrong name: com/csdn/oyp/inner/InnerClassTest$One$Two)。
原来是因为我的InnerClassTest.java中有package语句:package com.csdn.oyp.inner;所以在进行编译的时候javac命令要加上-d选项。
把javac命令改为 C:\>javac -d . InnerClassTest.java (注意 "."号)
javac -d destdir srcFile 命令解释
其中:1、-d destdir是用来指定存放编译生成的.class文件的路径。(若此选项省略,那么默认在当前目录下生成.class文件,并且没有生成包文件夹;当前目录可以用“.”来表示,即:javac -d . srcFile )
注意:添加-d选项除了可以指定编译生成的.class文件的路径外,最大的区别是可以将源文件首行的package关键字下的包名在当前路径下生成文件夹。
那么在当前目录(C盘)下生成一个C:\com\csdn\oyp\inner目录,用于保存编译好的class文件。如下图所示:
然后使用java命令运行main方法。
java com.csdn.oyp.inner.InnerClassTest$One$Two
运行结果为:输出two。
当然如果将InnerClassTest.java中的package语句删除,即不打包的话。
public class InnerClassTest {static class One{private static class Two{public static void main(String[] args) {System.out.println("two");}}}}编译和运行代码为:
C:\>javac InnerClassTest.javaC:\>java InnerClassTest$One$Twotwo如下图所示:
总结:如果编译Java文件时不是用 -d 选项,编译器不会为Java源文件生成相应的文件结构。鉴于此,笔者推荐编译Java文件时总是使用 -d 选项,即使想把生成的class文件放在当前路径下,也应该使用 -d . 选项,而不省略 -d 选项
=================================================================
C:\>javac -help用法:javac <选项> <源文件>其中,可能的选项包括: -g 生成所有调试信息 -g:none 不生成任何调试信息 -g:{lines,vars,source} 只生成某些调试信息 -nowarn 不生成任何警告 -verbose 输出有关编译器正在执行的操作的消息 -deprecation 输出使用已过时的 API 的源位置 -classpath <路径> 指定查找用户类文件和注释处理程序的位置 -cp <路径> 指定查找用户类文件和注释处理程序的位置 -sourcepath <路径> 指定查找输入源文件的位置 -bootclasspath <路径> 覆盖引导类文件的位置 -extdirs <目录> 覆盖安装的扩展目录的位置 -endorseddirs <目录> 覆盖签名的标准路径的位置 -proc:{none,only} 控制是否执行注释处理和/或编译。 -processor <class1>[,<class2>,<class3>...]要运行的注释处理程序的名称;绕过默认的搜索进程 -processorpath <路径> 指定查找注释处理程序的位置 -d <目录> 指定存放生成的类文件的位置 -s <目录> 指定存放生成的源文件的位置 -implicit:{none,class} 指定是否为隐式引用文件生成类文件 -encoding <编码> 指定源文件使用的字符编码 -source <版本> 提供与指定版本的源兼容性 -target <版本> 生成特定 VM 版本的类文件 -version 版本信息 -help 输出标准选项的提要 -Akey[=value] 传递给注释处理程序的选项 -X 输出非标准选项的提要 -J<标志> 直接将 <标志> 传递给运行时系统
C:\>java -helpUsage: java [-options] class [args...] (to execute a class) or java [-options] -jar jarfile [args...] (to execute a jar file)where options include: -client to select the "client" VM -server to select the "server" VM -hotspot is a synonym for the "client" VM [deprecated] The default VM is client. -cp <class search path of directories and zip/jar files> -classpath <class search path of directories and zip/jar files> A ; separated list of directories, JAR archives, and ZIP archives to search for class files. -D<name>=<value> set a system property -verbose[:class|gc|jni] enable verbose output -version print product version and exit -version:<value> require the specified version to run -showversion print product version and continue -jre-restrict-search | -jre-no-restrict-search include/exclude user private JREs in the version search -? -help print this help message -X print help on non-standard options -ea[:<packagename>...|:<classname>] -enableassertions[:<packagename>...|:<classname>] enable assertions -da[:<packagename>...|:<classname>] -disableassertions[:<packagename>...|:<classname>] disable assertions -esa | -enablesystemassertions enable system assertions -dsa | -disablesystemassertions disable system assertions -agentlib:<libname>[=<options>] load native agent library <libname>, e.g. -agentlib:hprof see also, -agentlib:jdwp=help and -agentlib:hprof=help -agentpath:<pathname>[=<options>] load native agent library by full pathname -javaagent:<jarpath>[=<options>] load Java programming language agent, see java.lang.instrument -splash:<imagepath> show splash screen with specified image
可以参考以下链接:
http://www.cnblogs.com/xiazdong/p/3216220.html?utm_source=tuicool
==================================================================================================
作者:欧阳鹏 欢迎转载,与人分享是进步的源泉!
转载请保留原文地址:http://blog.csdn.net/ouyang_peng
==================================================================================================
- 我的Java开发学习之旅------>在Dos环境下Java内部类的编译和运行
- 我的Java开发学习之旅------>在Dos环境下Java内部类的编译和运行
- 在DOS环境下编译和运行Java Application时遇到的问题
- DOS系统下的java和c语言编译、运行环境搭建
- JAVA学习之一——在DOS环境下编译遇到的问题及解决方法
- JDK编译和运行过程全解(dos下的java编译和运行常见问题之解决)
- JDK的配置和在dos下运行java
- 如何在Dos下编译和运行Java程序?
- java内部类的学习
- java SE运行环境在windows下的配置和命令行方式编译与运行java程序
- DOS环境下运行java类的方法
- 我的第一篇CSDN博客之 java内部类—方法内部类
- 我的第一篇CSDN博客之 java内部类—匿名内部类
- 在Dos环境下(cmd)编译及运行java程序教程
- 【我的Java笔记】内部类
- 在Java中内部类的访问形式和内部类的作用分别是什么?
- JAVA编译和运行环境的配置
- 在WIN10下配置JAVA编辑和运行的环境
- Centos上安装samba配置后,windows登陆root没有写权限
- 二、jQuery选择器
- socket阻塞与非阻塞,同步与异步、I/O模型
- linux命令11--联机帮助
- OSG回调机制
- 我的Java开发学习之旅------>在Dos环境下Java内部类的编译和运行
- 最大乘积
- Android最佳性能实践(二)——分析内存的使用情况
- IT好网站
- svn的ldap认证配置
- Creating a Ring Buffer
- IOS:UIApplication sharedApplication详细解释
- java开发事务处理和用户体验的两点想法
- 分析apk工具aapt的使用,解析其原理