java核心技术卷一 (1-3章:基本数据类型和String等)
java中的基础数据类型
1. 4种整型 byte short int long 1 2 4
2. 2种浮点 float double 4 8
3. 1种布尔 boolean
char 类型 (用于表示单个字符、有些unicode字符可以用一个char描述,有些需要2个char描述)
1. Unicode和char
Unicode 用来对世界上所有语言的所有字符进行编码
java的char采用16位,但随着加入汉语,韩语等语言,16位的char已经无法满足描述所有的Unicode字符
java中采用码点来解决无法描述所有Unicode字符这个问题, 具体不展开说明
码 点 ( code point ) 是指与一个编码表中的某个字符对应的代码值。
UTF-16 编码采用不同长度的编码表示所有 Unicode 码点。
在java中,char 描述UTF-16编码中一个代码单元。不建议使用char ,除非需要处理UTF-16代码单元。建议使用字符串String
boolean 类型 只有2个值,true和false,整型值和布尔值不能相互转换
变量
1. 如果想要知道哪些Unicode字符属于java中的字符,可以使用Character来检查
2.不建议使用这种风格 int i j;声明变量,逐一声明变量可以提高代码的阅读性。
变量初始化
1.声明变量后,必须使用赋值语句对变量进行显示初始化。=== 在使用的时候
常量
1.使用final修饰,一旦赋值之后就不能更改了。
类常量
1.使用 static final 修饰,如果加上了public ,那么在其他的类也可以使用这个类常量
运算符
+ - * / (如果一个整数除以0,则会产生一个异常,如果是float除以0,则会得到一个NaN数)
strictfp关键字
1.对于使用strictfp关键字标记的方法,必须使用浮点计算来生成可再生的结果。
Math 类
1. 平方根 Math.sqrt(x) x开平方
2. 幂运算 Math.pow(a,b) a的b次幂
3. 取余 Math.floorMod(value, number) value 对 number取余
4.不必在数学方法名和常量名前添加前缀“ Math”,只要在源文件的顶部加上下面 这行代码就可以了。
import static java.1ang.Math.*; 例如:
System.out.println("The square root of \u03C0 is " + sqrt(PI));
String 字符串
1. 想要得到String的实际长度,即码点数量,coinPointCount(0, str.length());
2. 想要得到第i个码点,int index = str.offsetByCoinPoint(0,i); int cp = str.coinPointAt(index);
3. str.length();返回UTF-16代码单元的数量
String 字符串码点数组和字符串之间的相互转换
1. int[] codePoints = str.codePoints().toArray();
String str = new String(codePoints, 0, coinPoints.length());
StringBuffer和StringBuilder的区别
1.StringBuffer效率有点第,但允许采用多线程多方式执行添加和删除字符
2.StringBuilder,可以理解为StringBuilder是为了提高StringBuffer的效率而新增的。如果一个字符串在一个单线程中编辑,使用StringBuilder
3. 常用的api
length();
append();
appendCodePoint();
setCharAt();
insert();
delete();
toString();
System.out.printf(); 可以控制格式化输出各种标志
举例一些简单常用的输出 %s 代表输出String字符, %d代表输出十进制整数, %f代表输出浮点数,%8.2f 8代表8个字符,2代表消暑点后多少位,f代表浮点
1. System.out.printf("%8.2f", 3333.33333); //输出一个空格和7个字符,其中有2个小数点 " 3333.33"
2. System.out.printf("hello, %s next year you will be %d", name, age);//输出"hello, name next year you will be age",其中name是字符串,age是十进制整数
3. System.out.printf("%,.2f", 3333.3333333);//输出3,333.33
可参考printf的标志表,查看输出规则。
格式化的字符串,这个有时候比较常用
1.可以使用s转换符格式化任意对象,对于实现了Formattable接口的对象都将调用formatTo方法,否则调用toString方法。
它可以将对象转换为字符串。
String massage = String.format("Hello, %s. Next year, you'll be %d", name , age);
2.时间的输出或者格式化
System.out.printf("%tc", new Date());//完整的日期和时间
System.out.printf("%tT", new Date());//24小时时间
根据以上列表数据,如有需要,可据表查询需要的日期格式。
System.out.printf("%l$s %2$tB %2$te, %2StY", "Due date:", new Date());//以%百分号开始,$结束,表示第几个参数格式化的格式
如上,代表第一个参数输出字符,第二个对应表的B,同样第二个对应e等。
参教索引值从i 开始,而不是从o开始, 对第1个参数格式化这就避免 了与 0 标志混淆
大数值
2个类,BigInteger 、BigDecimal
BigInteger : 实现类任意精度大整数运算
BigDecimal : 实现了任意精度大浮点数运算
1.大数值运算中不能使用+和*,需要使用add和multiply方法
BigInteger c = a.add(b);//c=a+b
BigInteger c = a.multiply(b);//c = a*b;
java中跳出多层嵌套
1.通过label标签。注意,标签必须放在希望跳出大语句的前面,并跟着一个:号。
实例:
class Main { public static void main(String[] args) { int i=0; outer: for (;true;) { inner: for (; i<10; i++) { System.out.println("i = " + i); if (i==2) { System.out.println("continue"); continue; } if (i==3) { System.out.println("break"); ++i; break; } if (i==7) { System.out.println("continue outer"); i++; continue outer; } if (i==8) { System.out.println("break outer"); break outer; } for (int k=0; k<5; k++) { if (k==3) { System.out.println("continue inner"); continue inner; } } } } } }
当值等于8的时候,break到标签,会跳出多个循环嵌套。