常用类

常用类

  • 目录
    1. object类
    2. Objects类
    3. String、StringBuffer和StringBuild类
    4. Math
    5. Random和ThreadLocalRandom
    6. BigDecimal
    7. java8中的日期类,时间类
    8. 正则表达式

1. object类

  1. 定义:object是所有类的父类,当一个类没有定义指定父类时,默认继承object类
  2. 常用方法:
    • 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类

  1. 定义:
    • 这玩意是java7新增的
    • 提供了一些方法来操作对象,这些工具大多是用来避免空指针异常的
      objects.toString(a);避免a免的值为空,出现,空指针异常
  2. 注:因该类常用方法较少,并且与object类大致相当,为减少篇幅,略。。。

3.String、StringBuffer和StringBuild类

  1. 区别
    1. String是一个不可变字符串,改变他的值不过是重新生成了一个对象,又对其进行了引用
    2. StringBuffer是一个可变字符串,线程安全,一旦生成了自己想要的字符串通过toString将其赋值给一个String对象
    3. 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());
            }
        }
  1. 常用方法
    功能:StringBuild与StringBuffer内的方法主要又增、查、删、改、反转、截取的作用

4.Math

  1. 定义:这是一个数学工具类,进行较为复杂的数学运算(坐标、三角函数、幂)

5.Random和ThreadLocalRandom

  1. 区别:
    • Random 生成一个伪随机数(如果随机数种子是相同的,同一台机器,无论多少对象取随机数,值都是一样的)
    • ThrandLocalRandom 是线程安全的,主要用来多线程并发,同样生成伪随机数,但是不能指定随机数种子
    • ThreadLocalRandom创建对象是通过该类下的一个静态方法current创建的
  2. 相同点,以及某些增强
    • 这两个类都定义了为各种对象随机产生随机数的方法
    • treadlocalrandom类,的自定义取随机数程度更高
  3. 实例
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

  1. 定义:在double和float计算经常有精度丢失问题,于是引入BigDecimal
  2. 注:在创建BigDecimal的时候如果直接将double的值传入同样会引起精度问题
  3. 实例:
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
  1. 与Date方法相似,但是Calendar是一个抽象类,需要用Calendar的静态方法创建对象
public class CalendarTest {
    public static void main(String[] args){
        Calendar cal = Calendar.getInstance();
        System.out.println(cal.getTime());
    }
}
  1. 常用方法:
  • add :更改时间指定参数的值,如果值超过时间单位阈值,会自动向下向下进位
  • roll:同上,但是不会进位

8.正则表达式

  1. 正则表达式是一个强大的字符串处理工具
    • 对照正则表达式表
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("不符合正则表达式");
            }
        }
    }
}

posted @ 2019-08-14 18:23  zlisang  阅读(87)  评论(0)    收藏  举报