包的定义

利用包的定义实际上就可以将不同的功能类保存在不同的包之中,但是这些类彼此之间一定会存在有互相调用的关系,那么在这个时候就需要使用import语句来导入其他包中的程序类。

范例:定义一个程序类“cn.mldn.Message”,这个类负责进行一个消息数据的获取。

package cn.mldn.util;
public  class Message 
{
	public String getContent() 
	{
		return "我是Message类";
	}
}

范例:定义一个测试类使用Message类“cn.mldn.TestMessage”。

public cn.mldn.test;
import cn.mldn.util.Message;//导入其他包的类
public class TestMessage 
{
	public static void main(Srting[] args){
		Message msg = new Message();//实例化类对象
		System.out.println(msg.getContent());

	}
}

此时按照使用顺序来讲肯定要先编译Message.java,而后再编译TestMessage.java,但是如果一个程序代码里面有100个类,彼此之间互相引用严格,此时最好的做法不是区分顺序,而是交给java自己完成。

编译的命令:javac -d.*.java;

  • javac:编译
  • -d:打包
  • “*” :所有
  • .java:格式

结果:我是Message类

特别注意:关于public class 与class定义的区别?

  • public class:类名称与文件名称保持一致,一个*.java里面只允许有一个public class,同时如果一个类需要被其他包的类所使用,那么这个类一定要定义为public class。
  • classs:类名称可以与文件名称不一致,并且在一个*.java里面可以提供多个class定义,编译后将形成不同的*.class文件,这些类只能被本包所访问,外包无法访问。
  • 在实际开发之中往往在一个*.java源代码文件里面只会提供有一个程序类,而这个程序类一般都是用public class定义。

程序类中定义的包名称必须采用小写的形式定义。

问题1:

这时候会有一个新的问题产生,有些时候可能会使用某一个包中的很多类,于是这样分开进行类的导入会比较麻烦,为了解决这样的问题也可以使用通配符

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());
	} 
}

即便此时使用了“包.*”的导入形式,也不表示要进行全部的加载,它会根据自己的需要加载所需要的程序类,其他类不会被加载。所以是使用"*"还是使用具体的类,其最终的性能是完全相同的。

问题2:

但是如果在开发之中采用的是“包.*”的形式进行包的导入时,那么有一点会比较麻烦,有可能两个不同的包中有相同的类名称,例如:假设TestMessage类由于某种需要要导入两个包:cn.mldn.util、org.demo,这两个包里都有Message类。

//第一个类
package cn.mldn.util;
public  class Message 
{
	public String getContent() 
	{
		return "我是Message类";
	}
}
 
//第二个类
package org.demo;
public  class Message 
{
	public String getInfo()() 
	{
		return "我也是Message类";
	}
}

两者包名不同,由于某种需要,在TestMessage导入了两个包。

package cn.mldn.test;
import cn.mldn.util.*;
import org.demo.*;
public class TestMessage
{
	public static void main(String[] args){
		Message msg = new Message();	//实例化类对象
		System.out.println(msg.getContent());
	} 
}

在这里插入图片描述
这个时候发现类名称相同的时候就会出现不明确的引用处理,所以此时最简单的处理形式就是直接写上类的完整名称。

package cn.mldn.test;
import cn.mldn.util.*;
import org.demo.*;
public class TestMessage
{
	public static void main(String[] args){
		cn.mldn.util.Message msg = new cn.mldn.util.Message();	//实例化类对象,加上完整包名称
		System.out.println(msg.getContent());
	} 
}

在日后的开发过程中,经常会见到大量的重名的类(包不重名),此时为了更好的解决问题,往往会使用类的完整名称进行操作。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值