前言:准备深入学习java后开始阅读java核心技术卷Ⅰ,由于此前学习过java面向对象程序设计,卷Ⅰ的前几章有很多重复的内容,故此读书笔记只记录了补充内容。
(前三章)
一.String1.“”不等于null
2.字串提取:
String s="hello"; String e=s.substring(0,3); //输出为“Hel”
3.码点是指一个编码表中的某个字符对应的代码值。Unicode的码点分为17个代码级别,第一个级别是基本的多语言级别,码点从U+0000——U+FFFF,其余的16个级别从U+10000——U+10FFFF,其中包括一些辅助字符。
在计算机存储和网络传输时,码点值(即字符编号)被映射到一个或多个码元(Code Unit代码单元、编码单元)。码元可理解为字符编码方式CEF(Character Encoding Form)对码点值进行编码处理时作为一个整体来看待的最小基本单元。大多数常用的Unicode字符使用一个代码单元就可以表示,而辅助字符需要一对代码单元表示。
charAt(int index)返回给定位置代码单元。
codePointAt(int index)返回码点
上面给出的一些概念用以说明最好不要使用char类型,例如某些特殊字符有两个代码单元,对其调用charAt(1),得到的不是下一个字符,而是该特殊字符的第二个代码单元。
4.遍历一个字符串并且依次查看每一个码点用codePoints方法,他会生成一个int值的流,每个int值对应一个码点,可以将其转换为一个数组再完成遍历。
int[] codePoints=str.codePoints().toArray()//转换后生成数组 //下面为将码点数组转换为字符串,使用对应的构造函数 String str=new String(codePoints,0,codePoints.length)
5.StringAPI部分
replace(顺序 旧字符串,顺序 新字符串)
trim()返回一个新字符串,该字符串删除了原始字符串头部和尾部的空格。
6.StringBuilder
直接上api:append(string)、append(char)
setCharAt(int i,char c)把i位置的变成c
insert(int ,string/char)在i位置后插入
delete(i,j)删除i至j-1
二,输入输出1.读取输入:创造一个scanner对象,并与标准输入流system.in关联
Scanner sc =new Scanner(System.in);
scanner的一些api:next()读取下一个单词(以空格作为分隔符)
boolean hasNext()输入中是否还有其他单词,hasNextInt是否还有表示整数的下一个字符序列。
2.scanner类的输入是可见的,所以不适合从控制台读取密码,Console类可以实现这个目的
Console cons = System.console();
String username=cons.readLine("user name");/
char[] passwd=cons.readPassword("passwird:");
3.格式化输出:printf(“%8.2f”,x)用8个字符的宽度和小数点后两个字符的精度打印x
%字符开始的格式说明符都用相应的参数替换,尾部的转换符表明格式化的数值类型。注意可以使用s转换符格式化任意的对象,底层原理为实现了Formaattable接口的对象都将调用formatTo方法,否则将调用toString方法。
转换符tx/Tx为旧代码用于表示实践,例如System.out.printf("%tc",new Date());
x=c表示完整的时间,x不同可以表示不同形式的时间
4.文件输入与输出:
Scanner in =new Scanner(Path.get(("myfile.txt"),"UTF-8");
想要写入文件的话需要构建一个PrintWriter对象,在构造方法中只需要提供文件名,如果文件不存在就创建该文件,可以使用print、println、printf等命令。如果scanner的构造方法里直接写入文件名,会被认为是一个字符串,需要先对其进行定位。String dir=System.getProperty("user.dir")得到定位后访问文件。
出现异常的情况:用一个不存在的文件构造scanner 以及 一个不能被创建的文件名构造printwriter。
三.控制流程1.标签除了应用在循环中,实际上可以应用到任何语句中
label:
{.....
if() break label;
} // 完成对一个语句块的中断。
另:大数值:BigInteger(任意精度的整数运算)和BigDecimal(任意精度的浮点数运算)
类
创建大数值:静态的valueOf方法将普通的数值转换为大数值。
BigInteger a =BigInteger.valuOf(1000000000000000);
不能使用熟悉的算术运算符,需要使用类中专门的方法:
BigInteger c=a.add(b);//c=a+b BigInteger d=c.multiply(b.add(BigInteger.valueOf(2)));d=c*(b+2)
和add差subtract积multiply商divide求余mod 基本的运算此两类都有
四.数组一旦创建了数组,就不能改变其大小,就应该使用arraylist,数组初始化为0,对象数组初始化为null。
1.打印数组中的值的三种方式
//first-- traditional way for(int i=0;i
快速打印二维数组的方法:System.out.println(Arrays.deeoToString(a)
2.数组排序Arrays.sort()方法,采用的是优化的快速排序
binarySearch(type[]a,int start,int end,type v)用二分搜索查找值v,查找成功则返回下表,失败返回负数。即在a中从start到end-1搜索v。
3.不规则数组
java实际上没有多维数组,是数组的数组(内存模型)



