java编译技巧
三种方法:
1.在IDE中,如eclipse中写的Java程序,在点击保存后eclipse就会调用javac编译程序编译,编译文件在当前项目的bin目录下。
2.作为一个独立的文件且没有定义Java环境变量,需要在cmd窗口中切换到java bin目录下执行Javac程序,执行格式为javac 空格 Java源文件;如 javac C://hello.java;
3.作为一个独立的文件且定义了Java环境变量,打开cmd窗口,可以在任意目录输入javac java源文件,如javac D://hi.java。
(1)java编译技巧扩展阅读
Java也是一种高级语言,要让计算机执行你撰写的Java程序,也得通过编译程序的编译。但是Java编译程序并不直接将Java源代码编译为相依于计算机平台的0、1序列,而是将其编译为字节码。
Java源代码的扩展名为.java,经过编译程序编译之后生成扩展名为.class的字节码。
② java 程序如何编译
JRE:是java运行所需要的环境,所以没有javac.exe
JDK:是java开发工具,包含了多java程序的编译工具,所以你还需要在安装一个JDK,一般JDK都会包含JRE,安装完JDK之后要设置一下环境变量Path,指向jdk安装目录下的bin目录。
③ 从思路开始 Java如何实现条件编译的技巧
条件编译绝对是一个好东西。如在C或Cpp中,可以通过预处理语句来实现条件编译。代码如下:
#IFDEF DEBUG#UNDEF DEBUG#ENDIF #define DEBUG #IFDEF DEBUUG /* code block 1 */#ELSE /* code block 2 */#ENDIF
但是在JAVA中却没有预处理,宏定义这些东西,而有时我们可能需要条件编译。那么,在JAVA中,该如何实现条件编译呢?
我们来看一个例子。
编写一个helloworld程序。代码如下:
public class Hello { public static void main(String[] args) { System.out.println("Hello, world!"); }}
保存为Hello.java并编译,得到一个class文件,并且观察到文件大小是417字节。然后我们对这个文件进行反编译,用jd-gui。得到代码如下:
import java.io.PrintStream;public class Hello { public static void main(String[] paramArrayOfString) { System.out.println("Hello, world!"); }}
得到这个有什么用呢?
现在我们再来对源代码进行修改,修改后的代码如下。
public class Hello { public static void main(String[] args) { if(false) { System.out.println("Hello, world!"); } }}
进行编译,这时我们再看它的大小,只有255字节。怎样?想到什么了吧?没错,编译器会对代码进行优化,对于条件永远为false的语句,JAVA编译器将不会对其生成字节码。
④ 如何编译java
用命令提示符编译java程序的步骤:
1.先新建文本文档,输入自己的java程序。
这里我写一个简单的java程序,来做示范。
import java.util.*;
public class HelloDate{
public static void main(String[] args)
{
System.out.println("Hello,it's:");
System.out.println(new Date());
}
}
经验总结:运行一个java程序的大概的流程是:
书写源代码------>编译------->运行---->结束。
注意事项:
1.在输入的时候一定要注意区分大小写。
2.操作之前要保证自己的电脑配置了java的运行环境。
⑤ Java 相关的编译技术
除了 Java 的编译器和虚拟机器之外 还有一些相关的编译技术 本文章试图做一个简单的说明 JIT 编译器 传统的 Java 虚拟机器很愚蠢 将一道 bytecode 的指令翻译成机器码之后 马上执行这些机器码 执行完这批机器码之后 就把这些机器码丢了 接液凳槐着再翻译下一道 bytecode 的指令 继续下去 即使下次执行到以前执行过的 bytecode 指令 依然要重新翻译成机器码才能执行 如此一来 效率当然不好 使用 JIT 编译器(Just In Time piler)技术的虚拟机器比较聪明 会把常常执行的部分在第一次先翻译好放在内存 以后再次执行到这里时 就不用再翻译 直接从内存取出机器码即可执行 这么一来 只要你的内存够大 JIT 编译器的技术够好 你的 Java bytecode 执行速度也可以逼近纯编译式的程序 其它程序语言的编译器 任何档案只要符合 Java bytecode 的格式 就可以被 Java 虚拟机器执行 制造出 Java bytecode 的方式有许多种 不一定要使用 Java 语言来写程序 才粗宴能编译成 Java bytecode Java 是语言也是平台 你可以不使用 Java 语言(也就是 Java 编译器) 只使用 Java 平台(也就是 Java 虚拟机器) 只要某语言有提供编译器 能将该语言的原始码编译成 Java bytecode 格式 就可以在 Java 平台上执行 据我所知 目前已经有下列语言提供兼容于 Java 平台的编译器(以英文字母闹友顺序排列) Aardappel Ada Agora BAMBOO Basic Bistro Bolero C C++ CLIPS COBOL Correlate Dawn E EcmaScript Eiffel Foo Forth Fortran Funnel Haskel Hojo javascript Jickle JIF Jinni Lisp LL LLP Logo Luck MINERVA Mini ML Mola NetRexx Nice Oberon Pascal PLAN Pnuts Prolog PS I Python Sather Scheme SELF Simkin Small Talk Tcl WebL Yassl Yoix Yoyo 原生编译器 如果你不在乎 Java 程序能否跨平台 你希望 Java 程序能如同 C/C++ 一般被编译成机器码而非 Java bytecode 那么你可以使用 Java 原生编译器(native piler) 目前已经有不少这样的产品可以使用 Java 原生编译器有两大类 一类可以把 Java 的原始码编译成机器码 另一类则可以把 Java bytecode 编译成机器码 反编译与混淆器 Java bytecode 因为档案格式简单 信息保留完整 且指令是最简单的堆栈式(stack based)架构等因素 所以很容易被反编译(de pilation) 反编译指的是和编译相反的过程 对 Java 来说 反编译就是把 Java bytecode 转换成 Java 原始码的过程 为了防止你辛苦地开发出来的 Java bytecode 被他人反编译成原始码 你可以透过混淆器(obfuscator)将你的 Java bytecode 转换成更混乱的 Java bytecode 执行起来效果一样 但是被混淆过的 Java bytecode 比较不容易被反编译 你通常要为此付出一点代价 因为混淆过的程序执行速度通常会变慢 且混淆器只能增加反编译的难度 不能保证你的程序一定无法被反编译成功 毕竟道高一尺 魔高一丈 如果有人愿意花许多时间和精力反编译你的 Java bytecode 你根本就无法拦阻 组译与反组译 汇编语言(assembly)是一种非常接近机器码的语言 将汇编语言转成机器码的工具称为组译器(assembler) 反过来将机器码转成汇编语言的工具称为反组译器(dissembler) 对于 Java 虚拟机器来说 Java bytecode 就如同它的机器码 有没有一种语言是很接近 Java bytecode 的呢?也就是说 Java 有没有的汇编语言呢?基本上 Sun 并未定义 Java 的标准汇编语言 但是有一些人定义了自己的 Java 汇编语言 并提供 Java 的组译器(甚至反组译器) 例如 Ja *** in 以及 javaa 都是 Java 组译器 前处理器 前处理器(pre processor)也称为前编译器(pre piler)或前翻译器(pre translator) 其目的在将源码中不符合语言规范的部分转换成符合语言规范的形式 比方说 我们可能在 ??????????Java 源码中除了使用 Java 语言之外 还穿插使用自订的语法 这些自订的语法无法被 Java 编译器处理 所以我们必须先透过一个前处理器来将自订语法的部分转换成 Java 语言 然后就可以交由 Java 编译器处理 目前有不少 Java 的前处理器 例如 iContract SQLJ 都是用来扩充 Java 语言之用的 最佳化工具软件 一般来说 最佳化有两种 让档案体积变小 可以节省储存空间并加快网络传送速度 让执行速度变快 对于 Java 来说 还有第三种最佳化 让程序结构变乱 不容易被反编译 也就是前面提到过的混淆(obfuscation) 这三个目的之间常常互相排挤 结构变乱 通常会使得程序变慢 且体积变大 体积变小 通常会使得速度变慢 且结构变整齐 速度变快 通常会使得体积变大 且结构变整齐 lishixin/Article/program/Java/hx/201311/27007
⑥ 用JAVA语言编译:数组中包含n个整数,从其中找出k个最小的数,写出你能想到的最快的方法!!!
最快k*O(n)~O(n),将前K个数放入一个k的数组中,按序放,对K+1到N的数,依次如果比K数组总的小,将K中最大的取出,放入最小的数,一直维持K个,最后就是最小的K个。
import java.util.Arrays;
/**先给数值里的值进行从小到大排序,取从0到k-1索引的数组值
* @创建一个数组,包含11个元素,求5个最小的数
* @author Administrator
public class ArrayTest {
public static void main(String[] args) {
//最小元素的个数
int k=5;
//创建一个数组,
int[] arr = {1,3,45,33,67,12,88,11,46,32,89};
//操作数组的工具Arrays,sort()方法自动排序,由小到大
Arrays.sort(arr);
for(int i=0;i<k;i++){
System.out.println(arr[i]);
}
(6)java编译技巧扩展阅读:
此处数组是程序中声明的变量数组。它们不同于控件数组,控件数组是在设计时通过设置控件的 Index 属性规定的。变量数组总是连续的;与控件数组不同的是,不能从一个数组的中部加载或卸载数组元素。
一个数组中的所有元素具有相同的数据类型(在C、C++、Java、pascal中都这样。但也并非所有涉及数组的地方都这样,比如在Visual Foxpro中的数组就并没这样的要求)。当然,当数据类型为 Variant 时,各个元素能够包含不同种类的数据(对象、字符串、数值等等)。可以声明任何基本数据类型的数组,包括用户自定义类型和对象变量。
⑦ 简述JAVA程序的编辑编译和运行过程
第一步(编译): 创建完源文件之后,程序会先被编译为.class文件。Java编译一个类时,如果这个类所依赖的类还没有被编译,编译器就会先编译这个被依赖的类,然后引用,否则直接引用,这个有点象make。
如果java编译器在指定目录下找不到该类所其依赖的类的.class文件或者.java源文件的话,编译器话报“cant find symbol”的错误。
第二步(运行):java类运行的过程大概可分为两个过程:1、类的加载 2、类的执行。需要说明的是:JVM主要在程序第一次主动使用类的时候,才会去加载该类。也就是说,JVM并不是在一开始就把一个程序就所有的类都加载到内存中,而是到不得不用的时候才把它加载进来,而且只加载一次。
特别说明:java类中所有public和protected的实例方法都采用动态绑定机制,所有私有方法、静态方法、构造器及初始化方法<clinit>都是采用静态绑定机制。而使用动态绑定机制的时候会用到方法表,静态绑定时并不会用到。
(7)java编译技巧扩展阅读:
Java整个编译以及运行的过程相当繁琐,本文通过一个简单的程序来简单的说明整个流程。
Java代码编译:是由Java源码编译器来完成;
Java字节码的执行:是由JVM执行引擎来完成
Java程序从源文件创建到程序运行要经过两大步骤:
1、源文件由编译器编译成字节码(ByteCode)
2、字节码由java虚拟机解释运行。因为java程序既要编译同时也要经过JVM的解释运行,所以说Java被称为半解释语言( "semi-interpreted" language)。
⑧ 怎样编译java程序
1.如果环境变量已配置,直接用以下命令进行编译和运行。(第二有配置方法)
编译命令:javac filename.java
运行命令:java filename
2.配置环境变量
Java的环境变量配置:
(两种方法任选一种皆可)
方法一:
依次点击:“我的电脑”-(右键)“属性”-“高级”-“环境变量”,弹出Windows的“环境变量”配置卡。
在“系统变量”栏下执行三项操作:
①新建“Classpath”(如果已有,则直接编辑),设置其值为 .;JDK所在的绝对路径值\lib
(例如 .;D:\Program Files\Java\jdk1.5.0_04)(若值中原来有内容,用分号与之隔开),
注意路径前的符号为.;不能漏掉
②新建“Path”(如果已有,则直接编辑),设置其值为 %Java_Home%\bin; (若值中原来有内容,用分号与之隔开)。
方法二:
依次点击:“我的电脑”-(右键)“属性”-“高级”-“环境变量”,弹出Windows的“环境变量”配置卡。
在“系统变量”栏下执行三项操作:
①新建“Java_Home”,设置其值为 JDK所在的绝对路径(例如 D:\Program Files\Java\jdk1.5.0_04)。
②新建“Classpath”(如果已有,则直接编辑),设置其值为 .;%Java_Home%\lib (若值中原来有内容,用分号与之隔开)。
注意路径前的符号为.;不能漏掉
③新建“Path”(如果已有,则直接编辑),值: %Java_Home%\bin; (若值中原来有内容,用分号与之隔开)。