《Java 核心技术:卷Ⅰ》—学习笔记
第三章
1.术语
JDK(Java Development Kit ):编 M Java 程序的程序员使用的软件
JRE(Java Runtime Environment ):运行 Java 程序的用户使用的软件。(包含虚拟机但不包含编译器。 这并不是开发者想要的环境 , 而是专门为不需要编译器的用户而提供 。)
Server JRE:在服务器上运行 Java 程序的软件
Java SE(Standard Edition):用于桌面或简单服务器应用的 Java 平台
Java EE(Enterprise Edition ):用于复杂服务器应用的 Java 平台
Java ME(Micro Edition ):用于手机和其他小型设备的 Java平台
Java FX:用于图形化用户界面的一个替代工具包 , 在 Oracle 的 Java SE 发布版本中提供
OpenJDK:JavaSE 的一个免费幵源实现 ,不包含浏览器集成或 JavaFX
NetBeans:Oracle 的集成开发环境
暂未详细学习的点:
*使用命令行工具。
2.Java区分大小写。
3.class:Java 中定义类名的规则很宽松。 名字必须以字母开头 , 后面可以跟字母和数字的任意组合。 长度基本上没有限制 。 但是不能使用Java 保留字 ( 例如 ,public 或 class ) 作为类名。
4.源代码的文件名必须与公共类的名字相同, 并用 . java 作为扩展名 。
5.根据 Java 语言规范 , main 方法必须声明为 public。
6. object.method ( parameters ),这等价于函数调用。 比如System . out 对象并调用了它的 println方法。
7.在 Java 的方法中 , 可以没有参数 , 也可以有一个或多个参数 ( 有的程序员把参数叫做实参 )。 对于一个方法 , 即使没有参数也需要使用空括号 。
8.在 Java 中 , / * * / 注释不能嵌套。
9.Java 是 - 种强类型语言 。 这就意味着必须为每一个变量声明一种类型 :。
10.在通常情况下,int类型最常用。 但如果表示星球上的居住人数 ,就需要使用 long 类型了。 byte和 short 类型主要用于特定的应用场合 , 例如 , 底层的文件处理或者需要控制占用存储空间量的大数组 。
11.在 Java 中 , 整型的范围与运行 Java 代码的机器无关 。
12.长整型数值有一个后缀 L 或 l ( 如 4000000000 L ) 。 十六进制数值有一个前缀 0x 或 0X ( 如0xCAFEL 八进制有一个前缀 0 ,例如 ,010 对应八进制中的 8 。 很显然 , 八进制表示法比较容易混淆 , 所以建议最好不要使用八进制常数 。从 Java 7 开始 , 加上前缀 0 b 或 0 B 就可以写二进制数 。
13.在 Java 中, 所有的数值类型所占据的字节数量与平台无关。注意 , Java 没有任何无符号 ( unsigned ) 形式的 int、 long 、 short或 byte 类型 。
14.码点 ( code point ): 是指与一个编码表中的某个字符对应的代码值。
3.4.1 变量
15.在 Java 中, 每个变量都有一个类型 ( type ) 。
16.在 Java 中可以将声明放在代码中的任何地方 。在声明变量时 , 变量的类型位于变量名之前。 由于声明是一条完整的 Java 语句 , 所以必须以分号结束 。
17.可以在一行中声明多个变量。
18.变量名必须是一个以字母开头并由字母或数字构成的序列 。 变量名中所有的字符都是有意义的, 并且大小写敏感 。 变量名的长度基本上没有限制 。
19.声明一个变量之后, 必须用赋值语句对变量进行显式初始化 , 千万不要使用未初始化的变量。
3.4.2 常量
20. 利用关键字 final 指示常量。例如:final double CM _ PER _ INCH = 2.54 ; 习惯上 ,常量名使用全大写。
21. 类常量:可以使用关键字 static final设置一个类常量 。例如:public static final double CM _ PER _ INCH = 2.54;注意类常量的定义位于 main方法的外部,因此 , 在同一个类的其他方法中也可以使用这个常量。如果一个常量被声明为 public , 那么其他类的方法也可以使用这个常量 。
3.5 运算符
22.加、减、乘、除、求余运算用 +、 - 、* 、 / 、%表示 。 当参与 / 运算的两个操作数都是整数时,表示整数除法;否则 , 表示浮点除法 。 例如, 15 / 2 等于7, 15 % 2 等于1 , 15.0 / 2 等于 7.50。需要注意 , 整数被 0 除将会产生一个异常, 而浮点数被0 除将会得到无穷大或 NaN 结果 。
23.类型转换:byte-short-int-long-float-double
24.强制类型转换 ( cast ): (目标类型) 变量名 。
25. 位运算符:需要再研究
26. 枚举类型:自定义枚举类型 enum Size { SMALL , MEDIUM , LARGE , EXTRA . LARCE }
3.6 字符串
1.当将一个字符串与一个非字符串的值进行拼接时,后者被转换成字符串。例如 :int age = 13 ;String rating = " PC " + age。
2.String 类没有提供用于修改字符串的方法 。要修改字符串,提取需要的字符 , 然后再拼接上替换的字符串 :greeting = greeting . substring ( 0 , 3 ) + " p ! "
3.检测字符串是否相等:s.equals (t),如果字符串 s 与字符串 t 相等 , 则返回 true ; 否则 , 返回 false。不要使用 = 运算符检测两个字符串是否相等 ! 这个运算符只能够确定两个字是否放置在同一个位置上 。
4.检测两个字符串是否相等, 而不区分大小写 , 可以使用 equalsIgnoreCase方法。" Hello " . equalsIgnoreCase ( " hello" )
5.检查一个字符串是否为空:if ( str.length() = 0) 或 if ( str . equals ( "" ) )。
6.检查一个字符串是否为 null:if ( str = = null )
7.检查一个字符串既不是 null 也不为空串:if ( str ! = null & & str . length()! = 0 )
8.string API
p67-p69.
9.构建字符串
构建一个空的字符串构建器 :StringBuilder builder = new StringBuilder();
每次需要添加一部分内容时 , 就调用 append 方法 :builder.append ( ch ) ;
3.7 输入输出
1.读取输入:
要想通过控制台进行输人, 首先需要构造一个Scanner 对象, 并与 “标准输人流 ” System . in 关联:Scanner in = new Scanner ( System . in ) ;
2.因为输入是可见的 , 所以 Scanner 类不适用于从控制台读取密码 。 Java SE 6 特别引入了 Console 类实现这个目的 。 要想读取一个密码,
可以采用下列代码 :
Console cons = System . console () ;
String username = cons.readLine ( " User name : " ) ;
char [ ] passwd = cons . readPassword ( " Password : " );
3.格式化输出
System.out.print ( x ) ;
System.out.printf ( " Hello , % s . Next year , you ' ll be SSd " , name , age ) ;
Systen. out.printf("%, . 2 f " , 10000.0 / 3.0 ) ;
可以使用静态的 String.format 方法创建一个格式化的字符串 , 而不打印输出 :String message = String.format ( " Hello , % s . Next year , you ' ll be % d " , name , age ) ;
4.文件输入与输出
读文件:Scanner in = new Scanner ( Paths.get ( " myflle.txt " ) , " UTF - 8 " ) ; 文件名中包含反斜杠符号, 就要记住在每个反斜杠之前再加一个额外的反斜杠 :“c : \\ mydirectory \ \ myfile . txt ” 。
写文件:PrintWriter out = new Printlulriter("myfile . txt " , " UTF - 8 " ) ; 文件不存在, 创建该文件 。
可以使用下面的调用方式找到路径的位置 :String dir = System.getProperty("user . dir " ) ;
3.8 控制流程
略
1.用标签设置要跳出的循环 标签名:循环体开始 break 标签名; 循环体结束
3.9 大数值
1.大数值:Biglnteger 类实现了任意精度的整数运算 , BigDecimal 实现了任意精度的浮点数运算 。
2.将普通的数值转换为大数值 :Biglnteger a = Biglnteger.valueof ( 100 );
3.大数值不能使用算术运算符,而使用 add 和 multiply 方法:
Biglnteger c = a.add ( b ) ; / / c = a + b
Biglnteger d = c.multiply ( b.add ( Biglnteger.valueOf ( 2 ) ) ) ; // d = c * ( b + 2 );
//java.math API
3.10 数组
1.数组是一种数据结构,用来存储同一类型值的集合。
2.创建数组: 数据类型[] 数组名 =new 数据类型[数组长度]。 数组长度不要求是常量。
3.创建一个数字数组时,所有元素都初始化为0。 boolean 数组的元素会初始化为 false 。对象数组的元素则初始化为一个特殊值null, 这表示这些元素(还)未存放任何对象。
4.一 旦创建了数组,就不能再改变它的大小 (尽 管可以改变每一个数组元素)。如果经常需要在运行过程中扩展数组的大小,就应该使用另一种数据结构—数组列表 (array list ) (见第五章)。
5.for each 循环: for (variable : collection) statement;
例如:
for (int element : a)
System.out.pri ntln(element);
循环打印a中的每一个元素。
6.简化形式的数组初始化:数组类型[] 变量名={数值1,数值2,···};
7.初始化一个匿名数组:new 数组名[] {数值1,数值2,···};
// 注意,数组长度为0,与null不相同。
8.数组拷贝:
数据类型[] 变量名1 = 变量名2;
数据类型[] 变量名1=Arrays.copyOf(变量名2,变量名2.length);
9.命令行参数
10.数组排序
Arrays.sort(a);
11.多维数组
略
12.不规则数组
略