您的位置:首页 > 编程语言 > Java开发

Java Core 学习笔记--第三章

2011-05-10 23:16 260 查看
说明:最近因工作需要,开始学习Java, 有不对之处,敬请斧正!

Java 基本的程序设计结构

1、 Java对大小敏感 (C++ 亦同)。
2、 Java应用程序的全部内容必须放置在类中(Java的main函数也必须防止在类中,而C++的main必须在类外)。
3、 命名问题
1) 组成:Java命名以字母开头,后面可以是数字和字母的组合(包括下划线)
2) 长度:无限制
3) 约束:不能使用Java关键字
4) 类命名规范:类名以大写字母开头的名词,如果类名称由多个单词组成, 每个单词的首字母大写(骆驼命名法,CamelCase);
5) 一个java文件中(.java)只能有一个Java类(注:实验两个类写在一个文件中, javac编译不通过,Eclips Run as Java Applications可以[两个类无关]),类名称和文件名称要保持一致。
4、main函数
1)Java程序跟C/C++ 一样,也必须有main函数(方法),其main方法必须有一个外壳类,即main方法必须在定义一个public的类中,编译后,java虚拟机从指定的类中找到main方法开始运行。
2)Java中main方法必须是静态的。
3) Java main方法没有给操作系统返回一个退出码,java程序正常退出,其退出码为0,如果需要返回其他码表示异常终止,可以调用Systme.exit方法。

4、 整型数据类型
1)java中,整型的范围与运行java代码的机器无关, 解决了java程序的平台移植问题(C++中,整型取决于运行机器)。
2)java中,所有的整型都是有符号类型的。

5、 浮点型
1) float类型的数值后加F,double类型的数值后面加D,没有F的默认是double类型的;
2) float类型的有效位数6~7位,double类型的有效位数15位;
3) Java的浮点值的计算遵循IEEE 754,Java的Float和Double类型定义了POSITIVE_INFINITY 、NEGATIVE_INFINITY、NaN
4) 注意不能用 x == Double.NaN 判断x是否是一个double浮点数;应该使用 Double.NaN(x);
6、 char类型
Java中的char类型采用UTF-16编码,不建议使用,建议采用Java库的String类型

7、 boolean类型
值:true和false, Java中整型和布尔值不能互相转换。[C++ 中,布尔类型和整型可以转换。]
8、 变量
1) 变量必须以字母开头,可以由字母、数字和“_”组成或某种语言中代表字母的任何Unicode字符。
2) 大小敏感, 长度无限制;
3) 变量名称要有意义;
4) 变量名称通常第一个单词小写,如果由多个单词构成,后续单词的首字母大写;
5) 变量的定义尽量放在第一引用之前,靠近引用的地方;
6) Java中,不区分变量的定义和声明,[C/C++中,变量的定义分配存储空间,声明通常表示可以在该文件中引用变量]
9、 常量
1) Java 中用关键词final定义常量;[C++中使用const定义常量,Java中const保留没有使用,必须使用final]
2) 编程习惯上,常量名使用大写;
3) Java中类常量用static final 定义;
10、 算术运算符
1) 整型数除以0,将产生异常; 浮点数除以0,结果是无穷大或NaN;
2) 浮点数运算。Java的double为64位,有些CPU使用80位浮点寄存器,这些寄存器增加中间计算的精度。在默认情况下,Java虚拟机允许将中间计算结果采用扩展精度,但是对于使用strictfp关键字标记的方法必须使用严格的浮点数计算来产生理想的结果。
11、 位运算
1) java中位运算& 和| 对于boolean类型 与关系运算符 &&和|| 相同,区别是位运算不会“短路”;
2) >>运算符左边填充最高位,>>>运算左边填充0;
3) 对于位移运算右侧的参数需要进行模32运算(如果位移运算左边数为long,则进行模64运算),例如:1<<35 = 1<<3; [在C/C++中,无法确定>>操作执行的是算术运算(扩展符号位),还是逻辑移位(高位填0),在执行中选择效率较高的一种, VS2005 >>运算填充最高位]

12、 数据类型转换


14、 控制语句
1) 循环中,尽量不要用浮点数作为循环变量,浮点数的比较可能导致循环无法结束而成为死循环;
2) Java中break中断控制语句可以带标签, 使得可以结束多层循环;标签必须放在希望跳出的循环外层之前,并且必须紧跟一个冒号;
3) break语句可以放在任何语句块中;
4) continue 也可以带标签;
5) 一般不建议使用break和continue,除非必要;
15、 大数值
1) Java中提供了满足任意精度的整数(BigInteger)和浮点数(BigDecimal),位于java.math包中, 使用静态方法valueOf可以将普通数值类型转换为大数值;
2) 大数值不能使用四则运算符计算,Java没有重载运算符(除String重载了”+”以外 ), 也不允许程序员自己重载运算符;
3) 大数值除法提供了求商的模式,支持四舍五入RoundingMode.HALF_UP

16、 数组
1) 声明数组 int[] a或者int a[],通常使用前一种方式;
2) 数组声明之后,必须使用new 定义数组(与C/C++动态数组类似,而没有C/C++的栈内静态数组),Java中的数组是分配在堆(heap)上的;
3) 数组访问方式与C/C++ 相同,从0~size-1;但是Java中会严格检查数组下标;超出范围会报“array index out of bounds”, C/C++ 可以通过 数组变量名 + n 来访问第n个元素,但是Java不可以;
4) 数组大小在定义之后,不能改变,如果要动态改变,可以使用数组列表;
5) 可以通过 变量名.length 获取数组大小, 在通过for循环是,推荐使用它来做循环范围的判断;
6) Java SE5.0增加了for each循环, 可以按照下面方式访问数组元素;
for (variable: collenction) statement;
7) 数组支持在定义的时候给数组默认值,通过 new type[size] {value1, value2, …}方式;
8) Java中定义数组时,长度可以为0;长度为0的数组与数组变量为null是不同的;
9) Java中Arrays提供了对数组排序方法,不需要自己写排序算法, 参考API;
10) Java中运行用一个数组给另一个数组变量赋值,两个数组指向同一个数组;
11) 数组拷贝可以通过Arrays.copyOf静态方法生成一个新的数组;
A) 用法:copyOf(数组,拷贝的长度);
B) 如果拷贝长度比数组实际长度大,则按照类型填充默认值(数值型为0, 布尔值为false,参考API);
C) 如果拷贝长度比数组实际长度小,则只拷贝前面的数据元素;
D) Java SE6.0前, 可以通过System类arraycopy方法拷贝一个数组元素到另一个数组中, 参考API;
12) Java支持多维数组,多维数组可以与一维数组类似,for each循环语句不能自动处理二维数组的每个一个元素, 它是按照行, 也就是一维数组处理。通过两层循环,第一层取出一维数组,第二层循环处理一维数组;
13) 二维数组快速打印方式:Arrays.deepToString(a)
14) Java 可以创建不规则数组, 即数组的每行长度不同;

17、Java命令行参数
Java命令行参数与C/C++基本类似,但是Java中程序名称不存储在argv[0]中,argv[0]存放第一个参数;

1) 实体箭头的转换不会有精度损失;虚体箭头的转换可能会导致数据精度损失
2) 使用两个以上数值运算时,先将数据类型转换成同一个类型的, 然后计算,转换规则:
A) 如果两个操作数有一个是double类型,另一个会转换成double类型;
B) 否则,如果两个操作数有一个是float类型, 另一个操作数将会转换成float类型;
C) 否则,如果两个操作数有一个是long类型,另一个操作数将会转换成long类型;
D) 否则两个操作数都将转换成int类型;
3)浮点数强制类型转换通过截断小数部分将浮点值转换成整型;
4)浮点数四舍五入时使用(int)Math.round(), round返回long类型;
5)不要将boolean类型与任何数值类型之间进行转换;

13、 Java 字符串String
1) String字符串是不可修改的字符串,与C的char[] 不同, 但是类似指向常量字符串的指针, 即:cosnt char*;
2) Java 的字符串常量存放在公共的存储池中,字符串变量指向存储池中的相应的变量。如果要复制一个字符串变量,原始字符串和复制的字符串共享相同的字符。
3) 检查字符串相等, 不能使用==, 这与C++不同,C++ 重载了==运算符, 可以使用equals
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: