精华内容
下载资源
问答
  • java编译中出现了Exception in thread “main” java.lang.UnsupportedClassVersionError起因: StringBuilder不能赋值?不对,错误原因是因为下面报错的log: 搜了下答案,参考 百度知道:java编译中出现了...

    java编译中出现了Exception in thread “main" java.lang.UnsupportedClassVersionError
    我遇到的:
    这里写图片描述
    StringBuilder不能赋值?不对,错误原因是因为下面报错的log:
    这里写图片描述

    搜了下答案,参考
    百度知道:java编译中出现了Exception in thread “main" java.lang.UnsupportedClassVersionError
    这里写图片描述
    我打开cmd试了下,果然:
    这里写图片描述

    接下来,我卸载了所有jdk,然后重新装。
    (ps:大家装jdk时候,jre不要装同一目录,否则覆盖了之后javac.exe就没了)
    (ps:环境变量%JAVA_HOME%结尾不要加分号,不然其他相关引用后面就多了分号)

    最后,花了一个小时…(都是泪)
    一致
    好了,没有编译报错了,终于可以开心的撸代码了

    展开全文
  • Java编译涉及到非常多的知识层面:编译原理、语言规范、虚拟机规范、本地机器码优化等;下面我们先来看下Java体系中的三种编译方式:前端编译、即时编译(JIT编译)、静态提前编译(AOT编译)解它们各有什么优点和...

           Java编译(一) Java三种编译方式:

    前端编译 JIT编译 AOT编译


            Java程序代码需要编译后才能在虚拟机中运行,编译涉及到非常多的知识层面:编译原理、语言规范、虚拟机规范、本地机器码优化等;了解编译过程有利于了解整个Java运行机制,不仅可以使得我们编写出更优秀的代码,而且还可以使得在JVM调优时更得心应手。

           下面我们先来看下Java体系中的三种编译方式:前端编译、即时编译(JIT编译)、静态提前编译(AOT编译),先来了解它们各有什么优点和缺点,再来看看主流的前端编译+JIT编译方式的运作过程。

    1、前端编译

           把Java源码文件(.java)编译成Class文件(.class)的过程;

           也即把满足Java语言规范的程序转化为满足JVM规范所要求格式的功能;

    优点:

    这阶段的优化是指程序编码方面的;

    许多Java语法新特性("语法糖":泛型、内部类等等),是靠前端编译器实现的,而不是依赖虚拟机;

    编译成的Class文件可以直接给JVM解释器解释执行,省去编译时间,加快启动速度;

    缺点:

    对代码运行效率几乎没有任何优化措施;

    解释执行效率较低,所以需要结合下面的JIT编译;    

    前端编译器:Oracle javac、Eclipse JDT中的增量式编译器(ECJ)等;

    2、后端编译/即时(JIT)编译

          通过Java虚拟机(JVM)内置的即时编译器(Just In Time Compiler,JIT编译器);在运行时把Class文件字节码编译成本地机器码的过程;            

    优点:

    通过在运行时收集监控信息,把"热点代码"(Hot Spot Code)编译成与本地平台相关的机器码,并进行各种层次的优化;

    可以大大提高执行效率;

    缺点:

    收集监控信息影响程序运行;

    编译过程占用程序运行时间(如使得启动速度变慢);

    编译机器码占用内存;

    JIT编译器:HotSpot虚拟机的C1、C2编译器等;

     

    另外,JIT编译速度及编译结果的优劣,是衡量一个JVM性能的很重要指标;

    所以对程序运行性能优化集中到这个阶段;

    也就是说可以对这个阶段进行JVM调优;

    3、静态提前编译(Ahead Of Time,AOT编译)

           程序运行前,直接把Java源码文件(.java)编译成本地机器码的过程;

    优点:

    编译不占用运行时间,可以做一些较耗时的优化,并可加快程序启动;

    把编译的本地机器码保存磁盘,不占用内存,并可多次使用;

    缺点:

    因为Java语言的动态性(如反射)带来了额外的复杂性,影响了静态编译代码的质量;

    一般静态编译不如JIT编译的质量,这种方式用得比较少;

    静态提前编译器(AOT编译器):JAOTC、GCJ、Excelsior JET、ART (Android Runtime)等;

     

    关于ART (Android Runtime)模式:ART虽然主要通过AOT编译支持Java的运行,但仍然带有解释器。

    更多ART请参考:《ART没有了Java虚拟机,能支持的了JNI吗?比如Java和C++互调用,还有ART不用解释器了那有没有可能放弃Java呢?

    《Android运行时ART简要介绍和学习计划》

    更多AOT请参考:《Java中有类似于NGen的工具(AOT编译器)吗?

    4、前端编译+JIT编译

    到这里,我们知道目前Java体系中主要还是采用前端编译+JIT编译的方式,如JDK中的HotSpot虚拟机。

    前端编译+JIT编译方式的运作过程大体如下:

    1、首先通过前端编译把符合Java语言规范的程序代码转化为满足JVM规范所要求Class格式;

    2、然后程序启动时Class格式文件发挥作用,解释执行,省去编译时间,加快启动速度;

    3、针对Class解释执行效率低的问题,在运行中收集性能监控信息,得知"热点代码";

    4、JIT逐渐发挥作用,把越来越多的热点代码"编译优化成本地代码,提高执行效率;

     

          后面我们将分别去了解:前端编译--把Java源码文件编译成Class文件的过程、Class文件的结构、以及JIT编译--在运行时把Class文件字节码编译成本地机器码的过程……

     

    【参考资料】

    1、《The Java Virtual Machine Specification》Java SE 8 Edition:https://docs.oracle.com/javase/specs/jvms/se8/html/index.html

    2、《深入理解Java虚拟机:JVM高级特性与最佳实践》第二版

    3、实时Java,第2部分: 比较编译技术--本地 Java 代码的静态编译和动态编译中的问题:www.ibm.com/developerworks/cn/java/j-rtj2/

    4、很多文章都提到JVM对class文件的编译,那么编译后的文件是在内存里还是在哪?怎么查看?:https://www.zhihu.com/question/52487484/answer/130785455

       5、Java中有类似于NGen的工具(AOT编译器)吗?:https://www.zhihu.com/question/29852046/answer/45917208

    展开全文
  • java编译表达式

    万次阅读 2021-04-22 18:55:51
    import java.util.HashMap; import java.util.Map; import com.googlecode.aviator.AviatorEvaluator; import com.googlecode.aviator.Expression; public class CompileExample { public static void ...
    import java.util.HashMap; 
    import java.util.Map; 
     
    import com.googlecode.aviator.AviatorEvaluator; 
    import com.googlecode.aviator.Expression; 
     
    public class CompileExample { 
        public static void main(String[] args) { 
            String expression = "a-(b-c)>100"; 
            // 编译表达式 
            Expression compiledExp = AviatorEvaluator.compile(expression); 
     
            Map<String, Object> env = new HashMap<String, Object>(); 
            env.put("a", 100.3); 
            env.put("b", 45); 
            env.put("c", -199.100); 
     
            // 执行表达式 
            Boolean result = (Boolean) compiledExp.execute(env); 
            System.out.println(result); 
        } 
    }
    
    展开全文
  • java编译和运行

    万次阅读 多人点赞 2019-07-02 21:27:23
    java应用程序的基本结构 编写源文件 保存源文件 额外附加 编译器(javac.exe) 解释器(java.exe) ...编译:javac B.java 解释:java B 注意: 解释不可能以带目录的方式去运行程序,编译可以 零...
    • java应用程序的基本结构
    • 编写源文件
    • 保存源文件
    • 额外附加
    • 编译器(javac.exe)
    • 解释器(java.exe)

     

    总结:

    假如我的B.java源文件在C:\Users\AUSU\Desktop\ts里面

    一般都是进入到这个目录里面编译解释

    编译:javac B.java

    解释:java B

    注意:

    解释不可能以带目录的方式去运行程序,编译可以

     

     

    零:java应用程序的基本结构

    一个java应用程序由若干个类组成,这些类可以在一个源文件,也可以分布在若干个源文件

    java应用程序总是从主类的main方法开始执行

    编译器忽略注释内容

     

     

     

    一:编写源文件

    一个源文件可以有多个类(class),但只能有一个类是public类

    如果有一个类是public类,那么源文件的名字必须与这个类的名字完全相同,扩展名是 .java(注意这个有个点)

    如果源文件没有public类,那么只要名字和某个类相同,且扩展名是.java也可以

     

     

    二:保存源文件

    保存类型选择为所以类型,编码选择为ANSI

     

     

     

    三:额外附加:

    (1)C盘转到D盘

    (2)进入某个子目录(文件夹),比如下面的进入E盘的java文件夹

    (3)退出某个子目录,比如退出java文件夹

     

     

    四:编译器(javac.exe)

    javac B.java

    在上面可以看到编译成功后出现了B.class文件(字节码文件)

    如果源文件有多个类,编译源文件会生成多个扩展名为.class的文件,在每个扩展名为.class的文件中只存放一个类的字节码,其文件名与该类的名字相同。

    如果文件是这个

    public class B {
        int a=1;
    
        int f(int b){
            a=b;
            return a;
        }
    }
    

    编译后得到的class文件,我使用反编译器(网上下载的)可以得到这样

    public class B {
      int a = 1;
      
      int f(int paramInt) {
        this.a = paramInt;
        return this.a;
      }
    }
    

     

     

    注意:在编译时候可能会出现的问题

    (1)如果回车后出现javac不是内部或外部命令,也不是可运行的程序或批处理文件

    解决方法:

    方法一:重新设置环境变量

    方法二:在MS-DOS命令窗口输入path D:\jdk1.6\bin(这个是你jdk)并回车,然后再编译

     

    (2)如果出现两个公共类,而名字是B.java或者是C.java

    public class B {
        int a=1;
    }
    
    public class C{
        int b=1;
    }

    编译时候会出现问题

    所以符合了前面说的:源文件可以有多个类,但只能有一个类是public类

     

    验证上面这句话:

    public class B {
        int a=1;
    }
    
    class C{
        int b=1;
    }

    编译后

     

    如果是这样也可以编译成功

    public class B {
        int a=1;
    
        public class C{
            int b=1;
        }
    }

     

    (3)菜鸟看到的(暂时还没验证)

     

     

    五:解释器(java.exe)

    使用java虚拟机中的java解释器(java.exe)来解释,执行其字节码文件(.class文件)

    比如源文件:

    public class B {
        int a=1;
    
        int f(int b){
            a=b;
            return a;
        }
    
    //    主类,java应用程序总是从主类的main方法开始执行
        public static void main(String []args){
           B b=new B();
            System.out.println(b.f(3));
        }
    }

    编译后得到的字节码文件(.class文件),使用反编译器查看

    public class B {
      int a = 1;
      
      int f(int paramInt) {
        this.a = paramInt;
        return this.a;
      }
      
      public static void main(String[] paramArrayOfString) {
        B b = new B();
        System.out.println(b.f(3));
      }
    }
    

    运行:java B,得到结果是3

    执行过程:java虚拟机首先将程序需要的字节码文件加载到内存,然后解释执行字节码文件,加载到内存的同时就为主类中的main方法分配了入口地址。

     

    注意:

    (1)java解释器执行的类名必须是主类的名字(没有扩展名)

    (2)如果解释的时候出现错误,可能是main方法没有写对,或者是系统变量不正确

    在MS-DOS输入:ClassPath=D:\jdk1.7\jre\lib\rt.jar;.;然后回车确定,再使用java解释器运行主类。

    (3)不可以带着目录运行程序,比如

    java C:\ts\B

    展开全文
  • java用什么编译器_Java用Java编译

    千次阅读 2020-06-25 22:35:52
    幸运的是,从Java 1.6开始,我们可以在运行时访问Java编译器,因此可以将编译时与运行时混淆。 尽管在这种非常特殊的情况下,这可能会导致过多的麻烦事情,通常导致无法维护的自我修改代码,...
  • Maven 指定java编译版本

    千次阅读 2018-07-11 10:27:43
    maven的编译插件指定java编译版本有两种使用方法  在pom.xml 的plugins节点下面添加 &lt;plugins&gt; &lt;plugin&gt; &lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&...
  • java编译原理

    千次阅读 2008-04-17 14:07:00
    1、java编译过程与c/c++编译过程不同java编译程序将java源程序编译成jvm可执行代码--java字节码.c/c++编译过程:当C编译器编译生成一个对象的代码时,该代码是为在某一特定硬件平台运行而生成的。因此在编译过程中,...
  • Java 编译时注解 实际意义 注解处理器 实例 maven 的配置 目录结构 定义 测试 AutoService 代码地址 引用 系列导航 Java 编译时注解 实际意义 本例子仅用于展现简单的编译时注解使用。 编译时注解,...
  • IDEA设置java 编译级别

    千次阅读 2016-07-19 16:28:40
    IDEA设置java 编译级别 Project Settings中 (1)Project  (2)Modules  首选项中 (3)Command+,        
  • java Compiler API (java编译api)

    千次阅读 多人点赞 2019-05-23 09:59:50
    在早期的版本中(Java SE5及以前版本)中只能通过tools.jar中的com.sun.tools.javac包来调用Java编译器,但由于tools.jar不是标准的Java库,在使用时必须要设置这...使用Java API来编译Java源代码有非常多方法,目前让...
  • java 编译找不到符号

    千次阅读 2019-03-04 20:19:40
    java 编译时找不到符号问题 ,文章只是做个记录,以后不可再犯类似问题。 代码编写ok后编译: javac ServerSocket.java 出现报错,如下: 完整代码如下: import java.net.*; public class ServerSocket{ ...
  • Java 编译命令

    千次阅读 2017-11-07 08:52:11
    1.javac.exe是编译功能javaCompiler2.java.exe是执行class,如果没有编译的话是不能执行的,同理,javac.exe编译完以后如果没有java.exe执行的话也是没有运行的
  • JAVA编译和运行环境的配置

    千次阅读 2017-07-24 14:45:33
    JAVA编译和运行环境的配置PATH,CLASSPATH ,JAVAHOME的作用在Windows系统中所有被添加到PATH环境变量的目录下的文件,可以在系统的任意位置直接调用而无需指定目录,所以如果我们想要在JAVA安装目录之外的位置运行...
  • [java]初学者java编译时错误小总结

    千次阅读 2015-06-02 16:52:52
    初学者常遇Java编译时错误 编译错误 ErrorMessage 错误: 非法的类型开始 illegal start of type 错误: 需要’;’ ‘;’ expected 错误: 方法声明无效;需要返回类型 invalid method declaration; return type...
  • EditPlus Java编译运行快捷键

    千次阅读 2015-04-27 02:02:21
    依次设置 组名与 添加工具按钮,本文中为了更好的理解我把组名改为"Java编译与运行", 之后再来琢步进行设置javac命令与java命令。点击添加工具按钮,选择程序,在文本菜单、命令、参数、起始目录上进行修改。文本...
  • Notepad++ 配置java编译环境

    万次阅读 2016-12-12 20:58:54
    上午随便看了程序员的进阶之路,有看到推荐使用Notepad++作为文本编辑器,然后就搜索捣鼓了一下使用其搭建Java编译环境,过程并不复杂。
  • Java编译分类:前端编译和后端编译

    千次阅读 2018-01-06 12:13:59
    Java程序代码需要编译后才能在虚拟机中运行,编译涉及到非常多的知识层面:编译原理、语言规范、虚拟机规范、本地机器码优化等;了解编译过程有利于了解整个Java运行机制,不仅可以使得我们编写出更优秀的代码,而且...
  • 解决Java编译错误:编码GBK的不可映射字符

    万次阅读 多人点赞 2019-03-03 22:13:14
    新建的Java文件保存时encoding为UTF-8,出现编码GBK的不可映射字符的错误。 由于文件中包含中文,javac编译...1.使用javac -encoding UTF-8 TestIf.java编译通过 2.修改文件的encoding编码格式为ANSI编译通过 ...
  • sublimeText3 java编译并控制台输出

    千次阅读 2017-07-20 23:36:39
    文前小酒在对sublime Text3 java编译配置前要做到的是电脑已经配置好java环境了开始表演 进入jdk安装目录,然后进入bin文件夹中(我的路径是D:\Programme\Java\jdk1.8.0_131\bin) 列表内容 新建一个runJava.bat文件...
  • 【Java】Java编译错误:需要class,interface或enum

    万次阅读 多人点赞 2019-03-06 16:38:29
    将大括号的位置更正即可成功编译 class FangFaDemo{ public static void main(String[] args){ int x = 1 , y = 2; System.out.println(sum(x,y)); } //原位置 public static int sum(int a,int b){ ...
  • Java编译后生成带$符号的class

    千次阅读 2016-04-14 14:10:24
    Java编译后生成带$符号的class
  • 深入理解java编译后的字节码文件

    千次阅读 2018-04-19 17:15:53
    从我们写的java文件到通过编译器编译成java字节码文件(也就是.class文件),这个过程是java编译过程;而我们的java虚拟机执行的就是字节码文件。不论该字节码文件来自何方,由哪种编译器编译...
  • 前言 对于很多刚使用idea的小白,或者一些不关注idea工具...java编译版本改为java8,maven配置也配置个人实际路径 配置完成后,你可以打开一个新的项目,或者对现有已配置好的项目删除本地的.idea目录重新打开即可
  • 好用的在线 java 编译网站,编辑器(亲测) 置顶 ...
  • sublime text3下配置java编译环境

    千次阅读 2018-09-19 21:29:19
    sublime text3下配置java编译环境 2015年05月15日 23:51:45 张京林要加油 阅读数:3456 标签: sublimetextjava编译环境配置 更多 个人分类: 存档 版权声明:本文为博主原创文章,转载请联系博主。 ...
  • java编译后的文件出现xx$1.class的原因

    万次阅读 2017-03-29 09:10:48
    java编译后的文件名字带有$接数字的就是匿名内部类的编译结果,接名字的就是内部类的编译结果 例如:TestFrame$1.class是匿名内部类的编译结果,TestFrame$MyJob.class则是内部类MyJob编译后得到的. 使用内部类...
  • java编译中出现了Exception in thread “main" java.lang.UnsupportedClassVersionError转载 2015年08月04日 09:59:139868这个问题确实是由较高版本的JDK编译的java class文件试图在较低版本的JVM上运行产生的...
  • java编译并打包成可执行jar和exe文件

    千次阅读 2017-10-11 11:19:35
    java编译并打包成可执行jar和exe文件 先建立java文件如下所示: RadioButtonFrame.java import javax.swing.*; import javax.swing.border.Border; import java.awt.*; import java.awt.event.ActionEvent; ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,301,162
精华内容 520,464
关键字:

java编译

java 订阅