常用类
常用类
- 目录
- object类
- Objects类
- String、StringBuffer和StringBuild类
- Math
- Random和ThreadLocalRandom
- BigDecimal
- java8中的日期类,时间类
- 正则表达式
1. object类
- 定义:object是所有类的父类,当一个类没有定义指定父类时,默认继承object类
- 常用方法:
- equals 判断指定对象与该对象是不是同一个对象
- finallize 垃圾会收集调用该对象来清理该对象的资源
- getClass返回对象运行时的类·
- hashCode返回对象的哈希值(通过内存地址来计算,但是很多类都对此进行了重写)
- toString 返回该对象的字符串表示
- 、、、省略控制线程暂停运行的方法
- clone 帮助其他对象实现自我克隆
这是一个clone克隆的例子
class Address{
String derail;
public Address(String derail){
this.derail = derail;
}
}
//这个接口没有任何卵用,仅仅起一个标识的作用
class User implements Cloneable{
int age;
Address add;
public User(int age,Address add){
this.age = age;
this.add = add;
}
//调用clone实现克隆
public User cloneT() throws CloneNotSupportedException {
return (User)super.clone();
}
}
public class cloneTest {
public static void main(String[] args) throws CloneNotSupportedException {
User user = new User(18,new Address("东方不败"));
User user1 = user.cloneT();
//你会发现修改user.add.derail的变量之后,user1的值也随之改变,clone仅仅是浅度克隆,二级对象(克隆对象内的引用对象 例:Address)仅仅会克隆一个地址
user.add.derail = "123";
System.out.println(user1.add.derail);
//一级对象明显进行了一个较为良好的克隆,user值的改变并不会影响user1的值
user.age = 156;
System.out.println(user1.age);
}
}
2. Objects类
- 定义:
- 这玩意是java7新增的
- 提供了一些方法来操作对象,这些工具大多是用来避免空指针异常的
objects.toString(a);避免a免的值为空,出现,空指针异常
- 注:因该类常用方法较少,并且与object类大致相当,为减少篇幅,略。。。
3.String、StringBuffer和StringBuild类
- 区别
- String是一个不可变字符串,改变他的值不过是重新生成了一个对象,又对其进行了引用
- StringBuffer是一个可变字符串,线程安全,一旦生成了自己想要的字符串通过toString将其赋值给一个String对象
- StringBuilde是一个可变字符串,与上一个类功能大致相同,由于没有实现线程安全,所以速度又提升(优先考虑)
public class StringTest {
public static void main(String[] args){
StringBuilder sb = new StringBuilder("我的世界"); //和StringBuffer
System.out.println(sb.hashCode());
sb.append("123");//添加
System.out.println(sb.hashCode());
//hash值一样,表明内存地址并没有替换,但是sb的值已经改变
String str = new String("wodeshijie");
System.out.println(str.hashCode());
str +="123";
System.out.println(str.hashCode());
}
}
- 常用方法
功能:StringBuild与StringBuffer内的方法主要又增、查、删、改、反转、截取的作用
4.Math
- 定义:这是一个数学工具类,进行较为复杂的数学运算(坐标、三角函数、幂)
5.Random和ThreadLocalRandom
- 区别:
- Random 生成一个伪随机数(如果随机数种子是相同的,同一台机器,无论多少对象取随机数,值都是一样的)
- ThrandLocalRandom 是线程安全的,主要用来多线程并发,同样生成伪随机数,但是不能指定随机数种子
- ThreadLocalRandom创建对象是通过该类下的一个静态方法current创建的
- 相同点,以及某些增强
- 这两个类都定义了为各种对象随机产生随机数的方法
- treadlocalrandom类,的自定义取随机数程度更高
- 实例
package 常用工具类;
import java.util.Arrays;
import java.util.Random;
import java.util.concurrent.ThreadLocalRandom;
public class RandomTest {
public static void main(String[] args){
//给定两个对象随机数种子为50之后,两个对象的随机数完全相同,重新执行也一样
//所以此处为生成伪随机数,为了避免对象随机数产生相同的数字序列,推荐用时间作为取随机数种子
Random random = new Random(50);
byte[] buffer = new byte[16]; //因为种植指定为50这个随机数是不会改变的
random.nextBytes(buffer);
System.out.println(Arrays.toString(buffer));
Random random1 = new Random(System.currentTimeMillis()); //创建将时间定位种子的random对象
random1.nextBytes(buffer);
System.out.println(Arrays.toString(buffer));
//指定生成伪随机数a介于0和指定值2之间
int a = random1.nextInt(2);
System.out.println(a);
//线程安全的,ThreadLocalRandom java7新增 产生随机数的形式更多
ThreadLocalRandom tlr = ThreadLocalRandom.current();//threadlocalrandom有一个静态方法来创建对象,其使用方法与random基本相当
tlr.nextInt();
}
}
6.BigDecimal
- 定义:在double和float计算经常有精度丢失问题,于是引入BigDecimal
- 注:在创建BigDecimal的时候如果直接将double的值传入同样会引起精度问题
- 实例:
public class BigDecimalTest {
public static void main(String []args){
System.out.println("精度问题");
//double和float这两种类型容易引起精度丢失
System.out.println(6.11-1.09); //输出结果5.0200000000000005
//在创建BigDecimal的时候如果直接将double的值传入同样会引起精度问题
BigDecimal bd = new BigDecimal(0.05);
//先将double包装成String在传入对象
BigDecimal bd1 = new BigDecimal("1.11");
//直接通过静态方法将double传入对象
BigDecimal bd2 = BigDecimal.valueOf(0.01);
System.out.println(bd2.add(bd)); //bd创建方式不对,此处又精度丢失
System.out.println(bd1.add(bd2));//无精度丢失
}
}
7.java8中的日期类,时间类
1. Date类
1.定义:这是一个相当糟糕的类,该类1.1版本中就存在,如今java先版本已经完全将这个类Deprecated
2.例子,这是7版本还存活的两个(总共6个,12版本已经完全不建议该类)创建date对象的构造器和其中的几个方法
public class DateTest {
//Date是一个糟糕的类
public static void main(String[] args){
Date d1 = new Date();//创建一个对象
Date d2 = new Date(System.currentTimeMillis()+100);//通过long整数类型日期创建一个日期对象
System.out.println(d1.before(d2));//判断d1是否在d2之前
System.out.println(d1.after(d2));//判断d1是否在d2之后
System.out.println(d2.compareTo(d1));//如果d2在d1之后返回1,如果d2在d1之前返回-1,相等返回0
}
}
2.Calendar
- 与Date方法相似,但是Calendar是一个抽象类,需要用Calendar的静态方法创建对象
public class CalendarTest {
public static void main(String[] args){
Calendar cal = Calendar.getInstance();
System.out.println(cal.getTime());
}
}
- 常用方法:
- add :更改时间指定参数的值,如果值超过时间单位阈值,会自动向下向下进位
- roll:同上,但是不会进位
8.正则表达式
- 正则表达式是一个强大的字符串处理工具
- 对照正则表达式表
package 常用工具类;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class MatchesTest {
public static void main(String[] args){
String[] maild = {
"zlisang@163.com",
"dangwode@mail.com",
"niangengyao@qq.com",
"saf"
};
String mailRegEx = "\\w{6}?`@\\w+\\.\\w{2,5}";
Pattern mailReg = Pattern.compile(mailRegEx);
Matcher matcher = null;
for (String i : maild){
matcher = mailReg.matcher(i);
System.out.print(i+":");
if (matcher.matches()){
System.out.println("符合正则表达式");
}else{
System.out.println("不符合正则表达式");
}
}
}
}
白茶清欢无别事,我在等风也等你。

浙公网安备 33010602011771号