1.Java类包
1).类名冲突
Java中每个接口或类都来自不同的类包,无论是Java API的类与接口还是自定义类与接口,都需要隶属于某一个类名,这个类包含了一些类和接口,如果没有包的存在,管理程序中的类名称是一件非常麻烦的事情,如果程序由一个类组成,自然不会出现类名重叠的问题,但是随着程序的类的数量增多,难免会出现这一问题。
2).完整的类路径
编写Java程序经常用到String类(第10章会详细讲解),其实String 类并不是它的完整名称,就如同一个人需要有名有姓一样,String 类的完整名称如图8.1所示。可以看出,一个完整的类名需要包名与类名的组合,每个类都隶属于一个类包,只要保证同一类包中的类不同名,就可以有效地避免同名类冲突的情况。
3).创建包
在eclipse中创建包的步骤如下:
(1)在项目的src节点上右击,选择“新建”/“包”的命令
(2)弹出“新建java包”对话框,在“名称”文本框中输入新建的包名,如com.mr,然后单击“完成”按钮
(3)在eclipse中创建类时,可以在新建立的包上右击,选择“新建”命令,这样子新建的类会默认保存在该包中。另外也可以在new java class对话框中指定指定新建类所在的包。
在类中定义包名的语法如下:
package 包名
练习运行结果
4).导入包
(1)使用import关键字入包
import关键字的语法如下:
import com.mr*; //导入com.mr包含中的所有类
import com.mr.Math //导入com.mr包含Math类
(2)使用import导入静态成员
语法如下:
import static 静态成员
练习
运行结果
2.内部类
1).成员内部类
(1)成员内部类简介
语法如下:
class OuterClass{ //外部类
class InnerClass{ //内部类
}
}
在成员内部类可以随意使用外部类的成员变量以及成员方法,尽管这些类成员被修饰为private,尽管成员变量i以及成员方法g()都在外部类中被修饰为private,但在成员内部类中可以直接使用。
内部类的实例一定要绑定在外部类的实例上,如果从外部类初始化一个内部类对象,那么内部类对象就会绑定在外部类对象上,内部类初始化方式与其他类的初始化方式相同,都是使用new关键字。
成员内部类不止可以在外部类使用,在其他类也可以使用,在其他类中创建内部类对象的语法非常特殊,语法如下:
外部类 outer =new 外部类();
外部类.内部类 inner =outer.new 内部类;
练习
运行结果
(2).使用this关键字获取内部类与外部类的引用
如果在外部类中定义的成员变量与内部类的成员变量名称相同,可以使用this关键字。
练习
2).匿名内部类
匿名类只是在创建对象时才会编写类体的一种写法,匿名类的特点是“现写现用”,其语法如下
new 父类/父接口{
子类实现的内容
};
练习
运行结果
使用匿名内部类应该遵循以下原则:
(1)匿名类不能写构造方法。
(2)匿名类不能定义静态的成员。
(3)如果匿名类创建的对象没有赋值给任何引用变量,会导致该对象用完一次就会被Java虚拟机销毁。