10.1.1包的定义
利用包进行一组相关类的管理,这样的程序代码更易于维护,也可以避免代码开发中因为命名所造成的代码冲突问题。所谓的包实际上是指文件夹,在java中可以使用package定义包名称,此语句必须编写在源代码的首行。
范例:定义包
package cn.mldn.demo ; // 定义包,其中.表示子目录(子包)
public class Hello {
public static void main(String args[]) {
System.out.println("www.mldn.cn") ;// 看到此语句是不是很亲切?觉得很容易?
}
}
程序编译与执行
打包编译处理:javac -d . Hello.java
- “-d”:表示要生成目录,而目录的结构就是package定义的结构;
- “.”:表示在当前所在的目录中生成程序类文件;
执行命令:java cn.mldn.demo.Hello
提示:项目中必须提供包,进行包名称时所有字母要求小写。
10.1.2包的导入
利用包的定义可以将不同功能的类保存在不同的包中实现分模块开发的需求,但是不同包中的类彼此之间也一定存在相互调用的关系,那么需要import语句来引导被调用的其他包中的程序类。
范例:定义一个程序类“cn.mldn.util.Message”,这个类负责进行一个消息数据获取
package cn.mldn.util; // cn.mldn是父包,util是子包
public class Message {
public String getContent() { // 定义方法返回信息
return "魔乐科技在线学习:www.mldn.cn";
}
}
本程序定义了一个Message类,由于此类需要被其他类所引用,所以应该首先编译此程序(javac -d.Message.java)
注意:如果一个包中的类要想被其他包中的类所使用,那么这个类一定要定义为public class ,而不是class声明。因为class声明的类只能在同一个包中使用。
总结:关于public class和class定义类的区别?
- public class:文件名称和类名称保持一致,在一个*.java文件中只能存在一个public class定义,如果一个类要想被外部的包所访问必须定义为public。
- class:文件名称可以和类名称不一致,在一个*.java中可以同时存在多个class定义,并且编译完成之后会形成多个*.class文件,使用class定义的类只能够在一个包中访问,不同包无法访问。
范例:定义一个测试类使用Message类“cn.mldn.test.TestMessage”引用Message类。
package cn.mldn.test; // cn.mldn是父包,test是子包
import cn.mldn.util.Message; // 导入其它包的类
public class TestMessage {
public static void main(String args[]) {
Message msg = new Message(); // 实例化类对象
System.out.println(msg.getContent());// 调用方法获取信息
}
}
提示:“import 包.*”的导入模式不影响程序的性能
范例:自动导入处理,修改cn.mldn.test.TestMessage类
package cn.mldn.test;
import cn.mldn.util.*; // 导入其它包的类
public class TestMessage {
public static void main(String args[]) {
Message msg = new Message(); // 实例化类对象
System.out.println(msg.getContent()); // 调用方法获取信息
}
}
提问:不同的包相同类导入
答:同时采用“import包.*”导入不同包时相同的类名称产生冲突,这就需要需要在实例化使用时写上类全名
例如:cn.ll.util.Message mag=new cn.ll.util.Message mag();