1注释,有三种:
// 最常用的注释
/* 较长的注释*/
/** 自动生成的文档注释*/
2数据类型:
java有8种原始类型,其中4种整型,2种浮点型,char型,boolean型。所有数值类型都是有符号的.char没有符号,但书中没有提到boolean型是否有符号。
java并非完全面向对象,这8种类型就是非面向对象的,这是因为这8种类型很常用,为了提高程序效率而引用,它们不像java中的其它对象一样是分配在堆中的,而是存储在堆栈中。
注意,类型决定的是行为,而不是存储大小,事实上byte和short的存储都是32位的。不过,数组中的类型是例外,byte型的数组保证每个数组元素只占一个字节。
java为了实现跨平台,在不同处理器下得到可重现的结果,所以严格定义数据类型的长度,如:在任何平台下long总是64位。但这样严格指定会损失性能,还有计算的精度(现在很多平台的long是80位的)。
在这种情况下,5.0提供了Strictfp修饰词来修饰类和方法。被在修饰的类或方法进行的计算会严格指定数据类型,否则会根据平台处理器的不同而进行计算。这算是一种折衷吧。
另外,在5.0中char不再使用Unicode编码,而使用UTF-16。当然,UTF-16兼容Unicode。所以这不会对我们的编程产生什么太直观的影响(我是这么认为的)。
我觉得需要注意的一点是:
float
不适合金融计算,如:
2.0 - 1.1得到的结果是0.8999999999999999..因为float型在系统中是二进制表示的,就像十进行中1/3除不尽一样,二进制中的1/10是除不尽的。
其它的没什么好说的了,下面符两张表:
Table 3-1. Java Integer Types
| ||
Type
|
Storage Requirement
|
Range (Inclusive)
|
Int
|
4 bytes
|
–2,147,483,648 to 2,147,483, 647 (just over 2 billion)
|
Short
|
2 bytes
|
–32,768 to 32,767
|
Long
|
8 bytes
|
–9,223,372,036,854,775,808 to 9,223,372,036,854,775,807
|
Byte
|
1 byte
|
–128 to 127
|
Table 3-2. Floating-Point Types
| ||
Type
|
Storage Requirement
|
Range
|
float
|
4 bytes
|
approximately ±3.40282347E+38F (6–7 significant decimal digits)
|
double
|
8 bytes
|
approximately ±1.79769313486231570E+308 (15 significant decimal digits)
|
3操作符:
想一个问题,整数/0会得到什么,浮点数/0又会得到什么?前一个答案是异常,后一个答案是无穷或NaN.浮点型中定义了正无穷,负无穷,和NaN(not a number)三个常量.记住,在和他们进行比较的时候不能用“==”,有专门的方法isNaN()等。
java里面没有什么奇特的操作符,大家都应该认识。需要注意的我想就是计算时数据类型间的转换问题
如上图,实线的转换不会丢失数据,虚线的转换可能会丢失数据,沿实线反向转换也是可能会数据。
需要注意操作时会自动转换,原则是:
有double类型的,都转换为double类型;
有float类型的,都转换为float类型;
有
long
类型的,都转换为
long
类型;
否则,两个操作数都转换为
int
类型。
例如,两个byte进行操作,得到是操作结果是int类型的,这点一定要注意。
强制转换:
意味着可能会丢失数据.关键是强制转换后的结果:浮点向整形转换是截取转换,既去掉小数点;大类型向小类型转换,是取模转换,既对小类型的值域取模。
4 Sting:
String在java中不是一个原始类型,而是一个类。每个字符串都是这个类的一个实例。
我觉得对于String,应该注意的一点是:String是不可变的。你可以进行“+”或substring操作,但最终的结果是产生一个新的String对象,而以前的那个还在。这应该是个考点吧,很多题都和这个相关。对比一个StringBuffer,后者提供了很多对操作其值的方法。操作结果都体现在它自己身上,不会产生另一个StringBuffer对象。
由于上述原因,请注意比较两个字符串是否相等时,不要使用“==”,而要使用equle()方法。”==”只能判断两个字符串是否存储在同一个地方.
String a = "abc";
if(a=="abc"){//很可能返回true}
if(a.substring(0,1)=="a"){//很可能返回false}
上述的判断都不能确定。
5 输入/输出
在这里讨论的输入输出,仅仅是讨论简单的对输入的读取和输出的格式化。
输入需要提一下的是5.0里新加了一个java.util.Scanner类用来简化输入的读取。
Scanner in = new Scanner(System.in);
String s = in.nextLine();
就OK了,当然,还有相应的next(),nextInt().大家去看API吧(5.0新增的,1.4没有)。
5.0里的输出也增加了新的内容,以前用NumberFormat, DateFormat来进行输出 的格式化。现在借鉴了c的printf()
下图说明了格式化的基本格式
![](https://p-blog.csdn.net/images/p_blog_csdn_net/Just1Min/clip_image002.jpg)
然后再举几个例子:
System.out.printf(“%,8.2f”,1000.0/3.0)
System.out.printf(“my name is %n,my age is %d”,name,age)
啊,没看明白啊。嘿嘿,如果想了解的话,去找资料详细的看看吧,这里面用于格式化的变量很多,挺麻烦。
6流程控制
就是判断(if else),循环(while,for),多选(switch).
需要注意switch的case只能是byte,short,int,long,char.还有5.0里新增加的枚举。
还有,当break和标签配合使用时。只能用于从嵌套的程序块中跳到外的程序块,不能在平行的程序块间跳转。同时注意break a;是说跳出a标识的程序块不再执行;不是说跳到a标签处,执行a所标识的程序块;
a:
{
......
statemnet_in
break a;
}
statement_out ;
如上, break a后直接执行statement_out 。
7数组
比较简单,只是java的多维数组并不是真正的多维数组,实质上应该说是数组的数组(array of array).所以java中的二维数组是一定是个矩形。如下:
Int twoD[][] = new int[4][];
twoD[0] = new int[1];
twoD[1] = new int[2];
twoD[2] = new int[3];
twoD[3] = new int[4];
注意:可以定义长度为0的数组new int[0].但注意长度为0和null是不一样的.
5.0中又新增了一种for each loop专为方便遍历整个数组和实现了迭代接口的类的对象使用的for循环。
使用方法如下:
for (variable : collection) statement
如:
for (int element : a)
System.out.println(element);
第三章差不多就是这些。看了两天,写出来又花了一个晚上的工夫。现在还没有找到中文的关于
j2se5.0的书。看E文看得我头都大了。不过现在看起来流畅多了。感觉core java2有些细节
没有TIJ写得好。甚至没有原来第四版详细。现在都得好几本一起看,我在想我是不是看得太细
。加快点进度,再配合做几道题是不是应该更好一点。