第八章总结

8.1 Java类包
Java类包是指将多个相关的类或接口放在同一个命名空间下的一种机制。类包是Java中的一种管理机制,也是Java程序设计中最基本的组织单元之一。Java类包可以避免类的名称冲突,提高代码的复用性,并且能够更好地组织代码。

类包由多个Java类或接口组成,它们共同提供一些相关的功能。通常,类包是按照功能、类型、用途等特征进行分类的,以方便程序员管理和使用。Java类包是用package关键字定义的,一般位于Java源文件的第一行。

Java类包具有以下特点:

1.名称唯一:Java类包的名称在全局内唯一,这样可以避免不同类库之间的命名冲突。

2.命名规范:Java类包的命名应该遵循命名规范,通常使用倒置的域名来命名,以避免冲突。

3.文件结构:Java类包的源代码应该按照其包名来组织,即每个包都应该有一个相应的文件夹,文件夹内包含该包下所有的源代码文件。

4.访问权限:Java类包中的类可以通过不同的访问权限进行控制,以保护代码的安全性和可维护性。

总之,Java类包是Java中用于组织和管理类和接口的机制,它能够提高代码的可重用性和可维护性。Java标准库中包含了大量的类包,而且Java开发者也可以创建自己的类包,方便自己的开发工作。

8.1.1 类名冲突
类名冲突是指在同一个代码文件或不同的代码文件中,出现了相同的类名。这个问题通常会导致编译错误和运行时错误。

在Java中,每个类必须有一个唯一的类名。如果在同一个包中有两个或多个类具有相同的名称,则编译器将无法区分它们。如果在不同的包中有两个或多个类具有相同的名称,则需要使用完全限定的类名(即包名加类名)来引用它们,以避免类名冲突。

如果出现类名冲突,编译器会报告错误,以指示问题的位置和原因。为了解决这个问题,可以采用以下几种方法:

1.更改类名:为了避免类名冲突,可以更改一个或多个类的名称。

2.使用完全限定的类名:如果两个类具有相同的名称,并且它们不在同一个包中,则可以使用完全限定的类名来引用它们。

3.使用不同的包:将两个具有相同名称的类放在不同的包中,也可以避免类名冲突。

8.1.2 完整的类路径
编写Java程序经常要用到string类,其实string类并不是它的完整名称,就如同一个人需要有名有性一样,String类的完整名称如图所示


可以看出,一个完整的类需要包名与类名的组合,每个类都属于一个类包,只要保证同一类包中的类不重名,就可以有效地避免同名类冲突的情况。

例如,一个程序中同时使用到java.util.Date类与java.sql.Date类,如果在程序中不指定完整的类路径,编译器不会知道这段代码使用的是java.util类包中的Date类还是java.sql类包中的Date类,所以需要在指定代码中给出完整的类路径。

例如,在程序中使用两个不同Date类,可以使用以下代码:
 


java.util.Date date = new java.util.Date();
java.sql.Date date2 = new java.sql.Date(1000);

 

 在Java中采用类包机制非常重要,类名不仅可以解决类名冲突问题,还可以在开发庞大的应用程序时,帮助开发人员管理庞大的盈盈程序组件,方便软件复用。

8.1.3 创建包
 在eclipse中创建包的步骤如下:

(1)在项目的src节点上右击,选择“新建”/“包”命令(英文为New/package)

(2)弹出“新建Java包”(New Java Package)对话框,在“名称”(Name)文本框中输入新建的包名,如com.mr,然后单击“完成”(Finish)按钮,如图所示:

 

(3)在eclipse中创建类时,可以再新建里的包上右击,选择“新建”(New)命令,这样新建的类会默认保存在该包中。另外也可以在New Java Class对话框中指定新建类所在的包。 

 在Java中包名设计应与文件系统结构相对应,如一个包名为com.mr,那么该包中的类位于com文件夹下的mr子文件夹下。没有定义包的类会被归纳在默认包(default package)中。在实际开发中,应该为所有类设置包名,这是良好的编程习惯。在类中定义包名的语法如下:

package 包名

在类中指定包名时,需要将package表达式放置在程序的第一行,它必须是文件中的第一行非注释代码。使用package关键字为类指定包名之后,包名将会成为类名中的一部分,预示着这个类必须指定全名。例如,在使用位于com.mr包下的Dog.java类时,需要使用形如com.mr.Dog这样的表达式。

例题:创建自定义的Math类 

8.1.4 导入包

1.使用import关键字导入包

在 Java 中,使用 import 关键字可以将其他包中的类引入到当前类中,以便在当前类中可以直接使用这些类而不需要使用完整的类名。可以使用 import 关键字来导入整个包,也可以导入特定的类。

语法格式:

 

import 包名.类名;
import 包名.*;

在导入一个类时,我们可以使用完整的包名和类名,例如:

import java.util.ArrayList;
import java.util.List;

这将允许我们在当前类中使用 ArrayList 和 List 类,而无需使用完整的类名 java.util.ArrayList 和 java.util.List。

2.使用import导入静态成员 
在Java中,使用import关键字可以方便地导入其他包中的类和成员,以便在当前代码中直接使用它们,而无需每次都使用完整的类名或静态成员名。

除了导入普通类和接口外,还可以使用import static导入静态成员,例如静态变量和静态方法。静态导入的语法格式为:

import static 静态成员
例题:使用import导入静态成员

 

8.2 内部类 
在Java中,内部类是定义在另一个类中的类。内部类可以访问其外部类的所有成员,包括私有成员,而外部类不能访问内部类的成员。内部类提供了一种封装和组织代码的方式,同时还可以实现一些特殊的功能,比如实现接口、继承类、实现多态等。

8.2.1 成员内部类
1.成员内部类简介
在Java中,成员内部类是定义在另一个类内部的类。成员内部类可以访问外部类的所有成员和方法,包括私有成员和方法。成员内部类有自己的作用域和生命周期,可以包含构造方法、成员变量和成员方法等。

成员内部类可以像普通的内部类一样定义在外部类的任何地方,通常定义在外部类的最上面。它的定义格式如下:


 

class OuterClass {        //外部类
    ...
    class InnerClass {    //内部类
        ...
    }
}

在成员内部类中可以随意使用外部类的成员方法和成员变量,尽管这些类成员修饰为private。

图8.3充分说明了内部类的使用,尽管成员变量i以及成员方法g()都在外部类中修饰为private,但在成员内部类中可以直接使用。

 例题:使用成员内部类模拟发动机点火

成员内部类不止可以在外部类中使用,在其它类中也可以使用。在其它类中创建内部类对象的语法非常特殊,语法如下:

外部类 outer = new 外部类();

外部类.内部类 inner = outer.new 内部类();

2.使用this关键字获取内部类与外部类的引用

在 Java 中,如果一个类被定义在另一个类的内部,那么这个被定义的类就是一个内部类。在内部类中,可以使用 this 关键字来获取内部类的引用,也可以使用 外部类.this 来获取外部类的引用。

具体来说,如果内部类和外部类有同名的成员变量或方法,那么可以使用 this 来区分它们。例如,假设有一个 Outer 类和一个 Inner 类,其中 Outer 类有一个成员变量 a,而 Inner 类也有一个成员变量 a。那么,在 Inner 类中,使用 this.a 可以获取到 Inner 类中的成员变量 a,而使用 Outer.this.a 则可以获取到外部类 Outer 中的成员变量 a。

例题:在内部类中调用外部类对象

 

8.2.2 匿名内部类 

Java中的匿名内部类是一种特殊的内部类,它没有类名而是直接使用new关键字创建,通常用于创建临时的、一次性的类。匿名内部类常常用于实现接口或抽象类中的方法。

匿名内部类的语法形式为:

 

new 父类/父接口(){ 
    // 子类实现的内容 
}

例题:使用匿名内部类创建一个抽象狗类的对象 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值