锁定老帖子 主题:Java 潜规则收集
精华帖 (4) :: 良好帖 (19) :: 新手帖 (18) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-06-22
最后修改:2009-06-22
有些在 《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 大约长这个样子:(FX 告诉我的) public abstract class Enum<E extends Enum<E>> { ... public enum Planet { 会被展开成一个奇怪的东西: public class Planet extends Enum<Planet> { ... 双花实例初始化块 Map map = new HashMap() {{ put("a key", "a value"); put("another key", "another value"); }}; 在代码中直接写 URL class Example { public static void main(String[] args) { http://www.iteye.com System.out.println("Hello World!"); } } 其实是 label 加注释。 如果在函数 return 后还要做些事情…… try { return 1; } finally { System.out.println("Bye!"); } 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-06-22
enum还不只是简单的语法糖。enum的实现方式保证它的每个成员都是单例。
public abstract class Enum<E extends Enum<E>> implements Comparable<E>, Serializable 忘了是Neal Gafter还是Josh Bloch说Java里要实现Singleton最简单的办法就是用enum了。 enum的成员还可以覆盖方法……看这个:那啥……穷举实现的24点(rev1),那个enum Operator。 finally那个着实恶心……以前记过一篇,finally子语里的return...险恶啊 |
|
返回顶楼 | |
发表时间:2009-07-02
那个双花括号的用法有点意思。
|
|
返回顶楼 | |
发表时间:2009-07-03
还真第一次看见,代码简洁,学习了,
|
|
返回顶楼 | |
发表时间:2009-07-03
goto那个牵强附会了,不要提供错误的引导
你能向前break吗? break 和 goto 还是有差别的 |
|
返回顶楼 | |
发表时间:2009-07-03
break 能做部分 C 里面 goto 才能做的事情,觉得总比没有的好。
本人是 java 黑,意见不值得参考 …… |
|
返回顶楼 | |
发表时间:2009-07-04
return之后还可以执行语句? finally语句块中的是在return之后执行? 望指点
|
|
返回顶楼 | |
发表时间:2009-07-04
rober 写道 return之后还可以执行语句? finally语句块中的是在return之后执行? 望指点
参考 1 楼 FX 给的链接。如果在 finally 中 return,那么前面的 return 会被覆盖。 |
|
返回顶楼 | |
发表时间:2009-07-04
最后修改:2009-07-04
class Example {
public static void main(String[] args) { http://www.iteye.com System.out.println("Hello World!"); } } 还是这个比较酷! |
|
返回顶楼 | |
发表时间:2009-07-04
night_stalker 写道 看了 Stack Overflow 上的 Hidden Features of Java ……
有些在 《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 大约长这个样子:(FX 告诉我的) public abstract class Enum<E extends Enum<E>> { ... public enum Planet { 会被展开成一个奇怪的东西: public class Planet extends Enum<Planet> { ... 双花实例初始化块 Map map = new HashMap() {{ put("a key", "a value"); put("another key", "another value"); }}; 在代码中直接写 URL class Example { public static void main(String[] args) { http://www.iteye.com System.out.println("Hello World!"); } } 其实是 label 加注释。 如果在函数 return 后还要做些事情…… try { return 1; } finally { System.out.println("Bye!"); } |
|
返回顶楼 | |