常用类
要掌握一个类,要看它的构造方法和常用方法,继承了那些类,实现了那些接口,特殊点在哪
JDK中提供了一些常用的类
Object类
包装类
Byte、Short、Character、Integer、Float、Long、Double、Boolean
字符串类
String
StringBuffer
StringBuilder
时间日期类
java.util.Date
java.sql.Date
java.sql.Timestamp
数字类
Math
Random
输入输出类 // 在IO中
Writer
Reader
OutputStream
InputStream
System类
Comparable接口 //在集合中
Object类
不是抽象类!!
当一个类没有显式的声明父类时,它的父类就是Object;当一个类显式的声明父类后,Object就是它的间接父类
作用: 以 最高类的形式处理所有的对象,所有的对象都可以上转型为Object
构造方法
//只提供了Object类的无参构造方法
Object()
clone()方法
创建当前对象的副本
protected Object clone()
throws CloneNotSupportedException
//当前包可以访问,包外子类可以访问(必须是继承来的),包外子类不可以访问
注意点:
1,如果需要类支持克隆,除了需要重写clone方法以外,还要实现Cloneable的接口,否则可能会抛出CloneNotSupportedException异常
2,克隆是一种创建对象的方法(new一个对象,反序列化创建对象,通过反射创建对象都是创建对象的方法)
3,克隆的分类:深克隆和浅克隆
深克隆:克隆了对象,也克隆了对象的全部引用,克隆出的对象和原对象的资源相互独立
浅克隆:只克隆了对象本身,对象的引用需要依赖原对象的
Java,默认是浅克隆,想要深克隆的话,要重写clone()方法,将它的引用也全部克隆
hashCode()方法
返回一个哈希码,作用是提高哈希表的性能。Object的哈希码是通过内存地址转化而来的
规定:
- 当一个对象被创建的,它的哈希码应该是固定的,除非修改了他的核心信息
- 相等的对象,哈希码必须相等。
- 不相等的对象,可以有不一样的哈希码也可以有一样的哈希码(但是不同的对象尽量要用不同的哈希码)
equals方法
判断两对象是否相等
- Object.equals() 与 == 是一样的,对引用类型来说,就是看是不是指向同一个对象
- 这个方法可以被重写,比如String就重写了这个方法
- equals要与hashcode一起重写
toStringg方法
返回字符串的表示形式
- Object的实现形式:类型@内存地址(十六进制)
- System.out.println(对象) ,就会默认调用toString
finalize方法
对对象进行清理
- JVM的垃圾回收用的 要调用close()
- 当前对象无引用时
getClass方法
获取当前类在方法区中的信息
- 在反射中,创建Class对象时,会用到
wait, notify, notifyAll
线程等待,随机唤醒一个线程,唤醒所有线程
- 这个在线程同步的时候会用到
包装类
Java时一种完全面向对象的语言,为了以面向对象的方式处理,所以引入了八种数据类型对应的包装类
Byte、Short、Character、Integer、Float、Long、Double、Boolean
byte short char int float long double boolean
包装类可以自动拆箱和装箱
基本数据类型->包装类 装箱
包装类->基本数据类型 拆箱
装箱
- Byte、Short、Character在赋值的时候,可以是整数,也可以是字符,但是必须是常量而且不能超出范围
- Integer、Long、Float、Double在赋值的时候,必须赋值为对应的基本数据类型,没有数据类型的自动转换
拆箱
- 只要符合基本数据类型的转换都是可以的
构造函数
- 包装类可以通过new的方式创建,包含两种方式,包装类(相应的基本数据类型),包装类(字符串)
- 包装类对象的创建,注意点:-128-127的数值,包装类会将其放在常量池中,再次用到时,会直接从常量池中获取
包装对象的处理
- 包装类型的对象在进行算数运算时,会自动拆箱为基本数据类型,再进行运算
- 包装类型的对象,在进行比较运算时,可以进行 > >= < <=运算,会进行自动拆箱
- == 和 !=时,一边是基本数据类型,另一边是对象是,也可以进行拆箱
- 不同类型不可以使用== != 进行比较
包装类的方法
- 重写了equals
- 基本数据类型与字符串的转换
基本类型->字符串
基本数据类型+""
Byte
toString()
(*)toString()
(*)toString(Object)
(Integer Long).toString(Object,int redix) redix进制
(Integer Long).toBinaryString() 二进制
(Integer Double Float).toHexString() 十六进制
(Integer Long).toOctalString() 八进制
String->基本数据类型
(无Byte)parse*(String s)
(Byte Character Integer Long )parse*(String s, int radix)
Integer 和 Long一样 Double和Float一样
还有很多的方法
String
- 字符串声明为final的,不可以被继承
- String实现了Serializable接口:表示字符串是支持序列化的(在IO流,对象流中会用到),实现了Comparable接口:表示String可以比较大小
- String内部定义了final char[] value 用于村塾字符串数据,是不可变的
- String的值存放在常量池,是可以共享的
String的不可变性
1,当对字符串重新赋值时,需要重写指定内存区赋值,不能使用原有的value进行赋值
2,对当前字符串进行连接操作时,不修改原有的值,会重新指定内存区域赋值
3,当调用String的 replace() 方法修改字符或字符串时,也需要重新指定内存区域赋值,不能使用原有的value进行赋值
!!字符串拼接方式赋值对比
1,常量与常量的拼接结果在常量池,且常量池中不会存在相同内容的常量。也就是说,变量的值是通过常量赋值,或者常量拼接赋值,而且值相同,那么变量就相等
2,只有其中一个是变量,那么结果在堆中
3,如果拼接的结果调用intern()方法,返回值就在常量池中
String类与其他类的转换
与基本数据类型和包装类之间的转换
String->基本数据类型、包装类 包装类.parseXxx(Str)
基本数据类型、包装类->String String.calue(Xxx)
与字符数组char[]
String->char[] String.toCharArray()
char[]->String String的构造器
与字节数组byte[]
String->byte[] String.getByte() 编码
byte[]->String String 的构造器 解码
与StringBuffer、StringBuilder
String->StringBuffer/StringBuilder StringBuffer/StringBuilder的构造器
StringBuffer/StringBuilder->String String的构造器或者StringBuffer/StringBuilder 的toString
String 的常用方法
charAt 返回指定下标位置的字符
codePoint 返回Unicode代码点数
compareTo 按照字典比较两个字符产,但是不考虑大小写
concat 将指定字符串连接在此字符串的结尾
contains 判断此字符串是否包含指定字符串
startWith/endWith 测试此字符串是否以指定字符串为开头/结尾
equals 判断相等,会有风险,当字符串为null时,报null指针异常、
hashCode
indexOf/lastIndexOf
replace 将字符串中的某字符串替换成另一个字符。不会影响原来的值,而会生成新的
split 字符串分隔
subString 截取
trim 去掉字符串前后的空白
toUpperCase/toLowerCase 全部转换成大写/小写
length 返回字符串的长度,这一长度等于字符串中Unicode代码单元的数目
codePointCount 返回字符串有多少个字节,返回此String的指定文本范围的Unicode代码点数
Unicode(utf-16)编码
Java的代码分为内码 char或者String在内存中的编码方式
内码使用的就是utf-16的编码
外码 除了内码都可以认为时“外码”(包括class文件的编码)
代码单元(codeUnit) 代码单元是指一种转换格式(UTF)中最小的一个分隔,因此一种转换格式指挥包含整个单元,UTF-X中的X就是各自带啊单元的位数
UTF-16 其中的16指的就是最小为16位一个单元,也就是两个字节一个单元。UTF-16可以包含一个单元和两个单元,对 应即是两个字节和四个字节,我们操作UTF-16的时候以它的一个单元位基本单位的
UTF-16编码一个字符时,对于U+0000到U+FFFF范围内的字符采用2字节进行编码
大于U+FFFF的字符采用4字节进行编码
StringBuffer和StringBuilder
StringBuffer和StringBuilder都表示可变字符串,不过StringBuffer是线程安全的可变字符序列,StringBuilder是不保证线程同步,也就是不安全的,StringBuilder的效率要比StringBuffer高
构造方法
StringBuilder() 默认初始容量位16
StringBuilder(int) 初始容量为指定值
StringBuilder(String) 初始容量为16+string.length
容量什么时候会变化
- 在添加过程中,不超出容量时,无变化
- 如果超出容量要进行扩容: 原来容量*2+2
常用方法
append 追加
insert 插入
delete 删除
replace 替换
setCharAt 设置指定位置字符
charAt 指定位置的字符
reverse 逆转
capacity 容量
String、StringBuffer、StringBuilder三者的对比
String:不可变的字符序列,底层使用char[] ,占用内存(会不断的创建和回收对象)
StringBuffer:可变字符序列,底层使用char[] 存储,线程安全的,效率低,
String Builder:可变字符序列,底层char[]实现,1.5新增的,线程不安全的,效率高
时间日期
System.currentTimeMillis()
System类提供的 public static long currentTimeMillis() 用来返回当前时间与1970年1月1日0时0分0秒之间以毫秒为单位的时间差。(时间戳) 此方法适于计算时间差。
java.util.Date类、java.sql.Date类、java.sql.Timestamp类
java.sql.Date和java.sql.Timestamp是专门用于数据库的 ,其中Date只表示年月,Timestamp表示年月日,时分秒,毫秒,能够精确到纳秒
java.util.Date类
表示一个日期时间,能精确到毫秒,继承自calendar(抽象类,转换年月日时分秒的)
构造方法
Date() 系统当前时间
Date(long) 以Thu Jan 01 08:00:00 CST 1970为基准时间依赖的指定毫秒数
常用方法
after/before 测试是否在此日期之前/之后
compareTo
getTime 从Thu Jan 01 08:00:00 CST 1970到现在的毫秒数
日期的格式化
SimpleDateFormat类,是一个以语言环境有关的方式来格式化和解析日期的具体类
构造方法
SimpleDateFormat() 默认
SimpleDateFormat(String pattern) 用给定的模式和默认语言环境的日期格式符号构造 SimpleDateFormat
SimpleDateFormat(String pattern, DateFormatSymbols formatSymbols) 用给定的模式和日期符号构造 SimpleDateFormat
SimpleDateFormat(String pattern, Locale locale) 用给定的模式和给定语言环境的默认日期格式符号构造 SimpleDateFormat。
例子
Date now = new Date();
SimpleDateFormat sdf = newSimpleDateFormat("y年M月d日HH:mm:ss.SS");
String s = sdf.format(now);
数字类
Math类、Random类、BigInteger、BigDecimal
Math类 包含用于执行基本数学运算的方法
字段(静态变量) E和PI
还有一些方法
abs 绝对值
acos 反余弦
cos 余弦
expml e的x方 - 1
random 返回带正号的double值,大于等于0,小于1
Random类 用来生成随机数
构造方法
Random() 创建一个新的随机数生成器
Random(long seed) 使用单个long种子创建一个新的随机数生成器
常用方法
setSeed(long seed) 使用单个long种子设置此随机数生成器的种子
nextInt() 返回一个伪随机数,它是此随机数生成器的序列中均匀分布的int值
nextInt(int n) 返回伪随机数0-n
BigInteger类
用来表示可可变的任意精度的整数
BigDecimal类
表示不可变的,任意精度的有符号十进制定点数
System类
该类的构造器是private的,所以,没有办法创建该类的对象,也就没有办法数理化该类,内部的成员变量和方法都是static的,所以也可以很方便的进行调用
常用方法
native long currentTimeMillis() 返回当前计算机的时间,时间的表达格式为当前计算机时间和GMT时间(格林威治时间)1970年1月1号0时0分0秒所差的毫秒数。
void exit(int status) 退出程序,status = 0 时,正常退出,其他数字是非正常退出
void gc() 请求系统进行垃圾回收。至于系统是否立即回收,则取决于系统中垃圾回收算法的实现以及系统执行时的情况
String getProperty(String key) 获取系统中属性名为可以的对应属性值
java.version Java运行时环境版本
java.home Java安装路径
os.name 操作系统名称
os.version 操作系统版本
user.name 用户账户名
user.home 用户的主目录
user.dir 用户的当前对象