课时101:包的导入

简介: 课时101介绍了包的导入操作及示例,涵盖以下内容:1. 包的导入操作及示例,包括使用`import`语句导入其他包中的类;2. `public class`与`class`的区别,前者可跨包访问,后者仅限本包;3. 使用通配符`*`导入整个包;4. 解决类名冲突问题,通过使用类的完整名称(包括包名)来引用类。示例代码展示了如何定义和导入类,以及处理不同包中同名类的冲突问题。

课时101:包的导入

摘要:

1. 包的导入操作及示例

2. public class 与 class 的区别

3. 使用通配符 * 导入包

4. 解决类名冲突问题

 

01.  包的导入操作及示例

 

利用包可以将不同功能的类保存在不同的包之中,然而,这些类彼此之间常常存在互相调用的关系,为了实现类之间的调用,需要使用 Import 语句导入其他包中的类。

 

范例1:定义一个程序类 “ cn.mldn.util.Massage  

注:这个类负责进行一个消息数据获取。

 

1.1新建 Massage.java 文件


代码如下:

package cn.mldn.util;
public class Massage {
    public String getContent(){
        return "www.mldn.cn";
    }
}

 

1.2新建  TestMassage.java 文件,


注:包名需要全部相同才是同一个包。

代码如下:

package cn.mldn.test;
import cn.mldn.util.Message; //程序需要导入其他包的类
public class TestMassage {
    public static void main(String[] args) {
        Message meg = new Message(); //实例化类对象,使用这个类
        System.out.println(msg.getContent() ) ;//实现语句
    }
}

 

注:此时按照使用顺序来讲,肯定要先编译 Massage.java ,而后编译 TestMassage.java 。但是如果现在写一个程序代码里面有大概一百个类,彼此之间互相引用严格,该如何区分?此时最好的做法不是区分顺序,而是直接交给 Java 自己完成。

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


运行结果如下:

image.png

 

02.  public class 与 class 的区别

 

范例:把 Massage 里面的 public 删除,与文件 cn 删掉

代码如下

package cn.mldn.util;
class Massage {
    public String getContent(){
        return "www.mldn.cn";
    }
}

编译结果如下, TestMassage 报错,

image.png

注意:public classclass 定义的区别?

(1) 在实际开发中,通常在一个  *.java  源代码文件中只提供一个程序类,并且这个程序类一般使用  public class  定义。 包名通常使用小写字母形式定义,例如  cn.mldn.util

(2) public class : 类名称必须与文件名称保持一致,一个 *.java文件中只允许有一个 public class ,如果一个类需要被其他的包所使用,那么这个类一定要定义为 public class

(3) class :类名称可以与文件名称不一致,并且在一个 *.java 文件里里面可以提供多个 class 定义,编译后将形成不同的*.class文件,但是这些类只能够被本包所访问,外包无法访问

 

03. 使用通配符 “ *“

 

当需要使用一个包中的多个类时,可以使用通配符  *  导入整个包,从而避免逐个导入类。

package cn.mldn.test;
import cn.mldn.util.*; // 导入其他包的类,将具体内容变为 “ * ” 
public class TestMassage {
    public static void main(String[] args) {
        Message meg = new Message(); // 实例化类对象
        System.out.println(msg.getContent());
    }
}

修改代码后运行结果如下

image.png

注:即便使用了“ 包.*“ 的导入形式,也并不意味着要加载包中的所有类。 编译器会根据实际需要加载所需的程序类,而不会加载不需要的类。 因此,使用  *  和使用具体的类名在最终性能上是相同的。

 

04.  类名冲突问题

 

在开发中采用的是“ 包.* ”的形式进行包的导入时,可能会遇到类名冲突的问题即有可能两个不同的包中存在有相同的包名称,例如,现在假设 TestMessage 类由于某种需要导入两个包:cn.mldn.util、org.demo,这两个包里面都有 Message 类。

范例:cn.mldn.util.Massageorg.demo.Massage

把 message.java 类修改为

package org.demo;
public class Massage {
    public String getInfo (){
        return  "人名万岁!";
    }
}
注:与之前的 message.java 不同 
package cn.mldn.util;
public class Massage {
    public String getContent(){
        return "www.mldn.cn";
    }
}

 

TestMassage.java 内代码为

package cn.mldn.test;
import cn.mldn.util.*; // 导入其他包的类
import org.demo.*;//要导入两个不同的包,且都有 Message
public class TestMassage {
    public static void main(String[] args) {
        Message meg = new Message(); //实例化类对象
        System.out.println(msg.getContent());
    }
}

此时进行程序编译,输入 : javac -d . Message.java  ,  javac -d . TestMessage.java 结果为:

image.png

结果显示,两个 Message 类都匹配,引用不明确

这个时候就会发现类名称相同时会出现不明确的引用处理,为了解决类名冲突问题,最简单的方法是使用类的完整名称(包括包名)来引用类。 例如:

cn.mldn.util. Message meg = new cn.mldn.util. Message();

再次编译,程序可以正常运行:

image.png

 

注:在实际开发中,经常会遇到大量重名的类(包名不重名)。 为了更好地解决类名冲突问题,通常建议使用类的完整名称进行作。

相关文章
|
SQL 分布式计算 数据库
【大数据技术Spark】Spark SQL操作Dataframe、读写MySQL、Hive数据库实战(附源码)
【大数据技术Spark】Spark SQL操作Dataframe、读写MySQL、Hive数据库实战(附源码)
696 0
|
开发框架 网络协议 Ubuntu
【Linux】配置网络和firewall防火墙(超详细介绍+实战)
【Linux】配置网络和firewall防火墙(超详细介绍+实战)
4981 0
|
存储 缓存 NoSQL
利用Redis List实现数据库分页快速查询的有效方法
利用Redis List实现数据库分页快速查询的有效方法
|
机器学习/深度学习 算法 测试技术
Python中实现多层感知机(MLP)的深度学习模型
Python中实现多层感知机(MLP)的深度学习模型
831 0
|
8月前
|
存储 安全 测试技术
零基础必看!Win10系统重装图文详解+安全下载链接,避坑神器
本教程详细介绍了重装Win10系统的完整流程,包括准备工作、制作启动盘、BIOS设置、系统安装、驱动安装与优化以及常见问题解决。准备工作中需确保U盘容量、下载官方镜像并备份重要数据;通过微PE工具箱制作启动盘;调整BIOS设置以支持U盘启动;使用DiskGenius分区并借助WinNTSetup加载镜像完成安装;最后优化系统性能并解决可能的故障,确保安装顺利进行。
基于粒子滤波器的电池剩余使用寿命计算matlab仿真
本研究基于粒子滤波器预测电池剩余使用寿命(RUL),采用MATLAB2022a实现。通过非线性动力学模型模拟电池老化过程,利用粒子滤波器处理非线性和非高斯问题,准确估计电池SOH变化趋势,进而预测RUL。系统仿真结果显示了良好的预测性能。
|
存储 安全 算法
网络安全与信息安全:构建防线的三大支柱
本文旨在深入探讨网络安全与信息安全领域的关键要素,聚焦于网络安全漏洞、加密技术及安全意识三大核心方面。通过阐述每个概念的基本定义、重要性以及实践应用,本文揭示了它们在保护数据免受未授权访问和攻击中的作用。同时,文章强调了综合运用这些策略来构建坚固的信息安全防线的重要性。
|
机器学习/深度学习 人工智能 自然语言处理
什么是多层感知器(MLP)?
【8月更文挑战第23天】
2242 0
|
Python
PyEMD包安装导入踩坑
PyEMD包安装需要注意的地方
1379 1