Chapter 1
- Java中int大小永远为32位。数据类型具有固定的大小。字符串都是用标准的Unicode格式存储的。
- 在网页中运行的Java程序成为applet,要使用applet,需要启用Java的Web浏览器执行字节码
- 创始人詹姆斯·高斯林,与1996年发布Java1.0版本,Sun公司于2009年被Oracle公司收购
Chapter 2
- JDK工具包的1.2~1.4版本被称为Java SDK,还有一个JRE,它包含Java运行时环境,包含虚拟机但不包换编译器。
- Java SE(java标准版)、JavaEE(企业版Java)、JavaME(MicroEdition用于手机和其他小型设备的Java平台)
- 我们使用的和需要的是JDK(Java SE开发包),而不是JRE
- 使用命令行
Chapter 3
-
一个简单的Java程序
public class FirstSample { public static void main(String[] args) { System.out.println("We will not use 'HelloWorld'"); } }
- 关键字public成为访问修饰符,用于控制程序的其他部分对这段代码的访问级别。
- 关键字class表明Java程序中的全部内容都包含在类中。类是构建所有Java应用程序的构建块
- 命名规范
- 当使用javac运行已编译的class字节码文件时,Java虚拟机将从指定类的main方法开始执行。
-
main方法必需为public的,不过,有些版本的Java解释器也能够执行Java应用程序,bug号码4252539.Java SE1.4版本以后网址main方法是public的
-
Java中任何方法的代码都用“{”开始,“}”结束。空白符会被Java编译器忽略。
-
回车不是一条Java语句的结束,所有如果需要,可以把一条语句写在多行上。
-
点号(·)用于调用方法。Java使用的通用语法是object.method(parameters),等价于函数调用
-
注释: //、/* /、/* */
-
Java是一种强类型语言,这就意味着必需为每一个变量声明一种类型。
-
Java有八种基本数据类型:4中整型,2中浮点型,1种Unicode字符型,1中布尔型。Java 中一个表示任意精度的包:big number,不是一种新类型,而是一个Java对象。
-
整型int、short、long、byte
类型 存储需求 取值范围 int 4字节 约为-21亿~+21亿,可以表示42亿个数字 short 2字节 -32768 ~ +32767 long 8字节 -9223372036854775808~+9223372036854775807基本可以表示可以用到的所有数字 byte 1字节 -128 ~ +127 -
int类型最常用,byte和short主要用于特定的应用场合
-
长整型数值后有一个L或者l(40000L),十六进制前缀0x(0xCAFE),八进制前缀0,容易混淆,所以最好不要用八进制常数
-
注意,Java中没有任何无符号(unsigned)形式的int、long、short或byte类型
-
Java有两种浮点类型
类型 存储需求 取值范围 float 4字节 有效位数(6~7位) double 8字节 有效位数15位 double的精度是float的两倍,也称,双精度浮点数。绝大多数的应用程序都使用double类型,事实上,只有很少情况下才会使用float类型
-
float数值后缀f(3.141936f),没有后缀默认double,也可以在浮点数后面贾D或者d,表示double
-
可以用十六进制表示浮点数,例如0.125 = 2^-3,可以表示位0x1.0p-3,注意,使用p表示指数,位数采用十六进制,指数拆用十进制,指数的技术是2,而不是10
-
浮点数计算遵循IEEE 74规范,三个特殊的浮点数值:正无穷大、负无穷大、NaN()不是数字。例如,一个正整数初一0的结构位正无穷大。计算0/0或者负数的平方根结果位NaN。
-
不能用Double.NaN来判断一个数是否等于Double.NaN,例如x == Double.NaN永远返回false。但是可以用Double.isNaN()来判断一个值是否是NaN
-
浮点数不适用于无法结束摄入误差的精确计算中,例如2.0-1.1输入0.89999999,而不是0.9,这是由于计算机李的数是由二进制保存的
-
-
Char类型
用以表示有些Unicode字符,’\u0000’ ~ ‘\uffff’.例如public static void main(String\u005B\u005D args) 是合法的转义序列 名称 Unicode值 \b 退格 \u0008 \t 制表符 \u0009 \n 换行符 \u000a \r 回车 \u000d \" 双引号 \u0022 \’ 单引号 \u0027 \\ 反斜杠 \u005c 在这种情况下 “\u0022+\u0022” 这个字符串会在解析之前被转换为""+"",也就是空串
-
Unicode和char类型
Java中,char类型描述了UTF-16编码的一个代码单元。强烈建议不要在程序中使用char类型,除非确实需要处理UTF-16的代码单元,最好将字符串作为抽象数据类型处理。 -
boolean类型。用来判定逻辑条件。整型值和布尔值之间不能进行相互转化
-
在Java中,每个变量都有一个类型,变量的类型位于变量名之前。
-
变量名的所有字符都是有意义的,并且大小写敏感,长度上基本没有限制
如果想知道那些Unicode字符属于Java中的“字母”,可以使用Character类的isJvaIdentifierStart和isJavaIdentifierPart检查. -
变量初始化:
声明一个变量和,必需显式的用赋值语句对比变量进行初始化。 -
Java中,利用关键字final指示常量。例如final double CM_PER_INCH = 2.54
Java中,希望一个变量在一个类中多个方法中国使用,通常用关键字static final设置一个类变量。例如:public static final double CM_PER_INCH = 2.54 -
运算符:当参与/运算的两个操作数都是证书时,表示证书出发,否则,表示浮点除法。(15/7 = 2、15.0/2 = 7.5)注意:整数除0,将会得到一个异常,二浮点数除0会得到无穷大或NAN的结果。
strictfp关键字标记:必需用严格的浮点计算来生成可再生的结果。-
在Math类中,包含类各种个样的数学函数。
-
==import static java.lang.StrictMath.floorMod;==加入这行代码后,不用写Math前缀。
-
类型转换 double > float > long > int
-
强制类型转换(cast)
-
Math.round()返回的是long类型,需要强制类型转换成int
-
结合赋值和运算符。会发生强制类型转换。例如x=4;x+=3.5;----->x=7
-
自增和自减运算符
-
关系和boolean运算符
-
位运算符 &(and)、|(or)、^(xor)、~(not)。&、|也可以用于布尔值运算,不采用短路的方式运算。
-
括号和运算符级别
运算符 等价于 a && b a += b == c a += (b += c) -
枚举类型
enum Size {SMALL, MEDIUM, LARGE, EXTRA_LARGE}
Size类型只能存储这个类型声明的某个值和null
-
-
字符串
-
Java的字符串就是Unicode字符序列。
-
substring()可以从一个较大的字符串中提取一个子串
String greeting = “Hello”;
String s = greeting.substring(0, 3); --------> “Hel”
-
拼接:允许使用“+”拼接字符串
-
将join():字符串拼接,用指定字符串分割
-
不可变字符串:String类对象为不可变字符串。字符串共享
-
Java的字符串不是字符数组
-
检查字符串是否相等:equals()、equalsIgnoreCase()。**一定不要用判断字符串是否相等**==
-
空串与Null串!!!空串不等于Null串
-
码点与代码单元(codePointCount()获取码点数量)。
str.codePoints().toArray()获取字符数组
CharSequence接口,所有字符串都属于这个接口
-
-
StringBuilder:需要用很短的字符连接成字符串时,效率很高
用append方法添加内容
用toString获取String类型对象
这个类的前身是StringBuffer,效率稍低,但是是线程安全的
-
输入输出
Scanner in = new Scanner(System.in);
从控制台读取密码:
Console cons = System.console(); String username = cons.readLine("User name:"); char [] passwd = cons.readPassword("Password:");
-
格式化输出
System.out.printf()
格式化后字符串:
String message = String.format(“Hello, %s. Next year, you’ll be %d”, name, age);
参数索引P60
System.out.printf("%1 s s %2tB %2 ste, %2$tY", “Due date:”, new Date());
-
文件输入输出(略)
-
控制流程
- Java没有goto语句(goto虽然是保留字),但是break可以带标签。还有增强型for循环
- if语句
- while循环
- do-while循环
- switch语句可以判断字符串(从Java7开始)
- Java提供一种带标签的break语句,用于跳出多层潜逃循环,标签必需放在希望跳出的最外层循环之前,并且必需紧跟一个冒号
read_data: while(...) { while(...) { break read_data; } } ...S //这段代码如果break后,是从S开始执行,read_data是while循环的标签
-
大数值(BigInteger/BigDecimal)
- Java没有运算符重载,大数值不能用算数运算符
-
数组
-
创建一个数字数组时,数组中所有原始都被初始化为0。boolean数组全初始化为false,对象数组初始化为null
-
数组长度array.length
-
一旦创建了数组,就不能该表它的大小。
-
for_each - 增强型for循环( 必需是一个数组或者实现了iteartor接口的对象)
-
Java中,所有变量都是引用
-
Java的new -------> 在堆上分配内存
-
命令行参数:每一个Java程序都带有一个String arg[]参数的main方法。这个参数表明main方法接受一个字符串数组
java Test -g world 那么args[0] = "-g" args[1] = "world"
-
数组排序
Arrays.sort() : 使用优化的快速排序方法
Java.util.Arrays 包含数组的工具类 包含sort(), binarySearch(), fill(), equals() -
多维数组
for_each需要两层循环
-
不规则数组
每个一维数组有不同的长度,因为一维数组中的每一个元素相当于一个引用 double[][] a = new double[10][6] 相当于 分配了10个指针的数组,每个指针指向一个包含6个数字的数组
-