5.11 代码块
所谓的代码块是指使用“{}”括起来的一段代码,根据位置不同,代码块可以分为普通代码块、构造块、静态代码块、同步代码块4种。
5.11.1 普通代码块
普通代码块就是指直接在方法或是语句中定义的代码块。
5.11.2 构造块
构造代码块是直接写在类中的代码块。
构造块优先于构造方法执行,而且每次实例化对象时都会执行构造块中的代码,会执行多次。
5.11.3 静态代码块
静态代码块是使用static关键字声明的代码块。
静态代码块优先于主方法执行,而在类中定义的静态代码块会优先于构造块执行,而且不管有多少个对象产生,静态代码块只执行一次。
5.12 构造方法私有化
在设计模式中将这样的设计称为单例设计模式,即无论程序怎么运行,类永远只会有一个实例化对象存在。
5.13 对象数组
所谓对象数组,就是指包含了一组相关的对象的数组。在使用对象数组时,数组一定要先开辟内存空间,因为其是引用数据类型,所以数组中的每一个对象都是null值,则在使用时数组中的每一个对象必须分别进行实例化操作。
格式 对象数组的声明
类 对象数组名称[] = new 类[数组长度];
主方法中的String args[]就是对象数组。
在主方法中,可以使用String args[]接收初始化参数,实际上这里的String本身就是一个类,所以在主方法中的参数本身就是以对象数组的形式出现的。
5.14 内部类
5.14.1 内部类的基本定义
在类内部可定义成员变量与方法,而且在类内部可以定义另一个类。如果在类Outer得内部在定义一个类Inner,此时类Inner就称为内部类,而类Outer则称为外部类。
内部类可声明成public或private。当内部类声明成public或private时,对其访问的限制与成员变量和成员方法完全相同。
内部类的声明格式
标识符 class 外部类的名称{
//外部类的成员
标识符 class 内部类的名称{
//内部类的成员
}
}
内部类的唯一好处就是可以方便地访问外部类中的私有属性。同时,外部类也可以方便地访问内部类中的私有属性,这样就可以避免封装所带来的操作结构复杂的问题。
5.14.2 使用static定义内部类
使用static可以声明属性或方法,而使用static也可以声明内部类,用static声明的内部类则变成外部类,但是用static声明的内部类不能访问非static的外部类。
5.14.3 在外部访问内部类
一个内部类除了可以通过外部类访问,也可以直接在其他类中进行调用,调用的基本格式为:
外部类.内部类 内部类对象 = 外部类实例.new 内部类();
以上的操作格式中,首先要找到外部类的实例化对象之后,才可以通过外部类的实例化对象去实例化内部类的对象。
观察内部类的class文件。
内部类定义之后,生成的class文件是以“
Outer$Inner.class
”的形式存在的,在Java中只要是在文件中看见了“$”,则在程序中使用将其替换为“.”。
5.14.4 在方法中定义内部类
理论上,内部类可以定义在程序的任意位置,例如:代码块中、方法中,但是在方法中定义的内部类不能直接访问方法中的参数,如果方法中的参数想被内部类访问,则参数前必须加上final关键字。
5.15.2 单向链表实现(1)
链表是在数据结构中经常见到的一种形式。所谓链表就好像火车车厢那样,从火车头开始,每一节车厢之后都连着一节车厢。每一节车厢就相当于是一个节点,每一个节点除了要保存自己的内容之外,还要保存下一个节点的引用。
节点类
class Node{
private String data;//保存节点内容
private Node next;//保存下一个节点
public Node(String data){//构造方法设置节点内容
this.data=data;
}
public String getData(){//得到节点内容
return this.data;
}
public void setNext(Node next){//设置下一节点
this.next=next;
}
public Node getNext(){//取得下一节点
return this.next;
}
};
判断一个节点之后是否还有后续节点,如果存在后续节点,则输出;如果不存在则不输出,输出可以使用方法的递归调用完成(递归调用就是自己调用自己)。