java中有goto关键字,但使用的时候确是像下面那样:
getout:{
for (int i = 0; i < N; ++i) {
for (int j = i; j < N; ++j) {
for (int k = j; k < N; ++k) {
break getout; // 打断循环跳到 OUT
}
}
}
}
// OUT
enum 可以当类写
// 出自 Sun 的例子(Sun 真的很喜欢太阳系,但他们不知道冥王星已经出局了么?)
public enum Planet {
MERCURY (3.303e+23, 2.4397e6),
VENUS (4.869e+24, 6.0518e6),
EARTH (5.976e+24, 6.37814e6),
MARS (6.421e+23, 3.3972e6),
JUPITER (1.9e+27, 7.1492e7),
SATURN (5.688e+26, 6.0268e7),
URANUS (8.686e+25, 2.5559e7),
NEPTUNE (1.024e+26, 2.4746e7),
PLUTO (1.27e+22, 1.137e6);
private final double mass; // 质量/千克
private final double radius; // 半径/米
Planet(double mass, double radius) {
this.mass = mass;
this.radius = radius;
}
public double mass() { return mass; }
public double radius() { return radius; }
// 重力常数/(立方米每千克秒平方)
public static final double G = 6.67300E-11;
public double surfaceGravity() {
return G * mass / (radius * radius);
}
public double surfaceWeight(double otherMass) {
return otherMass * surfaceGravity();
}
}
// 如何使用
public static void main(String[] args) {
Planet pEarth = Planet.EARTH;
//..
pEarth.radius();
pEarth.surfaceGravity();
pEarth.surfaceWeight(12.0);
//..
}
因为 enum 是 Enum 的语法糖,抽象类 Enum 大约长这个样子:
public enum Planet { 会被展开成一个奇怪的东西:
public class Planet extends Enum<Planet> { ...
在 return 后仍执行一些代码
try { return 1; }
finally { System.out.println("Bye!"); }
以上转自:http://www.javaeye.com/topic/412868
使用双花括号可以进行初始化:
Map map = new HashMap() {{
put("a key", "a value");
put("another key", "another value");
}};
第一层括弧 实际是定义了一个内部匿名类 (Anonymous Inner Class),第二层括弧 实际上是一个实例初始化块 (instance initializer block),这个块在内部匿名类构造时被执行。这个块之所以被叫做“实例初始化块”是因为它们被定义在了一个类的实例范围内。
这种方法只适用于不是final的类,因为final类是无法建立内部匿名子类,好在集合类都没有这个限制。因此,这种方法还可以被用来初始化其它任何对象,比如一个GUI对象:
add(new JPanel() {{
setLayout(...);
setBorder(...);
add(new JLabel(...));
add(new JSpinner(...));
}});
这样建立的内部匿名类的实例中包函它容器对像的引用。如果串行化(serialization)这个集合同时也会串行化它的外部类。