demo: label1:
outer-iteration{
inner-iteration{
break; // (1)
continue; //(2)
continue label1;(3)
break label1;(4)
}
}
在(1)中,break中断内部迭代,回到外部迭代。在(2)中,continue使执行点移回内部迭代的起始处。
在(3)中,continue label1 同时中断内部迭代以及外部迭代,直接转到label1处,继续从外部迭代继续迭代过程。
在(4)中,break label1 中断所有迭代,并回到label1处但并不重新进入迭代,完全中止了两个迭代。
3.对象创建过程
1)首次创建对象时,或者类的静态方法/静态域首次被访问时,java解释器必须炒作类路径,定位类.class文件。(构造器可以看成静态方法)
2)然后载入类.class文件,有关静态初始化的所有动作都会执行,因此,静态初始化只在class对象首次加载的时候进行一次。
3)当用new 类()创建对象的时候,首先将在堆上为类对象分配足够的存储空间。
4)这块存储空间会被清零,这就自动地将类对象中的所有基本类型数据都设置成了默认值,而引用则被设置成为null.
5)执行所有出现于字段定义初的初始化动作
6)执行构造器
4.构造器的调用顺序
基类的构造器总是在导出类的构造过程中被调用,而且按照继承层次逐渐向上链接,以使每个基类的构造器都能得到调用。
1)调用基类构造器。这个步骤会不断地反复递归下去,首先是构造这种层次结构的根,然后是下一层导出类,等等,知道最底层的导出类。
2)按声明顺序调用成员的初始化方法。
3)调用导出类构造器的主体。
5.编写构造器的准则
用尽可能简单的方法使对象进入正常状态;如果可以的话,避免调用其他方法。(在构造器内唯一能够安全调用的那些方法是基类中的final方法,也适用于private方法,这些方法不能被覆盖。因此是安全的。)
6.内部类
可以将一个类的定义放在另一个类的定义内部,这就是内部类。
内部类的作用:
1)隐藏名字和组织代码
2)当生成一个内部类的对象时,此对象与制造它的外围对象之间就有了一种联系,所以它能访问其外围对象的所有成员,而不需要任何特殊条件。此外,内部类还拥有其外围类的所有元素的访问权。
内部类如何做到自动拥有对其外围类所有成员的访问权:
当某个外围类的对象创建了一个内部类对象时,此内部类对象必定会秘密地捕获一个指向那个外围类对象的引用。然后,在你访问此外围类的成员时,就是用那个引用来选择外围类的成员。编译器会帮你处理所有的细节。
8.数组
无论使用哪种类型的数组,数组标识符其实只是一个引用,指向在堆中创建的一个真实对象,这个(数组)对象用以保存指向其他对象的引用。
对象数组和基本类型数组在使用上几乎是相同的;唯一的区别就是对象数组保存的是引用,基本类型数组直接保存基本类型的值。
9.枚举类型
关键字enum可以将一组具名的值的有限集合创建为一种新的类型,而这些具名的值可以作为常规的程序组件使用。
switch语句中的enum.
enumMap是一种特殊的map,它要求其中的键(key)必须来自一个enum.由于enum本身的限制,所以enumMap在内部可由数组实现。因此enumMap的速度很快,我们可以放心地使用enum实例在enumMap中进行查找操作。不过,我们只呢将enum实例作为键来调用put()方法,其他操作与使用一般m
ap差不多。
10.注解
注解(也被称为元数据)为我们在代码中添加信息提供了一种形式化方法,使我们可以在稍后某个时刻非常方便地使用这些数据。
@Override:表示当前的方法定义将覆盖超类中的方法。拼写错误和方法对不上,编译器会发出错误提示。
@Deprecated: 如果程序员使用了注解为它的元素,编译器会发出警告信息。
@SuppressWarinings: 关闭不当的编译警告信息。
联系客服