您的位置:首页 > 移动开发 > Android开发

一---Android-SDK系列文章(3) ---java(自己动手编译、运行Java程序)

2015-05-29 13:41 711 查看

一、开发环境

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 工具开发,以提高效率。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: