ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

[软构博客]关于java中包package、子包及导入import的理解和用法

2021-06-17 18:31:33  阅读:272  来源: 互联网

标签:中包 sub java lee package 导入 import 类名 Apple


包与子包

  • 什么是一个包?

包(package)是一系列功能相关的类放在一起组成的类库单元。简单地说,包就是一系列功能相关的类的集合。

  • 那么为什么要引入包的概念呢?

这是为了解决类的重名冲突。
生活中,我们都会遇到同学重名的情况:两同学,都叫张三,那么我们都是如何将他们呢加以区分的呢?
我们通常是不是采取给他们添加前缀的方式来对他们加以区分:如果他们属于不同的班级,分别属于1班,2班,我们就会说1班的张三。

同样,对于类而言,我们采取为他们添加包名前缀的方式,来对他们进行区分。比如说:对于两个类,名字都叫做love,我们就会说它是slong包下的love类啊,还是其他包比如sophie包下的love类啊来进行区分。同时使用的时候,我们也也应该如此,采用包名+类名的方式来对其进行使用:slong.Love 或者是sophie.Love而不是直接使用Love//包名通常采用小写,类名通常首字母大写

但是随着类和包的数量越来越大,可能发生包名和类名都重复的情况。这种情况下,我们还是采用添加前缀的方式,进行区分,还是之前的例子:1班的张三,2班的张三,添加学校前缀,振华中学的1班的张三,和金水中学的1班的张三。由此就衍生出了子包的概念。这里1班就是振华中学的子包。当数量继续增大的时候,还是采用同样添加前缀的方式。。。。
那么使用相应类的时候,需要将完整包名+类名(父包.子包.+…+类)进行调用即:a.slong.Love

  • 如何定义一个包及其子包?

一个源文件中只能有指定一个包,即只能包含一个package语句,并且此语句作为源文件的第一条非注释性语句。之后在此文件中便可以定义多个类,这些类就将全部位于该包下。

包的定义:

/*
这是一个文件
定义一个包
*/
package lee;
public class HelloTest
{
....
}

class ByeTest
{
....
}

子包的定义也是一样:

/**
定义一个子包
*/
package lee.sub;
public class Apple{}

注意同一个包的类之间直接使用相应的类名进行访问,但不同的包之下的类之间必须使用完整的类名进行访问,即使用完整包名+类名的方式进行访问使用。值得注意的是,虽然子包可以表明子包是父包中的一个模块,但是如果父包中的类调用子包中的类进行对象的创建的时候,仍然需要使用子包的全名,而不能省略父包的部分。
比如:如果想在父包中的HelloTest中调用lee.sub包中的Apple类进行对象的创建的话,则需要使用以下代码

package lee;
public class HelloTest
{
	lee.sub.Apple a = new lee.sub.Apple();
}
/*
不能省略父包的部分,使用sub.Apple a = new sub.Apple();进行创建
*/

导入包

当需要使用不同包内的其他类的时候,虽然使用完整类名,已经能够满足我们的使用,但是当完整类名很长的情况下,就会给编程带来麻烦。因此为了简化编程,java中引入了import关键字,进行导入。
导入包分为两种情况:
1,导入包下的某个类或者全部类(导入类),用到import
2,导入指定类的某个静态成员变量,方法(导入静态方法或者变量),用到import static

在进行导入包之后,使用相关类和变量和方法的时候,就可以省略包名,直接使用相应的类名、变量名和方法名即可,这样就简化了编程。
具体用法如下:

/*
我们使用import 关键字来导入其他包中的类,
用import static 关键字来导入其他包中的静态变量和方法
*/
//引入其他包中的某个指定类
import java.lang.System;

//引入其他包中的所有类,但是这里的所有类并不包含其子包中的定义的类
import java.lang.*;

//引入其他包中所有的静态变量和静态方法
import static java.lang.System .*;
import static java.lang.Math .*;
public class Test
{
	out.println(PI);
	//out 是Systerm类中的静态成员变量,代表标准输出
	//PI是java.lang.Math类中的静态成员变量,表示Π常量
	out.println(sqrt(256));
	//直接调用Math类中的sqrt静态方法
}

那么之前调用lee.sub子包中的Apple类的时候进行对象的创建,必须使用完整类名lee.sub.Apple
现在我们就可以利用import导入,简化为就可以简化为如下代码:

package lee;
import lee.sub .*;
public class HelloTest
{
	Apple a = new Apple();
}

最后需要指明,import和import static语句的位置,其应该放在package语句之后,类的定义之前。一个源文件中只能有一条package语句来说明这个源文件中所有类在哪一个包中,但是可以有多条import语句进行导入,并且这多条import语句之间没有顺序要求。

标签:中包,sub,java,lee,package,导入,import,类名,Apple
来源: https://blog.csdn.net/qq_49086305/article/details/117994677

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有