读随感(二)
读<ThinkingInJava>有感(二)
刚刚复习完控制流程,初始化及清理等相关类容,今晚就给各位分享分享下小弟复习后感。
1、ForEach
关于ForEach,想必大家都用过,也知道它仅仅适用于数组及iterable对象,那么ForEach遍历String呢?那就要使用String里的toCharArray()了。代码如下:
2、goto
虽然是讲goto,但是java中并没有goto,却有类似goto的的跳转操作。这与break和continue这2个关键字有关,但并不常用,只是提醒下大家java也是有跳转操作的。
3、动态数组
给段代码,大家自己看吧。
4、静态块
静态块在首次使用时执行,且仅执行一次。非静态块在调用任意显示构造器后,某些操作都会发生。
而初始化的顺序是先静态对象,而后是“非静态对象”。
当用new xxx()创建对象的时候,首先将在堆上为xxx对象分配足够的空间。
接着这块空间会被清零,然后自动将对象中的所有基本类型数据设置为默认值。
这时候才执行所有初始化动作。
最后才执行构造器。
这里值得注意下的是各种数据类型的默认值:
boolean false
char [(里面是个正方形- -~)]
byte 0
short 0
int 0
long 0
float 0.0
double 0.0
书上char类型的默认值是一个空格,而在我机器上运行是一个正方形,爆汗中~,而且复制不出来。 这是为啥,在这里小弟求解释了。
下面给出一段关于静态块与非静态块的code。
5、可变参数列表
不瞒给位说,这个知识点我以前居然不知道,今天才知道的。惭愧啊!!
现在发现这个还真蛮有用的,具体用处不用我讲了吧(其实我也不是特别清楚),呵呵,给段代码,大家参考参考吧。
在这里特别提下的概念就是“自动包装机制”。对于我们这等站在巨人肩膀上的人来说,这种概念普片理解不透彻,包括me。网上也搜了搜,没有特别详细的解释,如有大牛,不嫌麻烦,解释下吧。
最后,还是这句话,希望广大的程序员们不管你是新手,还是大牛,大家共同学习共同进步吧!
刚刚复习完控制流程,初始化及清理等相关类容,今晚就给各位分享分享下小弟复习后感。
1、ForEach
关于ForEach,想必大家都用过,也知道它仅仅适用于数组及iterable对象,那么ForEach遍历String呢?那就要使用String里的toCharArray()了。代码如下:
import java.util.Random; public class ForEachFloat { public static void main(String[] args) { Random rand = new Random(47);//Random(seed) seed为种子数,加参数则产生的随机数不变,默认值为当前系统时间 float[] f = new float[10]; for(int i = 0; i < 10; i++) f[i] = rand.nextFloat(); for(float x : f) System.out.println(x); } }
2、goto
虽然是讲goto,但是java中并没有goto,却有类似goto的的跳转操作。这与break和continue这2个关键字有关,但并不常用,只是提醒下大家java也是有跳转操作的。
3、动态数组
给段代码,大家自己看吧。
public class DynamicArray { public static void main(String[] args) { Other.main(new String[]{ "fiddle","de","dum" }); } } class Other { public static void main(String[] args) { for(String s : args) System.out.println(s + " "); } }
4、静态块
静态块在首次使用时执行,且仅执行一次。非静态块在调用任意显示构造器后,某些操作都会发生。
而初始化的顺序是先静态对象,而后是“非静态对象”。
当用new xxx()创建对象的时候,首先将在堆上为xxx对象分配足够的空间。
接着这块空间会被清零,然后自动将对象中的所有基本类型数据设置为默认值。
这时候才执行所有初始化动作。
最后才执行构造器。
这里值得注意下的是各种数据类型的默认值:
boolean false
char [(里面是个正方形- -~)]
byte 0
short 0
int 0
long 0
float 0.0
double 0.0
书上char类型的默认值是一个空格,而在我机器上运行是一个正方形,爆汗中~,而且复制不出来。 这是为啥,在这里小弟求解释了。
下面给出一段关于静态块与非静态块的code。
class Cup { Cup(int marker) { System.out.println("Cup(" + marker + ")"); } void f(int marker) { System.out.println("f(" + marker + ")"); } } class Cups { static Cup cup1; static Cup cup2; Cup cup3; Cup cup4; static { cup1 = new Cup(1); cup2 = new Cup(2); } { cup3 = new Cup(3); cup4 = new Cup(4); } Cups() { System.out.println("Cups()"); } } public class ExplicitStatic { public static void main(String[] args) { System.out.println("Inside main()"); Cups.cup1.f(999); new Cups(); } }
5、可变参数列表
不瞒给位说,这个知识点我以前居然不知道,今天才知道的。惭愧啊!!
现在发现这个还真蛮有用的,具体用处不用我讲了吧(其实我也不是特别清楚),呵呵,给段代码,大家参考参考吧。
public class OptionalTrailingArguments { static void f(int required, String... trailing) { System.out.print("required: " + required + " "); for(String s : trailing) System.out.print(s + " "); System.out.println(); } public static void main(String[] args) { f(1,"one"); f(2,"one","two"); f(0); } }
在这里特别提下的概念就是“自动包装机制”。对于我们这等站在巨人肩膀上的人来说,这种概念普片理解不透彻,包括me。网上也搜了搜,没有特别详细的解释,如有大牛,不嫌麻烦,解释下吧。
最后,还是这句话,希望广大的程序员们不管你是新手,还是大牛,大家共同学习共同进步吧!