3.1 一个简单的Java应用程序
public class FirstSample { public static void main(String []args) { System.out.println("Hello world!"); }}
3.2 注释
// 单行注释
3.3 数据类型
(1)整型
(2)浮点型
注:
溢出和出错可用下列三个特殊浮点数值表示:
正无穷大(Double.POSITIVE_INFINITY)
负无穷大(Double.NEGATIVE_INFINITY)
NaN(不是一个数字 Double.NaN)
判断x是否为NaN的方法:
// 错误if(x == Double.NaN) // is never true// 正确if(Double.isNaN(x))
浮点数值不适用于无法接受舍入误差的金融计算中。
(3)char类型
(4)boolean类型
boolean只有两个值:true和false,用来判定逻辑条件。
整型值和布尔值之间不能进行相互转换。
int a = 10;if(a) // 错误if(10) // 错误Boolean flag = true;if(a == 10) // 正确if(flag) // 正确
3.4 变量
(1)常量定义
final int ABC_D_F = 2; // final表示这个变量只能赋值一次static final int X_Y_Z = 10; // 类常量可以用static final定义
3.5运算符
(1)/ 运算:
(2)数学函数与常量
// 常规用法import java.lang.Math.*;System.out.println(Math.PI);// 静态导入,可省略Mathimport static java.lang.Math.*;System.out.println(PI);
(3)数值类型之间的转换
上图解释
实心箭头:表示无信息丢失的转换。
虚箭头:表示可能有精度损失的转换。
进行二元计算时,(如 n + f),先要将两个操作数转换为同一种类型,然后再进行计算。(double > float > long > int)
如果两个操作数中有一个是double类型,另一个操作数就会转换为double类型。否则,如果其中一个操作数是float类型,另一个操作数将会转换为float类型。否则,如果其中一个操作数是long类型,另一个操作数将会转换为long类型。否则,两个操作数都将被转换为int类型。
(4)强制类型转换
// 浮点型转整型double x = 9.993;int y = (int)x; // y = 9// 带舍入运算的浮点型转整型double x = 9.993;int y = (int)Math.round(x); // y = 10
(5)关系运算
a && b 和 a|| b (短路方式运算):如果a为false,b就不计算。
(6)位运算
a & b 和 a| b (非短路方式运算):a和b都计算。> > >:用0填充高位。> > :用符号位填充高位。< <
3.6 字符串
(1)子串
String str = "Hello World!";String str1 = str.substring(0,5); // Hello
(2)拼接
使用“+”拼接
String a = "Hello";String b = "World";String c = a + b; // "HelloWorld"// 当将一个字符串与一个非字符串的值进行拼接时,后者被转换成字符串int index = 987;String d = a + index; // "Hello987"
使用String.join()拼接
String str = String.join(" ", "a", "b", "c"); // "a b c",第一个参数为定界符
(3)不可变字符串
String为不可变字符串。
(4)检测字符串是否相等
== :检测两个字符串是否放在同一位置上。
equals():检测两个字符串内容是否相同。
equlsIgnoreCase():忽略大小写检测两个字符串内容是否相同。
String a = "Hello";String b = "hello";if(a.equals(b)) // falseif(a.equlsIgnoreCase(b)) // true
(5)空串和Null串
空串:即"",是一个Java对象,有自己的串长度(0)和内容(空)。Null串:即null,表示目前没有任何对象与该变量关联。
// 判断一个字符串是否为nullif(str == null)// 判断一个字符串既不是null也不为空串if(str != null && str.length() != 0)
3.7 输入输出
(1)读取输入
Scanner in = new Scanner(System.in);// 只有一个输入String str = in.next();// 多个输入while(in.hasNext()) { str = in.next();}
(2)格式化输出
沿用C语言格式化输出方法
与C语言相比,将printf()用System.out.printf()替换即为该格式化输出方法。
Double num = 10000 / 3.0;System.out.printf("%fn", num);System.out.printf("%.2fn", num); // 保留小数点后2位System.out.printf("%8.2fn", num); // 长度为8,右对齐,保留小数点后2位System.out.printf("%-8.2fn", num); // 长度为8,左对齐,保留小数点后2位System.out.printf("%,.2fn", num); // 保留小数点后2位,用“,”分隔// 运行结果3333.3333333333.33 3333.333333.33 3,333.33
静态String.format()格式化输出方法
(3)文件输入与输出
创建Scanner对象方法
try { // 相对路径 Scanner in = new Scanner(Paths.get("src/Test1/hello.txt"), "UTF-8"); // 绝对路径 //Scanner in = new Scanner(Paths.get("D:\Desktop\WorkSpace\数据结构\src\Test1\hello.txt"), "UTF-8"); while(in.hasNextLine()) { System.out.println(in.nextLine()); }} catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace();}
序列化方法(将在后面章节详解)。
3.8 控制语句
(1)条件与循环
if(condition){} 和 while(condition){} 的condition 只能是 表达式 或 Boolean 对象。
(2)中断控制流程
continue:当前循环体的剩余部分,立刻跳到循环首部
break:退出当前层循环。
注:break 也可实现退出指定循环
// 只输出一个 1first : for (int i = 0; i < 12; i++) { for (int j = 0; j <12; j++) { System.out.println(1); break first; } }
3.9 大数值(BigInteger 和 BigDecimal)
(1)BigInteger(整数)
// 创建BigInteger对象BigInteger a = BigInteger.valueOf(2);
(2)BigDecimal(浮点数)
// 创建BigDecimal对象BigDecimal a = BigDecimal.valueOf(2);
均不支持"+"、"-"、"*"、"/"等运算符,“加减乘除”等运算算法由其封装的方法提供。
3.10 数组
(1)二维数组foreach遍历
int[][] arr = new int[10][10];for(int[] row : arr) {for(int value : row) {}}
(2)创建不规则数组
int[][] arr = new int[10][];for(int i=0; i (3)Arrays方法类 `` 均不支持"+"、"-"、"*"、"/"等运算符,“加减乘除”等运算算法由其封装的方法提供。 3.10 数组 (1)二维数组foreach遍历 int[][] arr = new int[10][10];for(int[] row : arr) {for(int value : row) {}} (2)创建不规则数组 int[][] arr = new int[10][];for(int i=0; i (3)Arrays方法类