一、API 现成的类(程序)
- Java API是java(Oracle)提供的系统标准API。
- 第三方的jar包API,如:JUnit.jar。
- 可以自己开发一些API。
- 一般情况下任何技术都有现成的API。
二、文档注释
- java源代码中,/**...*/可以用于生成手册。
- 在文档中,可以使用@定义手册的段落,格式:@author @see
- 利用java开发工具命令javadoc可以生成JavaHTML版本的手册。(也可以用eclipse的图形界面的export命令调用javadoc生成手册)
- javadoc命令是利用JDK的命令,需要配置好JDK以后才能使用。
- API都提供了javadoc手册。javadoc手册是利用文档注释写在源码中的
- 可以利用JDK的javadoc工具抽取为HTML版本的手册。
三、String 及其重要的API类
- java中“最重要”的基础API类。
- 字符串的长度是字符的个数。
- String类不能被继承,否则会报编译错误。
- 字符串操作,本身是数组的扩容与复制。
四、String常量池 性能优化现象
- 静态字符串:字面量/常量/常量的连接结果
- “==”比较的是:变量的值(对象的地址)
五、String类的静态缓冲池优化现象
- 静态字符串:编译器能够确定内容的字符串,如字符串常量。
- 字符串字面量:字面量常量的运算结果。如:public static final int ROWS=20; //ROWS称为常量;20称为字面量;
- 相同静态字符串,在运行期间引用同一个对象。
六、关于String API
- 如果返回值与原字符串不同,就返回新字符串对象。
- 如果返回值与原字符串相同,经常返回原字符串对象。
七、关于String
- String是final类型。
- String对象是不可改变的(改变后指向新的String对象)。
- String API如果改变了内容,就返回新对象。
- String API方法是对char数组的操作运算。
- 没有API或者不用API,可以利用for循环处理字符数组,实现相应的功能,如果优化的好的话,性能有可以好与String API。
八、String常用API
- indexOf(String str)
- int indexOf(String str, int fromIndex)
- int lastIndexOf(String str, int from)
- String substring(int beginIndex, int endIndex)
- .trim()
- char charAt(int index)
- startsWith和endsWith
- toUpperCase和toLowerCase
- String.valueOf(...)
九、StringBuilder及其API
- StringBuilder内部的字符数组内容和长度可变。
- StringBuilder可改变字符串。
- StringBuilder的字符操作性能好于String。
- String的连接计算是使用StringBuilder实现的。
- 输入输出简单操作时用String,复杂的更改使用StringBuilder,极致性要求时使用字符数组计算。
- append(String str)
- insert(int dstOffset, String s)
- delete(int start, int end)
- replace(int start, int end, String str)
- reverse()
总结:
- StringBuilder是可变字符串,字符串的内容计算建议采用StringBuilder实现,这样性能会更好些。
- java的字符串连接过程就是利用StringBuilder实现的。
- StringBuffer和StringBuilder
StringBuffer是线程安全的,同步处理的,性能稍慢。
StringBuilder是线程不安全的,并发处理的,性能稍快。
十、正则表达式 Regular Expression (regex)
- 正则表达式:字符串的规则定义,字符串中字符出现的次序规律
- 业务规则:检查一段话中是否出现了“国骂”
- 是字符的“规则”定义,用在:1)文本内容的检索,在文件中查询需要的内容;2)文本内容的检查:检查文字中是否符合规范;3)文本的处理,拆分,替换等。
- java,PHP,javaScript等很多语言都支持正则
- 开发工具,操作系统,也支持正则表达式,不同系统的正则规范不同,可查看API手册 java.util.regex.Pattern
- boolean str.matches(regex); String[] split(String regex); String replaceAll(String regex, String replacement);
十一、Object
- 任何类型的父类型,一切皆对象
- Object类型的变量,可以引用任何对象,超级多态。
- Object定义了很多重要的方法,被子类继承,Java系统方法:toString, equals, hashCode
十二、toString方法
- toString方法:用于返回当前这个对象的文字描述,任何东西都可以用文字说明(描述)
- java认为任何对象都可以用文字描述,所以在Object类上定义了toString()方法,任何类型都可以继承这个方法。
- 建议子类重写这个方法,提供具体的文字描述
- 一般都在子类中重写这个方法
- java很多API都会回调这个方法的结果。println(obj)就会调用toString()。记住:以后只要写类,就写toString(),便于调试输出数据。
- 如何重写toString()?一般返回属性值。
- 默认返回结果是:classValue@hashCode
十三、equals方法
- equals用于比较对象的相等
- 建议子类重写
- 采用“模版”重写
- 要了解默认的equal方法(等同于==)
- java的很多方法会回调这个方法比较对象,如:Arrays.equals(arg1, arg2)
- String重写了equals方法
重写“模版”
public boolean equals(Object obj){
if(obj==null){
return false;
}
if(this==obj){
return true;
}
if(obj instanceof cell){
Cell cell = (Cell) obj;
return cell.row == row && cell.col == cell; //每个属性相同则认为是equals的
}else{
return false;
}
}
十四、equals和==的区别
- ==用于比较变量的值,可以应用于任何类型,如果用于引用类型,比较的是两个引用变量中存储的值(地址信息),判断两个变量是否指向的是同一个对象。
- equals是Object的方法,重写以后,可以用于比较两个变量的内容是否“相等”。
- 需要注意的是,Object默认的equals方法的比较规则同==。
十五、包装类
- 提供了字符串的数据向基本类型转换的算法,这些算法是人类输入与计算机处理的二进制之间的重要转换桥梁,如果输入数据(字符串)格式有误,转换不能成功,会抛出异常 NumberFormatException
- 还提供了将基本类型转换为String的方法,这个方法是用于输出基本类型的数据。
- 包装类都是final的,不能定义它们的子类。
- 包装类是不可变类,在构造了包装类对象后,不允许更改包装在其中的值。
十六、八种基本类型包装类
- 因为基本类型不是对象,包装类可以把基本类型包装为对象。
- 将基本类型包装成对象有两种方式:1)用构造器创建 Object o = new Integer(1); 2)用方法创建 Object o = Integer.valueOf(1);
- 也可以将包装类拆包成基本类型:integer i = Integer.valueOf(5); int u = i.intValue();
- 包装类提供了与字符串类型的相互转换方法:String -> int Integer.parseInt(s);
- java 5提供了自动拆包和包装
Integer i = 5; //自动包装
int n = i+3; //自动拆包
java是利用编译器进行语法替换的,经编译后:
Integer i = Integer.valueOf(5);
int n = i.intValue() + 3;
十七、Number
- 抽象类Number是Byte,Double,Float,Integer,Long和Short类的父类。
- java 5开始,自动将123.45包装成Double类型。
十八、关于java的时间
- java的时间是long类型的毫秒数。
- 人类的时间系统:年月日时分秒
- java提供API解决java时间和人类的时间之间的计算。
- Date:简单时间封装和“过期”的时间计算方法。
- Calendar:复杂历法算法,可以获取设置时间分量,以及进行复杂的时间分量计算。
- SimpleDateFormat:提供了时间的输入与输出
- 时间API的使用:Date是时间类型的简单封装;Calender用于复杂的时间计算,简单时间计算直接使用long毫秒数计算。
十几、Date及其常用API
- API能将计算机的时间转换为“年月日时分秒”的格式,也能将“年月日时分秒”转换为计算机的时间。
- Date类的内部,是个long类型的时间,是当前时间的毫秒数,还提供了历法算法,可以计算年份/月份/日期等。
- Date类重写了toString()方法和equals()方法。
- SimpleDateFormat简介:是一个以语言环境有关的方式来格式化和解析日期的具体类,允许进行格式化(日期->文本),解析(文本->日期)和规范化。Date ->String sbf.format(date); String -> Date sbf.parse(string)
- 日期模式匹配字符
字符 | 含义 | |
y | 年 | yyyy-2013年 yy-13年 |
M | 月 | MM月-01月 M月-1月 |
d | 日 | dd日-06日 d日-6日 |
E | 星期 | E-星期日(Sun) |
a | AM或PM标识 | |
H | 小时(24小时制) | |
h | 小时(12小时制) | |
m | 分钟 | |
s | 秒 |
二十、Calendar
- 用于封装日历信息,其主要作用在于其方法可以对时间分量进行运算。
- Calendar是抽象类,其具体子类针对不同国家的日历系统,其中应用最广的是GregorianCalendar(格里高里历,即通用的阳历),对应世界上绝大多数国家/地区使用的标准日历系统。
- Calendar提供了一个类方法getInstance,以获得此类型的一个通用对象。Calendar c = Calendar.getInstance();