美文网首页
Java带包编译运行

Java带包编译运行

作者: 火卫控 | 来源:发表于2023-10-12 09:28 被阅读0次
    源代码运行模式

    java 在 Javase11 版本后支持源代码运行模式 即 Java **.java
    而在之前版本需要 javac *.java 然后再java <class>
    java **.java 源代码运行模式,类似于Python脚本
    而不生成class文件
    指定编码方式:-D 参数 紧跟后面

    java -Dfile.encoding=UTF-8 classDemo1.java

    D:\Coding\java_docu\hellojava1\test8>java -Dfile.encoding=UTF-8 classDemo1.java   
    这是一个公有的方法!任何类都可以访问。
    这是一个受到保护的方法!只有子类可以访问。
    这是一个私有的方法!只有类本身才可以访问。
    
    D:\Coding\java_docu\hellojava1\test8>java classDemo1.java
    杩欐槸涓?涓叕鏈夌殑鏂规硶锛佷换浣曠被閮藉彲浠ヨ闂??
    杩欐槸涓?涓彈鍒颁繚鎶ょ殑鏂规硶锛佸彧鏈夊瓙绫诲彲浠ヨ闂??
    杩欐槸涓?涓鏈夌殑鏂规硶锛佸彧鏈夌被鏈韩鎵嶅彲浠ヨ闂??
    
    D:\Coding\java_docu\hellojava1\test8>java -D'file.encoding=UTF-8' classDemo1.java 
    杩欐槸涓?涓叕鏈夌殑鏂规硶锛佷换浣曠被閮藉彲浠ヨ闂??
    杩欐槸涓?涓彈鍒颁繚鎶ょ殑鏂规硶锛佸彧鏈夊瓙绫诲彲浠ヨ闂??
    杩欐槸涓?涓鏈夌殑鏂规硶锛佸彧鏈夌被鏈韩鎵嶅彲浠ヨ闂??  
    

    Java带包编译
    现在以Java SE 21 LTS 长期支持版本为例 2023.9.19发布
    进行Java带包编编译运行

    D:\Coding\java_docu\hellojava1\test9>java --version 
    openjdk 11.0.16.1 2022-08-12 LTS
    OpenJDK Runtime Environment Microsoft-40648 (build 11.0.16.1+1-LTS)
    OpenJDK 64-Bit Server VM Microsoft-40648 (build 11.0.16.1+1-LTS, mixed mode)
    

    注意java 有一个参数 -D

    -D<名称>=<值>
                      设置系统属性
    

    带包Java文件

    package hellojava1.test9;
    *
    *
    

    树结构

    D:\Coding\java_docu>tree
    卷 990pro_1T 的文件夹 PATH 列表
    卷序列号为 EC07-5B6B
    D:.
    ├─demo
    ├─hellojava1
    │  ├─com
    │  │  └─hpe
    │  │      └─java
    │  ├─test1
    │  ├─test10
    │  ├─test3
    │  ├─test4
    │  ├─test5
    │  ├─test6
    │  ├─test7
    │  ├─test8
    │  └─test9
    └─others
    
    D:\Coding\java_docu>
    

    编译


    如果在包目录,直接编译 然后 -cp运行

    javac CutImageFrame.java
    java -cp F:\编程\Java精彩编程2000例\MR\02\033\src com.zzk.CutImageFrame

    F:\编程\Java精彩编程2000例\MR\02\033\src\com\zzk>javac CutImageFrame.java
    
    F:\编程\Java精彩编程2000例\MR\02\033\src\com\zzk>java -cp F:\编程\Java精彩编程2000例\MR\02\033\src com.zzk.CutImageFrame
    

    -cp 有那种方式指定 classpath路径
    绝对路径 F:\编程\Java精彩编程2000例\MR\02\034\src
    相对路径 ./../../
    具体如下:

    F:\编程\Java精彩编程2000例\MR\02\034\src\com\zzk>java -cp F:\编程\Java精彩编程2000例\MR\02\034\src com.zzk.CreateImageFrame 
    
    F:\编程\Java精彩编程2000例\MR\02\034\src\com\zzk>java -cp ./../../ com.zzk.CreateImageFrame 
    

    如果在根目录,-d打包编译,然后 运行路径class

    此.java文件涉及到url 图片,用java直接运行源代码不理想,报错如下:

    F:\编程\Java精彩编程2000例\MR\02\033\src\com\zzk>java CutImageFrame.java   
    Exception in thread "main" java.lang.NullPointerException: Cannot invoke "java.net.URL.toString()" because "url" is null
            at java.desktop/sun.awt.SunToolkit.getImageFromHash(SunToolkit.java:700)
            at java.desktop/sun.awt.SunToolkit.getImage(SunToolkit.java:736)
            at com.zzk.CutImageFrame.<init>(CutImageFrame.java:38)
            at com.zzk.CutImageFrame.main(CutImageFrame.java:32)
    
    

    在java文件目录下编译
    javac -encoding utf-8 DempException.java
    然后回退到工程根目录运行编译好的类文件,并带上路径

    java hellojava1/test9/DemoException
    或者java hellojava1.test9.DemoException

    
    D:\Coding\java_docu\hellojava1\test9>javac -encoding utf-8 DemoException.java 
    
    D:\Coding\java_docu\hellojava1\test9>java DemoException      
    错误: 找不到或无法加载主类 DemoException
    原因: java.lang.NoClassDefFoundError: hellojava1/test9/DemoException (wrong name: DemoException)
    
    D:\Coding\java_docu\hellojava1\test9>cd ..
    
    D:\Coding\java_docu\hellojava1>cd ..
    
    D:\Coding\java_docu>java hellojava1/test9/DemoException
    Throwing MyException from a()
    Throwing MyException from b()
    Throwing MyException from c()
    hellojava1.test9.MyException: Originated in c()
            at hellojava1.test9.DemoException.c(DemoException.java:53)
            at hellojava1.test9.DemoException.main(DemoException.java:68)
    error code: 47
    
    D:\Coding\java_docu>java hellojava1.test9.DemoException
    Throwing MyException from a()
    Throwing MyException from b()
    Throwing MyException from c()
    hellojava1.test9.MyException: Originated in c()
            at hellojava1.test9.DemoException.c(DemoException.java:53)
            at hellojava1.test9.DemoException.main(DemoException.java:68)
    error code: 47
    
    D:\Coding\java_docu>cd hellojava1/test9
    
    D:\Coding\java_docu\hellojava1\test9>java hellojava1/test9/DemoException
    错误: 找不到或无法加载主类 hellojava1.test9.DemoException
    原因: java.lang.ClassNotFoundException: hellojava1.test9.DemoException
    

    或者在当前 。java文件路径下 采用 -cp参数 指定classpath工程根路径 ,
    java -cp D:\Coding\java_docu\ hellojava1.test9.DemoException
    或者 java -cp D:\Coding\java_docu\ hellojava1/test9/DemoException

    D:\Coding\java_docu\hellojava1\test9>java -cp D:\Coding\java_docu\ hellojava1.test9.DemoException
    Throwing MyException from a()
    Throwing MyException from b()
    Throwing MyException from c()
    hellojava1.test9.MyException: Originated in c()
            at hellojava1.test9.DemoException.c(DemoException.java:53)
            at hellojava1.test9.DemoException.main(DemoException.java:68)
    error code: 47
    
    D:\Coding\java_docu\hellojava1\test9>java -cp D:\Coding\java_docu\ hellojava1/test9/DemoException 
    Throwing MyException from a()
    Throwing MyException from b()
    Throwing MyException from c()
    hellojava1.test9.MyException: Originated in c()
            at hellojava1.test9.DemoException.c(DemoException.java:53)
            at hellojava1.test9.DemoException.main(DemoException.java:68)
    error code: 47
    

    相关文章

      网友评论

          本文标题:Java带包编译运行

          本文链接:https://www.haomeiwen.com/subject/gibsbdtx.html