管理类文件
在类中还可以再定义类,称之为内嵌类或嵌套类。非静态的内嵌类可以分为三种:成员内嵌类、区域内嵌类和匿名内嵌类。内嵌类的主要目的,就是对外部隐藏类的存在性。
使用内嵌类的好处:
1. 内嵌类可以直接存取其所在类中的私用成员。
2. 当某个Slave类完全只服务于一个Master类时,可以将之设置为内嵌类,这样使用Master类的人就不用知道Slave的存在。
3. 对调用静态方法的对象隐藏返回对象的实现细节或产生方式。
在文件管理方面,成员内嵌类在编译完成之后,所产生的文件名称为“外部类名 称$内嵌类名称.class”。
内部类还可以被声明为static,不过由于是static,它不能存取外部类的方法,而必须通过外部类所生成的对象来进行调用。被声明为static的内部类,事实上也可以看做是另一种名称控件的管理方式。
public class Outer
{
public static class inner
{
...
}
...
}
可以使用以下方式来使用Inner类:
Outer.Inner inner = new Outer.Inner();
匿名内嵌类:
内嵌匿名类可以不声明类的名称,而使用new直接产生以一个对象,它可以使继承某个类或是实现某个接口。其声明方式如下:
new [类或接口()]
{
//实现
}
例如:
public class AnonumousClassdemo
{
public static void main(String[] args)
{
Object obj = new Object()
{
public String toString()
{
... //重新定义toString()
}
}
}
}
如果要在内嵌匿名类中使用外部的区域变量,变量在声明时必须为final。
在文件管理方面,内嵌匿名类在编译完成之后会产生“外部类名称$编号.class”。
package:
为了能建立与包相对应的文件系统结构,在编译时可以加入-d参数,并指定产生的类文件存储在哪一个目录之下。
package的设置会成为类的一部分名称。
import:
使用import关键字,告知编译器所要使用的类是位于哪一个包。
import 目录.目录.类名
import 目录.目录.*
将源文件与编译完成的类文件放在一起容易发生问题,可以建立一个专门放源文件代码.java文件的目录,并建立一个专门放.class文件的目录:
javac -d ./classes ./src/*.java
这样,可以直接到classes目录中执行 java 类名
或:
java -cp ./classes 类名
public 与包:
一个类在定义时可以使用public加以修饰,一个.java文件中可以定义数个类,但只能有一个被声明为public,没有被声明为public的类只能被同一个包中的类的实例调用。
类成员也可以声明为public,声明为public的类成员可以被其他对象调用,如果声明类时不适用public、protected或private设置权限,则预设为包存取范围,只有同一个包中的类可以调用这些类成员。
类的权限设置会约束类成员上的权限设置,所以如果类上不声明public,而类成员上设置了public,则类成员同样地也只能被同一个包的类存取。
当在Java中定义一个类,但没有定义构造函数时,编译器会自动产生一个默认构造函数。
如果自行定义构造函数,编译器就不会加上默认的构造函数。