JavaSE API
JavaSE API
1 java.lang.Object
1.1 它是所有类型的根父类
1.2 一个类如果没有显式声明它的父类,这个类的直接父类就是Object
1.3 理解
- (1)Object类的所有方法,在所有对象中都有,包括数组对象
- (2)Object类的变量可以接受任意类型的对象 Object类型的形参可以接受任意类型的对象作为实参 Object[]类型的数组可以接受任意类型的对象作为它的元素
- (3)所有对象创建时,都会调用Object的无参构造
1.4 方法
-
(1)无参构造
-
Object()
- 所有对象创建时,都会调用Object的无参构造
-
-
(2)protected Object clone() throws CloneNotSupportedException
- 如果子类要支持克隆,子类需要实现Cloneable接口,否则报CloneNotSupportedException
-
(3)public boolean equals(Object obj)
- 指示其他某个对象obj是否与此对象this“相等”。
- Object中的equals,等价于“==”比较,比较的是对象的地址
- 如果子类需要比较的是属性的内容,那么一定要重写这个方法
-
(4)public int hashCode()
-
在Object中默认这个方法返回的是 和“地址”相关的值
-
如果重写了equals,那么必须重写hashCode方法,而且参与equals比较的属性,一定要参与hashCode的计算
-
它俩的关系:
- 两个对象的equals()返回true,两个对象的hashCode值?一定相等 两个对象的hashCode值不相等,两个对象equals方法结果?一定不相等 两个对象的hashCode值相等,两个对象equals方法结果?不一定相等
-
-
(5)public final Class getClass()
- 返回某个对象的运行时类型,而不是编译时类型
-
(6)protected void finalize() throws Throwable
- 当这个对象被垃圾回收机制回收之前调用,而且只会调用一次
-
(7)public String toString()
- 在Object中默认返回的是 这个对象的运行是类型@这个对象的hash值的十六进制表现形式
- 子类完全可以重写
-
(8)剩下的notify,notifyAll和wait在多线程中使用
2 包装类
java.lang
2.1 装箱与拆箱
-
装箱
-
JDK1.5之前手动装箱
- Integer i = new Integer(整数);
-
JDK1.5之后自动装箱
- Ineteger i = 整数;
-
-
拆箱
-
JDK1.5之前手动拆箱
- Integer i = new Integer(整数); int num = i.intValue();
-
JDK1.5之后自动拆箱
- Integer i = new Integer(整数); int num = i;
-
-
原则:只能是对应的包装类和基本数据类型之间进行转换
2.2 对应的关系
-
byte
- Byte
-
short
- Short
-
int
- Integer
-
long
- Long
-
char
- Character
-
float
- Float
-
double
- Double
-
boolean
- Boolean
2.3 其他方法
-
字符串与基本数据类型的转换
-
public static int parseInt(String s)throws NumberFormatException
- 如果包含字母等非数字字符,会报错
-
public static int parseInt(String s, int radix)throws NumberFormatException
- 可以包含字母,但是要在基数范围内
- 例如基数radix是20,可以包含的范围是0-9,a,b,c,d,e,f,g,h,i,j
-
public static Integer valueOf(String s)throws NumberFormatException
-
public static Integer valueOf(String s, int radix) throws NumberFormatException
-
-
像Integer中
-
public static String toBinaryString(int i)
- 二进制形式
-
public static String toOctalString(int i)
- 八进制形式
-
public static String toHexString(int i)
- 十六进制形式
-
-
像Character中
-
public static char toLowerCase(char ch)
- 转小写
-
public static char toUpperCase(char ch)
- 转大写
-
2.4 包装类对象的缓存问题(常量对象)
-
Byte,Short,Integer,Long
- -128~127
-
Float,Double
- 没有缓存
-
Character
- 0~127
-
Boolean
- true
- false
3 java.lang.String
3.1 字符串类型的特点
-
1、不能被继承
- 因为String是final修饰的类
-
2、字符串对象是常量对象,一旦创建就不能修改,一旦修改就是新对象
-
3、因为字符串对象是常量对象,那么可以共享,字符串常量对象是在常量池中
-
常量池在哪里
- JDK1.6,方法区
- JDK1.7,堆
- JDK1.8,元空间
-
-
4、任何字符串字面量都是String的对象
-
5、字符串底层使用字符数组存储
-
6、字符数组是private final修饰符
3.2 拼接和比较
-
1、创建对象的个数
-
String str1 = “hello”; String str2 = “hello”;
- 一个,在常量池
-
String str1 = new String(“hello”); String str2 = new String(“hello”);
-
三个
- 一个在常量池
- 两个在堆中
-
-
-
2、拼接和比较
-
原则:+两边都是常量,结果也是常量,+两边有一个是变量,结果就不是常量,在堆中,如果结果使用了intern(),那么是常量
@Test
public void test3(){
String str1 = "hello"; String str2 = "java"; String str3 = "hellojava"; String str4 = "hello" + "java";//常量与常量拼接,还是常量 String str5 = "hello" + str2;//常量与变量拼接,结果在堆中 String str6 = str1 + str2;//变量与变量拼接,结果也在堆中 System.out.println("str3 == str4 " + (str3 == str4));//true System.out.println("str3 == str5 " + (str3 == str5));//false System.out.println("str3 == str6 " + (str3 == str6));//false final String str7 = "hello"; final String str8 = "java"; String str9 = str7 + str8;//常量与常量拼接 System.out.println("str3 == str9 " + (str3 == str9));//true String str10 = (str1 + str2).intern();//intern()的结果放常量池 System.out.println(str3 == str10);//true
}
-
3.3 常用的方法
-
1、基本方法
-
(1)int length()
- 返回字符串的长度,即字符的个数
-
(2)字符串的比较
-
boolean equals(String other)
- this和other进行内容比较
- 对Object的equals进行重写
- 严格区分大小写
-
boolean equalsIgnoreCase(String anotherString)
- this和anotherString进行内容比较
- 不区分大小写
-
自然排序
-
public int compareTo(String anotherString)
- 如果是ASCII范围内,按照ASCII值的顺序
-
-
定制排序
-
java.text.Collator
String str3 = "中国";//Z String str4 = "美国";//M //如果想要按照字典顺序 //找定制排序,实现了java.util.Comparator接口,重写int compare(String s1,String s2) //java.text.Collator Collator c = Collator.getInstance(); int result = c.compare(str3, str4); System.out.println(result);//中 > 美
-
-
-
(3)去掉前后空格
- String trim()
-
(4)转大小写
- String toUpperCase()
- public String toLowerCase()
-
(5)是否是空字符串
-
方式一
- “".equals(字符串)
-
方式二
- isEmpty()
-
-
-
2、和字节相关
-
编码:把字符串转成字节数组
-
byte[] getBytes()
- 平台默认编码方式进行编码
-
byte[] getBytes(字符编码方式)
- 按照指定的编码方式
-
-
解码:把字节数组转成字符串
- new String(byte[])
- new String(byte[],int offset, int length)
- new String(byte[], 字符解码方式)
- ….
-
乱码
- (1)编码方式与解码方式不一致
- (2)缺字节
-
-
3、和字符相关
-
把字符串转字符数组
- char[] toCharArray()
-
把字符数组转字符串
- new String(char[])
- new String(char[],int offset, int count )
- ….
-
取指定位置的字符
- char charAt(index)
-
-
4、是否以xx开头和结尾
- boolean startsWith(xx)
- boolean endsWith(xx)
-
5、字符串截取
-
String subString(int start)
- 从[start,最后]
-
String subString(int start, int end)
- 从[start,end)
-
-
6、拆分
- String[] split(支持正则)
-
7、查找
-
是否包含
- boolean contains(子串)
-
查找索引位置
-
int indexOf(xxx)
- 如果存在返回索引
- 如果不存在返回-1
-
int lastIndexOf(xx)
-
-
-
8、替换
-
String replace(目标子串, 新子串)
-
String replaceAll(目标子串, 新子串)
- 支持正则
-
String replaceFirst(目标子串, 新子串)
-
4 java.lang.StringBuffer和java.lang.StringBuilder
4.1 StringBuffer是JDK1.0就有,是线程安全的
4.2 StringBuilder是JDK1.5引入,是线程不安全
4.3 和String的区别
-
(1)String对象是常量对象,是不能修改的,StringBuffer和StringBuilder是字符串缓冲区,可变字符序列,可以修改的
- String一旦涉及修改就产生新的String对象
- StringBuilder和StringBuffer不会产生新的StringBuilder和StringBufffer对象
-
(2)赋值的方式
- 只有String支持,String str = “xxx”;
-
(3)拼接
-
String支持+
- 每一次拼接产生新对象,浪费空间和时间
-
append
- 不会产生新对象
-
4.4 常用的方法
-
(1)拼接
-
append(xx)
-
支持连写
- sBuilder.append(xx).append(yyy).append(zzz)…
-
-
(2)插入
- insert(index,xx)
-
(3)删除
- delete(start, end)
-
(4)替换
- setCharAt(index, char)
-
(5)反转
- reverse()
-
….
5 JDK1.8之前日期时间
5.1 java.util.Date
-
(1)两个构造器
-
new Date()
- 获取当前系统日期时间
-
new Date(long 毫秒)
- 根据毫秒数获取日期时间对象
-
-
(2)把某个日期时间对象转成毫秒数
- long getTime()
5.2 java.lang.System
- long System.currentTimeMillis()
5.3 java.util.Calendar
-
(1)获取实例对象
-
Calendar.getInstance()
- 获取平台默认
-
Calendar.getInstance(时区,语言环境)
-
-
(2)get(常量字段)
- YEAR
- MONTH
- ….
5.4 java.text.DateFormat及其java.text.SimpleDateFormat
-
(1)构造器
- SimpleDateFormat sf = new SimpleDateFormat(“模式”);
-
(2)把日期转成字符串
- public final String format(Date date)
-
(3)把字符串转成日期
- public Date parse(String source)
6 JDK1.8日期时间
6.1 相关的包
6.2 本地日期时间
- java.time.LocalDate
- java.time.LocalTme
- java.time.LocalDateTime
- 对应旧版本java.util.Calendar
- 方法列表
6.3 日期时间格式化
-
java.time.format.DateTimeFormatter
-
format
- 把日期时间对象转字符串
-
parse
- 把字符串转日期时间对象
-
-
三种形式获取DateTimeFormatter对象
-
标准格式的常量对象
- LocalDate date = LocalDate.now(); System.out.println(date.format(DateTimeFormatter.ISO_DATE));
- DateTimeFormatter formatter = DateTimeFormatter.ISO_DATE; String format = formatter.format(LocalDate.now());
-
Style
-
DateTimeFormatter dt = DateTimeFormatter.ofLocalizedDate(FormatStyle.FULL); String string = dt.format(LocalDate.now());
-
FormatStyle.FULL
- 日期
-
FormatStyle.LONG
- 日期时间
- 日期
- 时间
-
FormatStyle.MEDIUM
- 日期
- 日期时间
- 时间
-
FormatStyle.SHORT
- 日期
- 日期时间
- 时间
-
-
-
自定义格式
- DateTimeFormatter op = DateTimeFormatter.ofPattern(“yyyy-MM-dd HH:mm:ss”); System.out.println(op.format(LocalDateTime.now()));
-
6.4 日期的间隔
- Period
6.5 时间的间隔
- Duration