这几天因为工作需要将"java编程思想"(三)再看了一遍,在看的过程中间将以前一些没有注意的细节做了下笔记,里面所写的很多是我自己归纳总结的,如果有不对,敬请指正.现在将其作为我的第一篇文章发表出来,后面的我会陆续发表出来,谢谢捧场.
第二章
1. java之间都是引用(reference),通过new关键字创建对象
2. 原始类型(primitive boolean(false), char(‘\u0000’), byte(0), short(0), int(0), long(0L), float(0.0F), double(0.0d),void
3. java中间参数的作用域在{}之间。不能有变量覆盖{int x; {int x;}}在java中非法,在java语言中的任何地方都可以定义变量。
4. 当原始类型的变量为类的成员时,有默认的值。但是非类成员变量没有默认值,否则出现编译时错误
5. 在java中,方法是类的一部份,因此,你需要通过对象来调用方法,如果对象错了,就会出现编译错误,在调用方法时,传递对象的时候,实际上是传递引用。
6. 方法如果没有返回值,必须void类型
7. java中两者注释方式。/* 多行注释 */ //单行注释,注释文档 /** */,Javadoc只会处理public和protect的成员和注释文档。
第三章
1. 在java中给primitive变量赋值比较简单。但是给对象赋值这里是reference的拷贝,在方法调用调用的时候也是传递的reference。
2. ==和!=比较的是对象的引用,不是对象的值,要比较两个对象的值。需要使用equals
3. 在java中,逻辑运算符只能应用于逻辑值上,不能用在非逻辑值上。
4. 位运算符:&,^,| ,~.前面几个可以和=运算符结合使用,<<,>>,java中有>>>(无符号右移),这个是c和c++中没有的,如果对char,byte,short进行位移,他们先变成int类型,结果也是int类型,Long型不变。移位符号可以和=结合使用,例如<<=,>>=,>>>=
5. 如果表达式以string开始,那么后面的变量比较是string,”a+b+c”+10+20+30
6. 对原始类型可以转换。但是对boolean不能转换
7. 在java中间,十六进制的数字使用0x开始,后面接数字或a-f的大小写字母。八进制使用0开始,在数字后面跟l或L表示long类型的数据,加f或F表示float类型的数据。加d或者D表示double类型的数据 (整数例如12默认是int类型,带小数点的(12.34)默认是double类型)
8. 如果数据类型比int小的数据(byte,char,short)在进行算术运算和位运算时。会提升为int类型,所以将一个结果给小类型时,需要转换
9. java中没有sizeof(),因为在java中,各个类型的数据大小固定
10. Math中的random()方法产生的double数小于1 ,大于等于0
11. goto是java中的保留字。但是并没有使用起来,我们可以使用
break和continue来完成一部份goto 的功能。这个并不是跳转,而是跳出循环的一种方法。他们的相同之处就是他们都使用了标签(label)
12. 将float和double类型的数据变为int类型时,是去掉他们的小数部分,例如int(36.7)=36
第四章
1. 构造函数是一种特殊的方法,它没有返回值,这一点和void的方法有本质上的区别,void方法什么都不返回,这个是由你决定的,你也可以在其中返回值。但是构造函数则什么都不返回,你别无选择(new表达式确实返回这个新创建对象的引用,但是构造函数本身并不返回值)
2. 每一个经过重载的方法必须有一个唯一的参数类型的列表。
3. 如果参数是原始类型,在它找不到对应的类型的时候,会进行类型的提升。但是不能自动变为类型比它小的类型
4. 如果我们没有定义构造函数(不管有没有参数的),编译器将为我们创建一个默认的无参数的构造函数。但是只要我们自己定义了一个构造函数(不管有没有参数),编译器就不会在提供默认的构造函数 。
5. this只能用在方法内部,你可以把this对象的reference当作任何对象的reference,但是在构造函数中,this表示调用匹配参数的构造函数。
6. 在java中,对象不一定被垃圾回收器回收,垃圾回收不是析构。Finalize方法存在的原因是因为java可以调用本地方法。在本地方法中可能来分配内存。
7. 变量的初始化次序:类变量的初始化优于任何方法,甚至在构造方法的前面。对于static变量,也是一样的,如果变量是原始类型,那么它得到一个标准的原始类型的初始值,如果是一个对象的引用,除非你创建了一个新的对象给这个引用,否则就是null。Static变量只有在需要的时候才会进行初始化,并且在这个类的构造函数和所有其他普通变量之前调用,static之后就不再进行初始化了。就是先初始化static变量,再初始化非static变量
8. 在java中定义数组时,不允许指定数组的大小,int a[]; int [] a; int a[]={1,2,3,4,5},数组可以直接赋值,int a[],int b[], a=b;是正确的。对数组我们可以使用计算长度的函数。Length。如果在写程序的时候不知道有多少个元素,可以在程序运行时通过new来直接创建数组中的元素,int a[]; a=new int[10];当然,数组定义和数组的初始化可以合并在一起:int a[]=new int[10];如果你创建的数组不是原始类型,而是对象数组,那么必须使用new。Integer b[]={new Integer(1), new Integer(2), new Integer(3)};第二种方式:Integer b[]=new Integer{new Integer(1), new Integer(2), new Integer(3)};
9. 多维数组的处理。可以先确定一维,再确定其他的 。Integer a[][]=new Integer[3][];并且各个向量可以是任意长度,例如上面的数组可以 a[0]=new Integer[4],a[1]=new Integer[5]等