"之后的这行文字都是注释。 缩进使得Java的代码更易读。由于Java是一种形式自由的语言,因此 额外的空格,跳格以及回车不会对程序的结构造成任何影响。 注意,虽然在C和C++里这种写法是完全合法的,但是你不能在Java 里这么写: int x=96:// Illegal 编译器会说变量x已经定义过了。于是C和C++的,在更大的作用域里 “隐藏”变量的能力,就被Java给禁了。因为Java的设计者们认为这 会导致令人费解的程序。 对象的作用域 Java对象的生命周期同 primitive的不同。当你用new创建Java对象 之后,它会晃荡到作用域外面。如果你写: string s= new string("a string") 1// End of scope s这个 reference会在作用域结束之后消失。但是s所指的那个 String 仍然还占着内存。在这段代码里,你已经没法访问这个对象了,因为唯 指向它那个的 reference现在已经出了作用域。在后面的章节中你还会 看到,在程序的运行过程中,它是怎样传递和复制对象的 reference 的 只要你还用得着,那些用new创建的对象就不会跑开。看来用了这种方 法之后,C++里面的一大堆问题在Java里面已经不复存在了。C++编 程中最难的问题就是,等你要用对象的时候,你根本没法从语言中获得这 个对象还在不在的信息。而且更重要的是,用C++编程,你得亲自进行 对象的清理。 这就带来了一个有趣的问题。如果java就这样只管造对象,不管清理对 象,那么又是谁在那里阳止对象填满内存进而把程序给搞宕的呢?这确实 是C++所面临的问题。但这里就有点魔法了。Java有一个垃圾回收器 ( gabage collector),它会看着所有用new创建的对象,并且还会知道 第7页共26页shhgs@wgqqh.com 7 ✁ ✂ 26 ✁ ‘//’ u( &
Ƶ 6%ç Java (¸S,) Java 37´ý,(æò 8½(´è9èE:;<Xº¥âF(4òÚ ¹F C C+ + Ë «c(¡F Java Ë Z« { int x = 12; { int x = 96; // Illegal } } áfº$5ª x ôõO3^,) C C+ + (FÂ(12Ë Í=>Ï5ª(;ã¹ Java ¬?,æ Java ( "Ù º1_@ª-£(âF Java ¥(0»¼@ p ri m iti ve (X ¡ new ~ Java ¥ uAºABg12½¶ÄÅ¡« { String s = new String("a string"); } // End of scope s × reference ºF124Cu6 s DZ(Y× String Û.{F øˡôõ±² ×¥,æ3 ZAY×( reference íFôõ!,12F¶(ûß*¡º <gFâF(&^â*AÕ¦DE6¥( reference ( ó%¡.YÌ new ~(¥XºF<Q, µ uC+ + ˶(3ÂƲF Java ˶ôõX6{F,C+ + á â*bU(²-¡%¥(M¡G *H ×¥FXF(à%( C+ + áâ¡Iý%& ¥(&¢ dQ,3×mJ(²ÄÅ Java ¦óÂÚ¥XÂ&¢¥ YZüKFYËL+¥MN{%àPâF¬O(VÊ ñ C+ + D¶P(² ËmCQ,Java m3×RS;Àf (gabage collector)Aº<.Dm new ~(¥º½t