转载请自 Ken Wu`s Blog!
合理使用javac的source和target选项, 可以使程序的兼容性得到提升.比如, 你写了某个方法, 命名为assert, 该source能通过1.3编译, 而后, 1.4将assert加入到了关键字列表.
此时, 你再用1.4编译时, 就会出错了.
同样地, 1.5之前因为没有引入enum关键字, 如果你的代码中使用了, 那在1.5之后编译就会错误.
解决这个问题的方法, 就是使用 source 选项. Javac -source 1.3 classFileName.-source 选项, 指定源码版本.
-target 选项, 指定目标class版本. 如果已经指定了source版本, 那target版本不能低于source.target选项也是一个对javac来说很灵活的设置.
你可以做到, 用低版本的source编译出高版本的class. 很有趣哦! 不同版本的javac, 默认source与target选项值
JDK/J2SDK |
Default Source |
Source Range |
Default Target |
Target Range |
1.0.x |
1.0 |
— |
1.1 |
— |
1.1.x |
1.1 |
— |
1.1 |
— |
1.2.x |
1.2 |
— |
1.1 |
1.1 – 1.2 |
1.3.x |
1.2/1.3 |
— |
1.1 |
1.1 – 1.3 |
1.4.x |
1.2/1.3 |
1.2† – 1.4 |
1.2 |
1.1 – 1.4 |
5 |
1.5 |
1.2 – 1.5 |
1.5 |
1.1 – 1.5 |
6 |
1.5 |
1.2 – 1.6 |
1.6 |
1.1 – 1.6 |
7 |
1.7 |
1.2 – 1.7 |
1.7 |
1.1 – 1.7 |
经过不同版本编译后的class文件版本, 各是多少呢?
Target |
Major.minor |
Deion |
1.1 |
45.3 |
The original shipped version. |
1.2 |
46.0 |
Supports the strictfp modifier. |
1.3 |
47.0 |
Small update. |
1.4 |
48.0 |
Small update. |
5 (1.5) |
49.0 |
New attributes to support generics and other features. Many more strings accepted as legal identifiers. |
6 (1.6) |
50.0 |
StackMaps are supported. |
7 (1.7) |
51.0 |
invokedynamic is supported. |
分享到:
相关推荐
javac 在编译过程中会检测语法错误、类型不匹配等问题,并生成错误和警告信息。这些信息通过 `com.sun.tools.javac.main.DiagnosticListener` 接口传递给用户。 5. **注解处理**: Java 提供了注解(Annotation)...
5. **命令行选项增强**:javac 命令行选项得到了扩展,如 `-release` 选项允许指定目标运行时版本,确保编译出的代码与特定 JDK 兼容。此外,还新增了 `-Werror` 选项,将警告视为错误,有助于提升代码质量。 6. **...
Java 编译器`javac`是Java程序开发的核心组件之一,它负责将开发者用Java编写的各种源代码文件(.java)转换成可执行的字节码文件(.class)。这个过程涉及到许多编译阶段,包括词法分析、语法分析、语义分析以及...
在深入理解javac源码的过程中,我们可以更好地了解Java语言的编译原理,以及Java平台如何实现跨平台的执行。 源码分析: 1. **词法分析**:javac首先进行词法分析,将源代码分割成一个个的词法单元(如标识符、...
尽管反编译的代码可能与原始的.java文件有所不同,但大多数情况下,逻辑和结构都是清晰的,足以进行分析和理解。 值得注意的是,反编译他人未授权的代码可能会涉及版权问题,因此在使用反编译工具时应确保遵循法律...
2. **设置编译选项**:可以通过设置编译选项优化编译过程,如`javac -g:none MyClass.java`可以编译时不生成调试信息,减小Class文件大小。 3. **构建工具**:对于大型项目,使用Maven或Gradle等构建工具,可以自动...
在OpenJDK 1.7中,javac的源代码是用Java语言编写的,这使得开发者可以深入理解Java编译过程的细节。源代码的结构通常包含多个模块,如前端(frontend)、后端(backend)和类库支持。前端处理包括词法分析、语法...
通过阅读和理解JDK 7中javac的源码,开发者可以深入了解Java语言的底层实现,这对于优化代码、解决编译问题以及进行语言特性的深入研究都具有极大的价值。同时,这也为理解后续版本JDK的改进和新特性提供了基础。
标题中的“javaC语言试题生成与考试系统源码”表明这是一个使用Java编程语言开发的,用于生成C语言试题并进行在线考试的系统。这个系统可能包含了一整套的后端逻辑,用于创建、管理以及自动评分C语言题目,同时也...
总结来说,Java的动态编译和代理机制为开发者提供了强大的灵活性,可以让我们在运行时生成和修改代码,实现诸如热更新、元编程等高级功能。无论是通过`JavaCompiler`进行源代码级别的动态编译,还是利用`Proxy`实现...
当开发者编写完`.java`源代码后,会通过Java编译器(如javac)将这些源代码编译成字节码,即`.class`文件。字节码是一种中间表示,它不依赖于特定的硬件平台,可以在任何支持Java的平台上运行,这是Java“一次编写,...
深入理解javac的源代码对于Java程序员来说,不仅能帮助理解编译过程,还能提升编程技能和优化代码的能力。在本文中,我们将探讨javac的工作原理、关键组件以及其在Java开发中的重要性。 一、javac的基本工作流程 1...
在Java中,源代码(.java文件)经过Java编译器(javac)编译后会生成对应的.class文件。这些文件包含Java虚拟机(JVM)可执行的字节码,是Java程序运行的基础。由于字节码不是人类可读的,因此,查看源码对于理解...
- **Procyon**:除了反编译,还支持Java源码到字节码的编译,提供了GUI和命令行两种方式。 - **FernFlower**:开源的Java反编译器,提供良好的源代码重构能力。 - **IntelliJ IDEA/ Eclipse**:这些IDE内置了反...
.class文件是Java源代码经过编译器(javac)处理后生成的目标文件,它包含了 JVM(Java虚拟机)可以直接执行的二进制代码。每个.java源文件对应一个.class文件,它们是Java程序运行的基础。 2. **为什么要反编译?...
### Java零基础 - 使用javac编译Java程序 在计算机编程领域中,Java是一种广泛使用的高级编程语言,因其跨平台性、安全性以及丰富的类库支持而受到开发者的青睐。对于初学者而言,掌握如何编译Java程序是入门的第一...
编译完成后,`bin`目录会生成相应的`.class`文件。执行该程序则需要使用`java`命令: ```dos java -cp bin;lib\* com.example.MyProgram ``` `-cp bin;lib\*`指定了运行时的类路径,包括`bin`目录和`lib`目录下的...
Java编程语言在编写完成后,需要通过Javac编译器将其转换为字节码(.class文件),这是Java虚拟机(JVM)能够执行的语言。然而,这些字节码并不直接对应于源代码,因此,如果我们没有源代码,就无法直接阅读和理解它...
Java反编译是Java开发中一个重要的技术环节,它允许开发者查看和理解已编译的.class文件中的字节码,从而获取对应的源代码。在Java的开源社区中,有许多工具可以实现这一功能,使得程序员能够研究和学习已有的库或者...
Java 动态编译源码并调用是Java开发中的一种高级技巧,它允许程序在运行时根据需要编译和执行新的代码。这种能力在某些场景下非常有用,例如插件系统、元编程或者在运行时自动生成和执行特定逻辑。下面我们将详细...