Java常用类
常用类
Object类
所有类的之间父类或间接父类,在类的定义的时候,若没有显示extends继承某个类,则默认继承自Object类
//Object类中的方法
getClass(); //返回当前对象所在类的Class对象,每个类只有一个Class对象
hashCode(); //返回当前对象的哈希编码
equals(Object obj); //判断两个对象是否相等,比较的是两个对象引用是否相等
clone(); //返回该对象的一个拷贝,是浅拷贝
toString(); //返回该对象的一个字符串形式的简要描述,可以自己重写定义,默认为:“类名 + 哈希编码”
notify(); //唤醒该对象的等待对象中的一个线程
notifyAll(); //唤醒该对象的等待对象中的所有线程
wait(); //将当前正在运行的线程加入到该对象的等待队列中,等待指定的毫秒数,或者一直等待直到将它唤醒
wait(long timeout);
finalize(); //垃圾回收器GC将回收该对象前执行的一系列操作,可以用户重新定义。
BigDecimal
常用方法
BigDecimal(String str); //BigDecimal的创建
BigDecimal add(BigDecimal augend); //加法
BigDecimal subtract(BigDecimal subtrahend); //减法
BigDecimal multiply(BigDecimal multiplicand); //乘法
BigDecimal add(BigDecimal divisor); //除法
BigDecimal add(BigDecimal divisor,int scale,RoundingMode roundingMode);
/*
scale:保留几位小数
roundingMode:舍入模式
ROUND_CEILING 向正无穷方向舍入
ROUND_DOWN 向零方向舍入
ROUND_FLOOR 向负无穷方向舍入
ROUND_HALF_DOWN 向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,向下舍入, 例如1.55 保留一位小数 结果为1.5
ROUND_HALF_EVEN 向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,如果保留位数是奇数,使用ROUND_HALF_UP,如果是偶数,使用ROUND_HALF_DOWN
ROUND_HALF_UP 向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,向上舍入, 1.55保留一位小数结果为1.6,也就是我们常说的“四舍五入”
ROUND_UNNECESSARY 计算结果是精确的,不需要舍入模式
ROUND_UP 向远离0的方向舍入
*/
*/
包装类
byte short int long float double都继承自抽象类Number
基本数据类型 | 包装类型 |
---|---|
byte | Byte |
short | Short |
int | Integer |
long | Long |
char | Character |
boolean | Boolean |
float | Float |
double | Double |
装箱和拆箱
//装箱,valueOf()
int num1 = 3;
Integer i1 = new Integer(num1);
Integer i2 = Integer.valueOf(i1);
//拆箱,intValue()
Integer i3 = new Integer("234");
int num2 = i3.intValue();
其他包装类的装箱和拆箱类似,jdk1.5之后支持自动装箱(自动调用valueOf()方法)和自动拆箱(自动调用intValue()方法)
Integer缓冲池
我们在使用装箱valueOf的时候会出现一些这样的情况:
Integer i1 = 100;
Integer i2 = 100;
System.out.println(i1 == i2); //true
结果是true,但是i1和i2是引用数据类型,指向的是在堆中的不同对象,比较的结果应该是false,接着看:
Integer i1 = 250;
Integer i2 = 250;
System.out.println(i1 == i1); //false
可以看到,比较的结果又是false了,很奇怪吧?为什么呢?原因就出在了在自动装箱默认调用valueOf()方法,让我们看看valueOf中的部分源码:
static final int low = -128;
static final int high;
static final Integer cache[];
...
h = 127;
...
high = h;
cache = new Integer[(high - low) + 1];
int j = low;
for(int k = 0; k < cache.length; k++)
cache[k] = new Integer(j++);
...
public static Integer valueOf(int i) {
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}
分析上面源码,我们可以看到在Integer类中有一块缓冲池,缓冲池已经存储了-128~127对应的包装类对象,当需要包装的整数在这个范围内时,直接返回缓冲池里面的对象,不在这个范围内时,返回一个新的对象,因此会出现前面那种现象。
基本数据类型和字符串的相互转换
//基本数据类型转换为字符串,包装类toString()方法
int num1 = 15;
System.out.println(Integer.toString(num));
System.out.println(Integer.toString(num,16)); //转换为16进制的格式的字符串
System.out.println(Integer.toHexString(num,16)); //等价于上面的方法
//字符串转换成基本数据类型,parseXXX()方法,注意数据类型要兼容
String s1 = "true";
boolean b1 = Boolean.ParseBoolean(s1);
Date类
Date类中的很多方法都已经过时,在Calendar类中都有实现。
常用方法
Date(); //日期对象的创建
Date(long time); //创建一个日期对象,该日期为自标准基准时间(1970.1.1 00:00:00 GMT)以来的毫秒数time
boolean after(Date date); //判断日期是否在date的后面
boolean before(Date date); //判断日期是否在date的前面
boolean equals(Date date); //判断日期是否与date相等
int compareTo(Date date); //与date相比较,若小于则返回-1,若等于则返回0,若大于则返回1
void setTime(long time); //设置时间,时间具体为自标准基准时间(1970.1.1 00:00:00 GMT)以来的毫秒数time
String toString(); //将时间转换为字符串表示形式
String toLocaleString()l; //将时间转换为本地时间的字符串表示形式,已过时
Calendar类
常用方法
protected Calendar(); //日历类的构造方法,由于是保护类型的,所以在包外除了子类外,无法创建其对象。
static Calendar getInstance(); //返回一个日历对象,日历类提供的获取日历对象的一个静态方法
void get(int field);
//返回指定字段的值,获取时间信息,field可取:Calendar.YEAR,Calendar.MONTH,Calendar.DAY_OF_MONTH或者
//Calendar.DATE,Calendar.HOUR(12小时)或者Calendar.HOREOFDAY(24小时),Calendar.MINUTE,Calendar.SECOND
long getTimeInMillies(); //返回当前时间的毫秒数
Date getTime(); //返回当前时间的日期对象
void setTime(Date date); //设置当前时间的日期对象
void set(int year,int month,int date,int hourofday,int minute,int second); //设置日历的年,月,日,时,分,秒
void set(int field,int value); //将指定字段(field)的值设为(value)
void add(int field,int value); //将指定字段的值加上value
int getActualMaximum(int field); //返回指定字段的最大值
int getActualMinimum(int field); //返回指定字段的最小值
SimpleDateFormat类
SimpleDateFormat是一个根据指定的时间或日期的字符串模式,进行格式化和解析的类。
public class Test01 {
public static void main(String[] args) throws ParseException {
/**
* y 年
* M 月
* d 日
* H 时
* m 分
* s 秒
* S 毫秒
*/
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒");
Date date1 = new Date();
//格式化日期,返回格式化后的日期字符串
String str1 = simpleDateFormat.format(date1);
System.out.println(str1);
String str2 = "2021年11月11日 11时11分11秒";
Date date2 = simpleDateFormat.parse(str2);
System.out.println(date2);
}
}
System类
/*
src:原数组
srcPos:复制起始的原数组的下标
dest:目的数组
destPos:复制起始的目的数组的下标
length:复制的长度
*/
static void arraycopy(Object src,int srcPos, Object dest, int destPos,int length);
static long currentTimeMillis(); //获得当前系统时间的毫秒数
static void gc(); //手动调用垃圾回收器
static void exit(int status); //退出虚拟机,status为0表示正常退出
未完待续…
持续更新中…