包实际上就是一个文件夹,在程序中使用package进行定义,语法如下:
package
包名
;
|
例如:把以下的程序放在一个包中:
package demo.test ;
public class Demo33{
public static void main(String args[]){
System.out.println("Hello World!!!") ;
}
};
|
如果要想成功的使用以上包中的类,则必须在编译的时候建立好相应的文件夹。
可以使用如下的命令编译程序:
javac -d . Demo33.java
· “-d”:表示建立一个新的文件夹,文件夹的名字为package定义的名字
· “.”:表示在当前所在的目录中建立此文件夹
如果现在已经成功的编译完之后,则在运行的时候就必须写上完整的包.类名称,如上面程序:
java demo.test.Demo33,而不能说进入到目录中执行。
那么也可以定义很多的包,例如,现在在test.demo1下建立一个Demo类,此Demo中有一个打印“Hello World”的方法。
package test.demo1 ;
class Demo{
public void print(){
System.out.println("Hello World!!!") ;
}
};
|
那么此时,要对包进行编译。
下面再建立一个Demo34.java的类,在此类中要使用Demo类。那么也就是说要在Demo34.java中导入所需要的包.类。假设:Demo34.java定义在test.demo2中。
package test.demo2 ;
//
导入所需要的包
import test.demo1.Demo ;
à
在此处导入了所需要的包
public class Demo34{
public static void main(String args[]){
new Demo().print() ;
}
};
|
下面执行程序,观察效果:出现了以下错误:
Demo34.java:3: test.demo1.Demo
在
test.demo1
中不是公共的;无法从外部软件包中对
其进行访问
import test.demo1.Demo ;
^
Demo34.java:6:
找不到符号
符号:
类
Demo
位置:
类
test.demo2.Demo34
new Demo().print() ;
^
2
错误
|
注意:
如果一个类想被包外的类所访问,则此类必须声明为public类型。
修改Demo.java,声明为public class
package test.demo1 ;
public class Demo{
public void print(){
System.out.println("Hello World!!!") ;
}
};
|
那么一般情况下导包的语句要使用import,那么以上的代码是分别导入的。如果要导入一个包中的类很多,则可以直接使用“*”代替,那么实际上导入“*”与分别导入是一样的,因为,它只会导入自己所需要的类,不需要的类根本不会导入。
但是一般情况下,如果做好了一系列的类,肯定要放在一个包中,而且不能把全部的*.class文件给用户,因为会很麻烦,所以在JAVA一般可以把所有的*.class打成*.jar的包,使用*.jar包就可以保存全部要使用的*.class文件了。
建立Hello.java类
package org.lxh.demo ;
public class Hello{
public String sayHello(String name){
return "
你好,
" + name ;
}
};
|
编译完成之后,使用JAR命令打包:
jar -cvf my.jar org
· “c”:创建新的文件
· “v”:显示详细的信息
· “f”:指定文件的名子
· org:要打成*.jar的包名称
建立测试类:
package demo ;
import org.lxh.demo.* ;
public class TestHello{
public static void main(String args[]){
Hello h = new Hello() ;
System.out.println(h.sayHello("
张三
")) ;
}
};
|
打包编译出现了以下的错误:
TestHello.java:2:
软件包
org.lxh.demo
不存在
import org.lxh.demo.* ;
^
TestHello.java:5:
找不到符号
符号:
类
Hello
位置:
类
demo.TestHello
Hello h = new Hello() ;
^
TestHello.java:5:
找不到符号
符号:
类
Hello
位置:
类
demo.TestHello
Hello h = new Hello() ;
^
3
错误
|
虽然此时TestHello与my.jar在同一个文件夹之中,但是如果要想正确的使用*.jar的文件,则必须设置classpath:set classpath=e:/testjava/my.jar;.