一、开发环境
1.集成开发环境
配置Java运行时环境(JDK)、Eclipse、NetBeans这些开发工具
2.独立开发环境
仅需要配置Java运行时环境(JDK):
(1)下载jdk解压;
(2)修改环境参数/etc/bash.bashrc:
#add fot aosp build tony/2015/1/13
export JAVA_HOME=/opt/java/jdk1.6.0_45
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JRE_HOME/lib
export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin:$JAVA_HOME/lib:$JAVA_HOME
二、代码的编译以及运行
对于写Java程序而言,我们主张源文件与class文件都有相同的目录结构,这样不仅会方便代码的组织管理,也使得在编译以及运行Java程序时少犯错误。
1:位于默认包下的文件的编译以及运行(没有显式写package的.java文件文件都是属于默认包的)
(1)查看源文件Test.java && A.java
(我们发现这两个Java文件中并没有package语句,所以这两个文件同属于一个默认包中。)
//src/Test.java
public class Test {
public static void main(String[] args){
A a = new A();
a.setValue(10);
System.out.println(a.getValue());
}
}
//src/A.java
class A{
private int value;
public A(){
value = 0;
}
public void setValue(int var){
value = var;
}
public int getValue(){
return value;
}
}
(2)编译java:javac Test.java
(3)运行java:java Test
2:位于自定义package(包)的文件的编译以及运行(显式写package)
(1)查看源文件Test.java && A.java
///src/a_package/A.java
package a_package;///使用package
public class A{
private int value;
public A(){
value = 0;
}
public void setValue(int var){
value = var;
}
public int getValue(){
return value;
}
}
///src/Test.java
import a_package.*;///使用package
public class Test{
public void static void main(String[] args){
A a = new A();
a.setValue(10);
System.out.println(a.getValue());
}
}
(2)编译java:javac Test.java
要想成功编译java文件,需要有classpath 和 PACKAGE 包名的共同配合。
.CLASS类发现规则:class文件所在目录 = classpath + '\' + 包名(包名中的'.'全变成'\')
!!!!!Java就是靠这个规则来寻找需要的class文件的。
(3)运行java:java Test
运行指定了package程序时,需要显示的写出其包名,即:java packagename.classname,其遵循与class文件一样的寻找规则,即在classpath+packagename中'.'变成'\' 所表示的路径下能够找到相应的classname所指的class文件。
三、关于JAR包:如何打jar包以及使用jar包?
0.何为jar包?
JAR(Java Archive,Java 归档文件)是与平台无关的文件格式,它允许将许多文件组合成一个压缩文件。为 J2EE 应用程序创建的 JAR 文件是 EAR 文件(企业 JAR 文件)。
JAR 文件格式以流行的 ZIP 文件格式为基础。与 ZIP 文件不同的是,JAR 文件不仅用于压缩和发布,而且还用于部署和封装库、组件和插件程序,并可被像编译器和 JVM 这样的工具直接使用。在 JAR 中包含特殊的文件,如 manifests 和部署描述符,用来指示工具如何处理特定的 JAR。
1.如何打jar包--概述?(参见:http://lishumingwm163-com.iteye.com/blog/954061)
(1)打包根目录下面的文件: jar cvf filename.jar a.class b.class
(2)打包带package的文件:jar cvf filename.jar foldername 或 jar cvf filename.jar foldername\*
(3)打包可执行jar包(有main入口的):
A.先配置manifest.mf文件,内容如下:
Main-Class: com.TestBean///指定入口函数,说明默认执行com.TestBean的main函数。
Class-Path: lib\classes12.jar///配置依赖jar包
B.打包方法:jar cvfm filename.jar manifest.mf(指定配置文件) *.class(class包) lib\classes12.jar(依赖包)
或者同(2)
C.执行方法:java -jar filename.jar
下面一一介绍。
2.打包jar包 以及 使用jar包?(针对属于默认包的class文件打包:无package显示)
(1)打包:(前提是:已经编译完成的class文件(含java源文件))
A.java源文件如下:
public class A{
private int value;
public A(){
value = 0;
}
public void setValue(int var){
value = var;
}
public int getValue(){
return value;
}
}
打包命令:
tonylau@tonylau-OptiPlex-780:~/test-jar-1$jar -cvf test.jar A.class
added manifest
adding: A.class(in = 345) (out= 248)(deflated 28%)
tonylau@tonylau-OptiPlex-780:~/test-jar-1$
(2)使用jar包:如果对属于默认包的class文件打包,则只要把jar包路径添加到classpath中即可使用,无需再在程序中使用import。测试实例如下:
test_jar.java
public class test_jar{
public static void main(String[] args){
A a = new A();
}
}
3.打包jar包 以及 使用jar包?(针对属于非默认包的class文件打包:有package显示)
(1)将要打包成jar的package:a_package (其下) 以及 测试(使用jar包)的测试程序test_jar_package.java
<span style="font-size:18px;">//D:<span style="font-size:18px;">a_package</span>/A.java
package <span style="font-size:18px;"> a_package</span>;
public class A{
private int value;
public A(){
value = 0;
}
public void setValue(int var){
value = var;
}
public int getValue(){
return value;
}
}</span>
(2)打包jar包:jar -cvf a-package.jar a_package/(前提是a-package文件夹下的A.java 已经编译完成如(1)所示)
(!如果对属于默认包的class文件打包,则只要把jar包路径添加到classpath中即可使用,无需再在程序中使用import!)
打包后的jar文件是:a-package.jar
该jar包的具体组成是:
(3)测试实例------编译运行测试程序:使用jar包
import a_package.*;/必须得有此import,因为A.class位于a_package包中。如果不写则编译不通过。
///!如果对属于默认包的class文件打包,则只要把jar包路径添加到classpath中即可使用,
///无需再在程序中使用import!)
public class Test{
public static void main(String[] args){
A a = new A();
a.setValue(10);
System.out.println(a.getValue());
}
}
4.打包jar包 以及 使用jar包?(可以直接运行的jar包: java -jar test.jar=====必须保证有main()入口)
(可以参见:http://jingyan.baidu.com/article/3c48dd344a2146e10be3588c.html)
(1)待测试源码的编译:
///test/test_jar.java
package test; //指定上级文件夹(package)的名字
public class test_jar{
public static void main(String[] args){
System.out.println("hello jar...!");
}
}
///javac test_jar.java
(2)打包已经编译好的源码为jar包(jar cvf my-test.jar test/)
(3)修改manifest脚本:添加主函数入口(main)---即添加最后一行(注意:后有空格额!)
打开可以使用
(4)运行jar 文件(java -jar my-test.jar)
四、利用Makefile自动编译运行Java程序
下面给出一个简单的例子:这个例子中,没有手动设置Windows的环境变量,而是用-classpath指定,这样方便在不同机器之间移植。
1.项目结构
(1)make 前(编译前)(只含有java源文件和某些目录)
(2)make 后(编译后)(包含最终生成的class文件)
2.项目源码
<span style="font-size:18px;">//A.java
package package1;
public class A{
private int value;
public A(){ value = 0; }
public void setValue(int var){
value = var;
}
public int getValue(){
return value;
}
}
//B.java
package package1;
public class B{
private String name;
public B(){ name = null; }
public void setName(String name){
this.name = name;
}
public String getName(){
return name;
}
}
//C.java
package package2;
public class C{
private String name;
public C(){ name = null; }
public void setName(String name){
this.name = name;
}
public String getName(){
return name;
}
}
//Test.java
import java.util.*;
import package1.*;
import package2.*;
public class Test{
public static void main(String[] args){
A a = new A();
B b = new B();
C c = new C();
a.setValue(3);
b.setName("Java");
c.setName("Test");
System.out.println(a.getValue());
System.out.println(b.getName());
System.out.println(c.getName());
}
}</span>
<span style="font-size:18px;">//Makefile
target:
javac ./package1/A.java -d ../classes
javac ./package1/B.java -d ../classes
javac ./package2/C.java -d ../classes
javac ./main/Test.java -d ../classes/main/ -classpath ../classes
run:
java -classpath ../classes/main;../classes Test
clean:
rm -rf ../classes/package1/*.class
rm -rf ../classes/package2/*.class
rm -rf ../classes/main/*.class</span>
解析makefile:编译/运行java文件时,都可能需要用到 .class 文件,因此需要指定classpath的路径
3.项目编译&&运行
(1)编译:
make
D:\Java\project\src>make
javac ./package1/A.java -d ../classes
javac ./package1/B.java -d ../classes
javac ./package2/C.java -d ../classes
javac ./main/Test.java -d ../classes/main/ -classpath ../classes
(2)运行:
make run
D:\Java\project\src>make run
java -classpath ../classes/main;../classes Test
3
Java
Test
这样,其实我们完全可以不用Eclipse、Netbeans等开发工具就能自己编译运行自己的系统了。当然这仅仅是限于小工程或是更好的理解编译/运行java程序的过程,对于大型工程还是需要IDE 工具开发,以提高效率。