API
===================================
* Application Programming Interface
应用编程接口
* 一切可以调用的东西
java.lang 包
===================================
* lang - language
* java 语言包
* 自动导入
String
System
java.lang.Object
======================================
java.lang.String
java.lang.StringBuilder
java.lang.StringBuffer
正则表达式
java.util.regex.Pattern
java.util.regex.Matcher
======================================
基本类型包装类
java.lang.Number
java.math.BigDecimal
java.math.BigInteger
java.text.DecimalFormat
java.lang.Math
======================================
java.util.Date
java.text.SimpleDateFormat
java.util.Calendar
java.util.GregorianCalendar
======================================
Object
=======================================
* java 所有类的顶层父类
* 如果不继承其他类,默认继承 Object
class A /*extends Object*/ {
}
方法
----------------------------------
toString()
获得对象的字符串表示
Object默认实现是:
"tarena.day1301.Point@9a4bf81"
类名@内存地址
如果需要,可以在子类中重写这个方法
equals(Object obj)
当前对象与参数对象 obj 比较是否相等
Object 中默认实现是:
比较内存地址
this == obj
如果需要,可以重写这个方法
hashCode()
获得对象的哈希值
Object中默认实现是:
用对象的内存地址作为哈希值
如果需要,在子类中重写 hashCode()
使用属性计算产生哈希值
String
==========================================
* 封装 char[] 数组的对象
* 字符串的字面值 "abc"
*)第一次用到一个字面值时,
在“字符串常量池”中新分配内存
*)再次用到相同的字面值时,
直接访问“常量池”中已经存在的对象
* 字符串不可变
*)字符串加号连接效率低,
每次连接都会新建字符串对象
String s1 = "abc";
String s2 = "def";
String s3 = "ghi";
String s4 = s1 + s2 + s3;
创建对象
--------------------------------------
1.char[] a = {'h','e','l','l','o'};
String s = new String(a);
2.第一种方式的语法简化
String s = "hello";
方法
--------------------------------------
charAt(int index)
s = "abc";
char c = s.charAt(0);
toUpperCase()
s = s.toUpperCase()
print(s)
toLowerCase()
length()
compareTo(String anotherString)
compareToIgnoreCase(String str) 忽略大小写
与另一字符串按编码表顺序比较大小
当前字符串大,返回正数
当前字符串小,返回负数
大小相同,返回0
startsWith(String s)
s = "http://........"
boolean b = s.startsWith("http://")
endsWith(String suffix)
是否以指定的子串开头或结尾
equals(Object anObject)
equalsIgnoreCase(String anotherString) 忽略大小写
比较字符串内容是否相同
indexOf(String s)
s = "abc abc abc";
int index = s.lastIndexOf("xxxx");
indexOf(String s, int fromIndex) 从指定位置向后寻找
获得指定子串的位置,不存在,返回 -1
lastIndexOf(String s)
从后向前寻找子串的位置
replace(char oldChar, char newChar)
将指定的字符替换为新的字符
s = "abc abc abc";
String s2 = s.replace('a', '-');
System.out.println(s2);
substring(int a) 从 a 位置直到结束
s = "abcdefg";
Strring s2 = s.substring(3, 5);
System.out.println(s2);
substring(int a, int b)
获得 [a, b) 位置范围的子串
trim()
去除两端空白字符
s = " a bc ";
s = s.trim();
System.out.println(s);
getBytes() 将 unicode 转为默认编码格式的字节数组
getBytes(字符编码) 将 unicode 转为指定编码格式的字节数组
String.valueOf(数据)
将任何数据转为字符串
正则表达式相关方法
----------------------------------
matches(正则表达式)
判断当前字符串,能否与正则表达式匹配
replaceAll(正则表达式, 子串)
将找到的匹配子串,替换为新的子串
split(正则表达式)
用匹配的子串,拆分字符串
abc,def,ghi,jkl
StringBuilder
StringBuffer
==========================================
* 可变的字符序列
* 封装 char[] 数组
* 经常用来代替 String 做高效率字符串连接
sb.append("abc")
* StringBuilder 线程不安全,效率高
StringBuffer 线程安全
创建对象
-------------------------------------
1.StringBuilder sb = new StringBuilder();
空串
2.StringBuilder sb = new StringBuilder("abc");
abc
方法
-------------------------------------
append()
在字符序列末尾,追加字符
高效的字符串连接
delete(int start, int end)
删除 [start, end)
deleteCharAt(int index)
删除单个字符
insert(int index, 子串)
在 index 位置,插入一个子串
replace(int start, int end, String str)
将 [start, end) 替换为指定字符串 str
reverse()
翻转
setCharAt(int index, char ch)
将 index 位置替换为字符 ch
toString()
转为 String 类型
正则表达式 Regex
===============================================
* 正确的字符串格式规则
* 百度“正则表达式大全”
正则表达式 匹配的字符串
--------------- ------------------
k k
abc abc
[abc] a, b, c
[a-z] a, z, e, u
[a-zA-Z_0-9] a, A, z, Z, 0, 9, _
[^a-zA-Z] 9, _, $, 中
\d 数字
\D 排除数字
\w 单词字符[a-zA-Z_0-9]
\W 排除单词字符[^a-zA-Z_0-9]
\s 空白字符
\S 排除空白字符
. 任意字符
[\u4e00-\u9fa5] 中文范围
[abc]? 0或1个 a,,b,c
[abc]?[123] a1,a2,a3,b1,b2,3,1,2,c3
[abc]* 0到多个 a,,aaa,bbb,abc,cba,abcabcabcabcacbccabccac
[abc]+ 1到多个
[abc]{3} 3个, aaa,abc,cba,bbc,cca,cba
[abc]{3,5} 3到5个, abc,abca,abcab
[abc]{3,} 3到多个, abc,abca,abcabcabcabcabcabcacbc
| 或
java.util.regex.Pattern
java.util.regex.Matcher
========================================
* Pattern 封装正则表达式
* Matcher 封装正则表达式和要匹配的字符串
创建对象
---------------------------------
Pattern p = Pattern.compile(正则表达式);
Matcher m = p.matcher(要匹配的字符串);
Matcher 方法
---------------------------------
find()
向后查找下一段匹配的子串
返回 boolean 值,表示是否找到下一段
find(int from)
从指定位置向后找
group()
获取刚刚找到的子串
start()
end()
获取刚刚找到的子串的起始和结束位置
基本类型包装类
=============================================
byte Byte
short Short
int Integer
long Long
float Float
double Double
char Character
boolean Boolean
java.lang.Number
-------------------------------
*)数字包装类的抽象父类
*)子类:
Byte
Short
Integer
Long
Float
Double
BigDecimal
BigInteger
方法
-----------------------------
取值方法
byteValue()
shortValue()
intValue()
longValue()
floatValue()
doubleValue()
Integer
---------------------------------
创建对象
-----------------------------
1.Integer i = new Integer(23);
2.Integer i = Integer.valueOf(23);
Integer类中存在封装-128到127
的缓存对象,
范围内的值,直接访问存在的缓存对象,
范围外的值,是新建对象
方法
-----------------------------
*)从父类继承的6个取值方法
*)字符串解析成数字
Integer.parseInt("255") 255
Integer.parseInt("11111111",2) 255
Integer.parseInt("377",8) 255
Integer.parseInt("ff",16) 255
*)进制转换
Integer.toBinaryString(255) "11111111"
Integer.toOctalString(255) "377"
Integer.toHexString(255) "ff"
Double
--------------------------------------------------
创建对象
--------------------------------------
1.Double d = new Double(3.14);
2.Double d = Double.valueOf(3.14);
与 new 相同
方法
--------------------------------------
*)从父类继承的6个取值方法
*)字符串解析成数字
Double.parseDouble("3.14")
Short.parseShort()
Long.parseLong()
Float.parseFloat()
Boolean.parseBoolean()
...
*)对特殊值进行检查
Infinity 3.14/0
NaN Math.sqrt(-2)
Double.isInfinite(double d)
Double.isNaN(double d)
自动装箱、自动拆箱
---------------------------------------------
自动装箱
---------------------------
Integer a = 23;
编译成:Integer a = Integer.valueOf(23);
自动拆箱
---------------------------
int i = a;
编译成:int i = a.intValue();
a = a + 1;
编译成:a = Integer.valueOf(a.intValue() + 1);
*)自动拆箱要当心 null 值
java.math.BigDecimal
java.math.BigInteger
=====================================
* BigDecimal 精确浮点数运算
* BigInteger 大整数运算,可以超出 long 范围
创建对象
--------------------------------
BigDecimal bd = BigDecimal.valueOf(2);
方法
--------------------------------
add(BigDecimal bd)
subtract(BigDecimal bd)
multiply(BigDecimal bd)
divide(BigDecimal bd)
divide(BigDecimal bd, 保留位数, 舍入方式)
舍入运算
setScale(保留位数, 舍入方式)
舍入运算结果,被封装成新的 BigDecimal 对象
取值
*)从 Number 继承的6个取值方法
*)作为字符串取出
toString()
java.text.DecimalFormat
==========================================
* 数字格式工具
* 数字 --> 数字格式的字符串
* 数字格式的字符串 --> 数字
"¥32,563,735.900"
创建对象
-------------------------------
DecimalFormat f = new DecimalFormat(格式);
格式: 参考 DecimalFormat 的 API 文档
"\u00A4###,###.000"
方法
-------------------------------
format(数字)
数字格式化成字符串
parse(字符串)
字符串解析成数字
返回 Number 类型对象
applyPattern(格式)
修改格式
java.lang.Math
======================================
Math.PI
Math.E
Math.sqrt()
Math.random()
Math.pow()
Math.max()
Math.min()
Math.sin()
Math.cos()
Math.tan()
...
java.util.Date
==========================================
* 封装一个毫秒值,表示一个时间点
毫秒值: 1970-1-1 0点开始的毫秒值
创建对象
------------------------------------
1. Date d = new Date();
封装系统当前时间毫秒值
2. Date d = new Date(600000000000L);
封装指定的毫秒值
方法
------------------------------------
getTime()
setTime(long t)
存取内部毫秒值
compareTo(Date d)
当前对象与参数对象d比较大小
当前对象大,正数
当前对象小,负数
大小相同,0
java.text.SimpleDateFormat
===========================================
* 日期格式工具
* Date对象 --> 日期格式的字符串
* 日期格式的字符串 --> Date对象
创建对象
---------------------------------------
SimpleDateFormat f = new SimpleDateFormat(格式);
格式:参考 SimpleDateFormat 文档
"yyyy-MM-dd HH:mm:ss"
"dd/MM/yyyy"
"yy-M-d H:m"
"yyyy年MM月dd日"
方法
---------------------------------------
format(Date对象)
Date对象格式化成字符串
parse(字符串)
字符串解析成 Date 对象
applyPattern(格式)
修改格式
java.util.Calendar
=========================================
* 日历抽象父类
* 封装毫秒值表示一个时间点
* 提供一组时间运算处理方法
创建对象
----------------------------------
1.Calendar c = new GregorianCalendar();
2.Calendar c = Calendar.getInstance();
在某些地区,可能创建当地历法,
中国就是 GregorianCalendar
方法
----------------------------------
get(字段)
获得日期中指定字段的值,例如:
c.get(Calendar.YEAR)
c.get(Calendar.HOUR_OF_DAY)
set(字段, 值)
修改指定字段的值
set(int year, int month, int date, int hourOfDay, int minute, int second)
设置年月日时分秒
add(int field, int amount)
在指定字段上加一个值
c.add(Calendar.YEAR, 10)
compareTo(Calendar anotherCalendar)
与另一个时间比较大小
当前Calendar实例大,返回正数
当前Calendar实例小,返回负数
相同大小,返回0
getActualMaximum(int field)
获得指定字段实际最大值,
用来获得月中的最大天数
星期日 - 1
星期一 - 2
星期二 - 3
星期三 - 4
星期四 - 5
星期五 - 6
星期六 - 7
getTime()
获得表示相同时间的 Date 类型实例
setTime(Date date)
将时间设置为指定 Date 实例所表示的时间
getTimeInMillis()
setTimeInMillis(long millis)
毫秒值存取方法
java.util.GregorianCalendar
=========================================
* 日历子类
* 罗马历,即“公历”或“阳历”
练习
=============================================
1.
从 email 获取名字
abc@def.com --> abc
是否是“回文”
正着念反着念都相同
abcdefedcba
翻转字符串
abc --> cba
2.
获得字符串中的连续数字
sdrg5647wqe4wer4786w4ertw83er76474w
5647
4786
76474
3.
填写生日
显示“您已经生存了 xxx 天”