利用包的定义可以将不同功能的类保存在不同的包中以实现分模块开发的需求,但是不同包中的类批次之间也一定存在有相互调用的关系,那么这时候就需要使用import
语句来导入被调用的其他包中的程序类。
比如说:
// priv.zll是父包,demo是子包
package priv.zll.demo ;
public class Hello {
public String getContent() {
// 定义方法返回信息
return "Hello World!" ;
}
}
这个程序定义了一个Hello
类,由于此类需要被其他类所引用,所以应该首先编译此程序(命令行操作:javac -d .Hello.java
)。
注意:定义时必须要使用public class
声明。
如果一个包中的类想被其他包中的类所使用,那么这个类一定要定义为public class
,而不能使用class
声明,因为class
声明的类只能够在同一个包中使用,这一点涉及访问权限问题,下一篇博客再详细解释(其实是我也没搞清楚)。
总结:关于public class
和class
定义的区别。
(1)public class
:文件名称和类名称保持一致,在一个*.java
文件中只能够存在一个public class
定义,如果一个类想要被外部的包所访问必须定义为public
。(2)class
:文件名称可以和类名称不一致,在一个*.java
中可以存在多个class
定义,并且编译完成之后会形成多个*.class
文件,使用class
定义的类只能够在一个包中访问,不同包无法访问
例:定义一个测试类使用Hello
类:priv.zll.test.TestHello
,引用Hello
类
// priv.zll是父包,test是子包
package priv.zll.test ;
// 导入其他报的类
import priv.zll.demo.Hello ;
public class TestHello {
public static void main(String args[]) {
// 实例化类对象
Hello hello = new Hello() ;
// 调用方法
System.out.println(hello.getContent()) ;
}
}
程序执行结果:Hello World!
上面的程序实现了不同包中类的引用,在TestHello
类中需要使用import
语句导入指定的类,这样就可以直接实例化类对象并进行相应方法调用。
在进行不同包类的导入时,除了使用import 包.类
名称的形式之外,还可以使用import 包.*
的通配符形式自动进行导入处理(我也不是很懂,待明天深入学习之后再做补充)。
再Java
中无论是使用import 包.*
导入或是单独导入,从实际的操作性能上来讲是没有任何区别的,因为即使是使用了*
也表示只导入所需要的类,不需要的并不导入(有一个待深入学习的地方)。
例:使用自动导入处理,修改priv.zll.test.TestHello
类,与上面的例子等价
// priv.zll是父包,test是子包
package priv.zll.test ;
// 自动导入处理
import priv.zll.demo.* ;
public class TestHello {
public static void main(String args[]) {
// 实例化类对象
Hello hello = new Hello() ;
// 调用方法
System.out.println(hello.getContent()) ;
}
}
程序执行结果:Hello World!
这么做的一个好处就是在TestHello
引用priv.zll.demo
包中的多个类的时候就以减少import
语句的编写数量。
如果要引用不同包中的累的话,就需要导入两个或者更多的包,不同包中的类名称可以相同,为避免名称引用不明确而导致的编译错误,就必须明确的写上要实例化对象的完整名称(即完整的路径)。
时间过得真快,我的文章写好后都已经过了00:00了,赶紧发表睡觉喽。