Java的一些工具类

Java开发者写好的工具类 ----- 官方API帮助文档(Application Programming Interface)
    包装类(封装类)
    数学相关
    日期相关
    字符串

    集合相关
    异常相关
    输入输出相关I/O
    线程相关
    网络通信
    反射注解
    GUI Swing
1.类所在的包
2.类的关系(默认继承或实现)
3.是否可以创建对象 调用
4.类中提供的常用方法
========================================================
包装类(封装类)
    byte---Byte   short---Short   int---Integer   long---Long
    float---Float   double---Double   char---Character   boolean---Boolean
1.八个包装类都在同一个包下 java.lang包 不需要import导包就可以直接用
2八个包装类中有六个是与数字相关,都默认继承父类Number
3.八个包装类都实现了Serializable,Comparable
4.八个包装类都有带自己对应类型参数的构造方法
   八个包装类中除了Character之外都有构造方法重载(String类型)
5.创建对象 对象调用属性/方法
    new Integer("abc"); -----> NumberFormatException 数字格式化异常
   有六个与数字相关的类都继承了Number类    .xxxValue();//将一个包装类型转化为对应的基本类型(拆包)
    +++++++++++++++++++++++ +++++++++++++++++
    //1.5之前
    Integer i1 = 10;    //引用数据类型 包装类
    int value1 = new Integer(10);
    //1.5之后
    Integer i2 = 10;
    int value2 = new Integer(10);

    int value3 = Integer.parseInt("10");
    int value4 = new Integer("10");
    ++++++++++++++++++++++++++++++++++++++++
6.经常在笔试中出现的问题
    +++++++++++++++++++++++ +++++++++++++++++
    Integer i1 = 10;    //10被自动包装成Integer对象
    Integer i2 = 10;
    Integer i3 = new Integer(10);
    Integer i4 = new Integer(10);
    System.out.println(i1==i2);    //true
    System.out.println(i1==i3);    //false
    System.out.println(i3==i4);    //false
    System.out.println(i1.equals(i2));    //true
    System.out.println(i1.equals(i3));    //true
    System.out.println(i3.equals(i4));    //true
    +++++++++++++++++++++++ +++++++++++++++++
    Integer i1 = 1000;    //1000被自动包装成Integer对象
    Integer i2 = 1000;
    Integer i3 = new Integer(1000);
    Integer i3 = new Integer(1000);
    System.out.println(i1==i2);    //false
    System.out.println(i1==i3);    //false
    System.out.println(i3==i4);    //false
    System.out.println(i1.equals(i2));    //true
    System.out.println(i1.equals(i3));    //true
    System.out.println(i3.equals(i4));    //true
    +++++++++++++++++++++++ +++++++++++++++++
    public boolean equals(Object obj) {
        if (obj instanceof Integer) {
            return value == ((Integer)obj).intValue();
        }
        return false;
    }
    +++++++++++++++++++++++ +++++++++++++++++
    1.==与equals()的区别
    ==可以比较基本数据类型和引用数据类型(变量中储存的内容)
    如果比较基本数据类型,比较的是变量中储存的值
    如果比较引用数据类型,比较的是变量中储存的地址引用
    equals()是Object类中继承过来的方法 每一个引用都可以调用
    默认继承的equals()方法比较与==一致,若想改变比较规则,可以重写equals()方法
    由于Integer类重写了equals()方法 比较的是数值
    2.考察Integer类加载的时候 自己有一个静态的空间
    空间内立即加载 Integer类型的数组 储存了256个Integer对象 -128~127
    如果我们使用的对象在这范围之内 则直接去静态区内找对应对象
        若不在则在堆内存中通过new Integer()创建
========================================================
数学相关    Math
1.所属的包java.lang
2.Math的构造方法是私有的 我们不能直接调用创建对象
    由于Math中的方法和属性都是static修饰 因此不需要创建对象
3.常用的方法
    abs()    //返回给定数字的绝对值
    ceil()    //<返回double>向上取整
    floor()    //<返回double>向下取整
    rint()    //<返回double>返回最近的整数,但若前后两个数字距离相同,则返回二者之中的偶数
    round()    //<返回int>四舍五入
    max(a,b)    //<int ,long,float,double>
    min(a,b)    //<int ,long,float,double>
    pow(a,b)    //<参数double 返回double>    a的b次方
    sqrt(a)    //<double>获取给定参数的平方根
    random()    //随机产生一个    [0.0--1.0)
        Math.random()在计算小数时的精确程度时可能会有损失,所以可以使用Random类
        Random类
            1.java.util包中的类 需要import类
            2.没有继承关系 因此只默认继承Object类
            3.通过new Random()创建对象
            4.
            ++++++++++++++++++++++++++++++++++++++
            Random r = new Random();
            int value = r.nextInt();    //随机产生一个整数    long的范围内
            int value1 = r.nextInt(10);    //[0,10)的整数
                    //参数若为负数,则会产生IlliegalArgumentException异常
            float f = r.nextFloat();    //[0.0,1.0)的float数
            boolean b = r.nextBoolean();    //随机产生boolea值
            ++++++++++++++++++++++++++++++++++++++

UUID类
1.所属的包java.util 需要import导入
2.没有继承关系 默认继承Object类
3.没有无参数的构造方法 有两个long参数的构造方法 但不经常使用
    UUID uuid = UUID.randomUUID();    //通常通过randomUUID()
    System.out.println(uuid.toString());    //生成32位的随机元素 每一个位置是一个十六进制数
                //以后可用于充当数据库表格主键 primary key
    long l = uuid.timestamp();    //

BigInteger类 大整数
1.所属的包java.math 需要import导入
2.继承Number类
3.所提供的构造方法全部都是带参数的
    所以通常使用带String参数的构造方法创建这个类的对象
        BigInteger big1 = new BigInteger("123");
        BigInteger big2 = new BigInteger("456");
4.类中的常用方法
    做四则运算
    big1.add(big2);
    big1.subtract(big2);
    big1.multiply(big2);
    big1.divide(big2);

BigDecima类 超过了double取值范围
1.所属的包 java.math包 需import导入
2.继承Number类
3.所提供的构造方法全部都是带参数的
    通常通过带String参数的构造方法创建这个类的对象
        BigDecimal decimal1 = new BidDecimal("123.456");
        BigDecimal decimal2 = new BigDecimal("456");
4.类中的常用方法
    做四则运算
    decimal1.add(decimal2);
    decimal1.subtract(decimal2);
    decimal1.multiply(decimal2);
    decimal1.divide(decimal2);

    decimal1 = decimal1.setScale(2,ROUND_DOWN);    //123.45
        //第一个参数是保留的小数点之后的位数,后一个参数是设置的保留模式

//小数点前后的位数都能进行处理的类--->格式化
DecimalFormat类 (四舍五入)
1.所属的包java.text 需import导入(这个包下的类基本上都是格式化作用)
2.
3.//通过带String参数的构造方法创建一个格式化对象    0必须存在 #可有可无
    DecimalFormat df = new DecimalFormat("000.###");
    String value = df.format(123.4567);    //123.457
========================================================
日期相关
Date类
1.通常使用java.util包
2.通常使用无参数构造方法 或带long参数的构造方法
3.Date类中常用的方法
    before();    after(); // 返回Boolean表示时间先后
    setTime(); getTime();
    int sign = date1.compareTo(date2); //-1调用的时间更早 参数时间更迟
                // 1调用的时间更迟 参数时间更早
                // 0 调用的时间和参数时间相同
4.可以处理一个Date日期的格式
DateFormat类
1.所属的包 java.text包
2.是一个抽象类 不可创建对象 需通过子类(SimpleDateFormat)使用
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
    String v = sdf.format(date1);

Calendar类 (1.1版本后出现 用于操作Date类的一部分
1.所属的包 java.util包
2.有protected修饰的构造方法 通常访问不到
    Calendar calendar = Calendar.getInstance();//系统当前时间的calendar对象
    calendar.after(date1);
3.常用方法
    after(); before();
    setTime(); getTime(); --- 返回Date类型
    getTimeZone() --- TimeZone
    Calendar里面包含一个date属性 可以操作date的摸一个局部信息
        Calendar calendar = Calendar.getInstance();
        System.out.println(calendar);    //java.util.GregorianCalendar[name1=value1,name2=value2]
        calendar.set(Calendar.YEAR,2020);
        int year = calendar.get(Calendar.YEAR10);
        int month = calendar.get(Calendar.MONTH);  //january --- 0
        int day = calendar.get(Calendar.DAY_OF_MONTH);

TimeZone类
1.java.util包
2.可以通过 Calendar的对象.getTimeZone() 或 TimeZone.getDefault() 获取
    TimeZone tz = TimeZone.getDefault();
3.常用方法
    tz.getID() //返回时区的ID号 Asia/Shanghai
    tz.getDispalyName() // 对时区的描述 中国标准时间
========================================================
字符串相关
String类(final修饰 不可被继承重写
1.所属的包 java.lang包 不用导入
2.无任何继承关系 实现了三个接口
3.创建对象(String是一个非常特殊的引用数据类型 可以像基本类型一样 创建 赋值)
    String s1 = "abc";
    String s2 = new String("abc");
    String s3 = new String(); // String s3 = "";

    byte[] value = new byte[]{65,97,48};
    String str = new String(value); // AaO (将数组中的数字转化为对应的char,在连接为String
    String str1 = new String(value,1,2); //offset:1(起点的索引),count:2(个数) --- aO
4.String类的特性
5.String类中常用的方法
    boolean = equals(Object obj) //重写过了,比较String的字面值
    int = hashCode() //重写过了
        //"abc"  h=0
        //h = 0*31+97 = 97
        //h = 97*31+98
        //h = h*31+99
    int = compareTo(String str) //实现Comparable接口 按照字典索引的顺序比较
    String = toString() // 继承自Object 重写过了 输出字符串中的字面值
    char = charAt(int index) //
    int = codePointAt(int index) //"abc" 0-->97
        返回给定index对应位置的char所对应的code码
    String = concat(String str) //在后面连接str 通过创建新的小数组
    ++++++++++++++++++++++++++++++++++++++
    String str = "a";
    long time1 = System.currentTimeMillis();
    for(int i = 1;i<200000;i++){
        str+="a"; //需要new许多许多新的数组 速度更慢"a""a""aa""a""aaa"......
    }
    long time2 = System.currentTimeMillis();
    System.out.println(time2-time1);
    ++++++++++++++++++++++++++++++++++++++
    String str = "a";
    long time1 = System.currentTimeMillis();
    for(int i = 1;i<200000;i++){
        str = str.concat("    "); //只需要创建新的小数组 速度更快
    }
    long time2 = System.currentTimeMillis();
    System.out.println(time2-time1);
    ++++++++++++++++++++++++++++++++++++++
    
6.笔试中经常会考察的String的特点
    String的不可变特性
    String与StringBuffer区别
    StringBuffer与StringBuilder区别
    String对象的储存
7.String的不可变特性
    体现:体现在两个方面 长度 内容
    原因:String类中包含一个private final char[] value; //存储String中的每一个字符
        final的值是不可改变的 ---》地址不可改变 数组长度本身不可变
        private ---》 数组中的内容也不能改变

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值