java - 工具类 - 包装类,数字相关类, 日期相关类

Posted clamp7724

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java - 工具类 - 包装类,数字相关类, 日期相关类相关的知识,希望对你有一定的参考价值。

工具类:java开发者写好的类

1.包装相关类

2.数字相关类

3.日期类

4.字符串

5.集合相关类

6.异常相关类

7.输入输出相关 IO(input/output)

8.线程

9.网络

10.注解

11.GUI

 

1.包装类:

为了将基本类型也面向对象,所以将他们分装进包装类中

1.byte -- Byte,short --Short,int -- Integer,long -- Long

2.float -- Float,double -- Double

3.char -- Character

4.boolean -- Boolean

 

6个数字相关的类都继承Number类

除了Character都有用String类型作为参数的构造方法, 也可以用 类名.valueOf();

 

 

 

 

package number_test;

public class NumberTest 

    public static void main(String[] args)
        //构造方法和valueOf
        //注意这类变量是包装类的类型,不是基本类型,基本类型是小写。
        Integer i1 = 111;
        Integer i2 = 111;
        Integer i3 = new Integer("111");
        Integer i4 = new Integer("111");
        Integer i5 = i3;

         //使用起来和 基本类型int 基本没区别,可以加减乘除打印等,但是储存方法不同,

        // == 比较基本类型比较的是值,比较引用类型则比较的是地址, equals比较的是值(所以也用来比较String这种引用类型)

        // Integer直接赋值时,值存在方法区的静态元素区,值一样时地址也一样。 java底层有一个静态数组,里面存了-127 - 128,直接赋值会把变量指向这个数组对应位置。
        //因为静态数组是-127 - 128,所以如果Integer的值大于这个范围,则会自动给他new一个对象存在堆内存中
        System.out.println("i1 == i2: " + (i1 == i2)); //定义时两个存在了方法区的静态元素区中
        i1 = 1111;
        i2 = 1111;
        System.out.println("i1 == i2: " + (i1 == i2)); //定义时两个存在了堆内存中

        System.out.println("i3 == i4: " + (i3 == i4)); //两个定义时用了new,存在了堆内存,所以地址不同
        System.out.println("i3 == i5: " + (i3 == i5));
        System.out.println("i1 .equals( i2 ): " + (i1.equals(i2)));
        System.out.println("i3 .equals( i4 ): " + (i3.equals(i4)));
//        i1 == i2: true
//        i1 == i2: false
//        i3 == i4: false
//        i3 == i5: true
//        i1 .equals( i2 ): true
//        i3 .equals( i4 ): true

        //String
        String s1 = i1.toString();
        String s2 = i2.toString();
        System.out.println("s1 == s2: " + (s1 == s2)); //值通过计算获得,两者地址不同
        System.out.println("s1.equali3;s(s2): " + (s1.equals(s2)));
        s1 = "abc";
        s2 = "abc";
        System.out.println("改为直接赋值:s1 == s2: " + (s1 == s2)); //如果是直接赋值,他们的值会相同 - -这里我有点没明白
        //查资料,说是java对String进行了优化,刚赋值时会存入缓存池,如果之后有相同的赋值操作,会指向同一个地址,不是直接赋值或者赋不同值才会new新对象。
        //所以测试一下:
        String s3 = "bcd";
        String s4 = "bc"; //这里应该是已经new了一个新对象,再改变他应该就不会相等了。
        s4 = s4 + "d";  //s4 = s4 + "d";是false,如果直接 s4  =  "bc" + "d";则下面s3 == s4依旧为true,稍微有点不太明白- -
        System.out.println("直接赋值测试:s1 == s2: " + (s1 == s2));
        System.out.println("直接赋值测试:s3 == s4: " + (s3 == s4));

//        s1 == s2: false
//        s1.equali3;s(s2): true
//        改为直接赋值:s1 == s2: true
//        直接赋值测试:s1 == s2: true
//        直接赋值测试:s3 == s4: false    
        


        Byte b = Byte.valueOf("111");
        int i = Integer.valueOf("111");
        Long l = Long.valueOf("222");
        Float f = new Float("1.1");
        Double d = Double.valueOf("2.2");
        boolean bt = new Boolean("true");
        Boolean bf = Boolean.valueOf("false");
        //可以直接使用
        System.out.println(i * 10);
        System.out.println(l * 10);
        System.out.println(f * 10);
        System.out.println(d * 10);
        if(bt)
            System.out.println(bt);
        
        if(!bf)
            System.out.println(bf);
        
//        1110
//        2220
//        11.0
//        22.0
//        true
//        false

        //intValue
        int intTest = i1.intValue(); //把包装类变成基本类型
        int doubleTest = d.intValue();//取整数部分
        int charTest = ‘a‘;//asc码转成数字,char和int可以直接转换
        int stringTest = Integer.parseInt("111");//直接把字符串转为int

        System.out.println(intTest);
        System.out.println(doubleTest);
        System.out.println(charTest);
        System.out.println(stringTest);
//        111
//        2
//        97
//        111


        //于是想测试一下。。。
        System.out.println("i3 == i4: " + (i3 == i4)); //两个定义时用了new所以地址不同
        int ii3 = i3.intValue();
        int ii4 = i4.intValue();
        System.out.println("ii3 == ii4: " + (ii3 == ii4)); //两个定义时用了new所以地址不同
        //i3 == i4: false
        //ii3 == ii4: true
        //int值存在常量区,所以只要值一样地址就一样,





        // Integer不是直接赋值时,如new赋值时,和引用类型一样




//        intValue()是把Integer对象类型变成int的基础数据类型;
//        parseInt()是把String 变成int的基础数据类型;
//        Valueof()是把给定的String参数转化成Integer对象类型;
        //不过现在java支持自动转换了,所以其实可以混着用。。。
    

 

 

 

 

 

 

2.数学相关的类:

Math用来进行基本类型的运算相关

Random

BigInteger

BigDecimal

package Math_test;

import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.Random;

public class MathTest 
    public static void main(String[] args)
        //Math构造方法为私有,方法都是static,所以可以直接调用(单例模式),Math有很多方法,只挑部分常用的

        //Math.random(),返回一个0-1之间的double类型的数字
        for(int i = 0; i < 5; i++)
            System.out.println(Math.random());//返回一个0-1之间的double类型的数字
        
//        0.30222893423699926
//        0.37739767545532177
//        0.13927359803309325
//        0.9123839746760073
//        0.9768944004877123

        //Random,专门用来生成随机数的类
        for(int i = 0; i < 5; i++)
            System.out.println( new Random().nextInt(10) );//返回一个0-9之间的int类型的数字  ,还可以nextFloat,nextBoolean等
        
//        8
//        5
//        3
//        3
//        0



        //Math.abs(); 变为正数
        int i = -111;
        System.out.println( Math.abs(i) );

        //取最近值
        System.out.println( Math.ceil(1.4) ); //向上取
        System.out.println( Math.ceil(1.5) ); //向上取
//        2.0
//        2.0

        System.out.println( Math.floor(1.8) );//向下取
        System.out.println( Math.floor(1.5) );//向下取
//        1.0
//        1.0

        System.out.println( Math.rint(1.4) ); //最近的整数,一样的话返回偶数
        System.out.println( Math.rint(1.5) ); //最近的整数,一样的话返回偶数
        System.out.println( Math.rint(2.5) ); //最近的整数,一样的话返回偶数
//        1.0
//        2.0
//        2.0

        System.out.println( Math.round(1.4) );//四舍五入返回int
        System.out.println( Math.round(1.5) );//四舍五入返回int
        System.out.println( Math.round(2.5) );//四舍五入返回int
//        1
//        2
//        3

        //负数测试:
        System.out.println( Math.ceil(-1.4) ); //向上取
        System.out.println( Math.ceil(-1.5) ); //向上取
//        -1.0
//        -1.0

        System.out.println( Math.floor(-1.8) );//向下取
        System.out.println( Math.floor(-1.5) );//向下取
//        -2.0
//        -2.0

        System.out.println( Math.rint(-1.4) ); //最近的整数,一样的话返回偶数
        System.out.println( Math.rint(-1.5) ); //最近的整数,一样的话返回偶数
        System.out.println( Math.rint(-2.5) ); //最近的整数,一样的话返回偶数
//        -1.0
//        -2.0
//        -2.0

        System.out.println( Math.round(-1.4) );//四舍五入返回int
        System.out.println( Math.round(-1.5) );//四舍五入返回int
        System.out.println( Math.round(-2.5) );//四舍五入返回int
//        -1
//        -1
//        -2

        //Math.max, Math.min
        System.out.println( Math.max(111,222) );//取最大值
        System.out.println( Math.min(111,222L) );//取最小值
//        222
//        111

        //Math.sqrt()  平方根
        System.out.println( Math.sqrt(1.21) ); //double类型返回
        System.out.println( Math.sqrt(9) ); //double类型返回
//        1.1
//        3.0

        //BigInteger,用来储存超大整数
        BigInteger bi = new BigInteger(                "5555555555555555555555555555555555555555555555555555555555555555");
        System.out.println(bi);
//        111111111111111111111111111111111111111111111111111111111111111111
        System.out.println(bi.add(new BigInteger(     "1111111122222222222222222233333333333333333333333333333444444444")));//
        System.out.println(bi.subtract(new BigInteger("1111111122222222222222222233333333333333333333333333333444444444")));//
        System.out.println(bi.multiply(new BigInteger("11111111")));//
        System.out.println(bi.divide(new BigInteger(  "1111111111111111111111111111111111111111111111111111111111111111")));////BigInteger的运算只能是BigInteger之间
//        5555555555555555555555555555555555555555555555555555555555555555
//        6666666677777777777777777788888888888888888888888888888999999999
//        4444444433333333333333333322222222222222222222222222222111111111
//        61728394444444444444444444444444444444444444444444444444444444438271605
//        5

          //BigDecimal,用来储存超大小数,加减乘除运算和NigInteger一致
        BigDecimal bd = new BigDecimal("55555555555555555555555555555555.555555555555555555555555555555555555555555555555555555");
        System.out.println(bd.add(new BigDecimal("55555555555555555555555555555555.555555555555555555555555555555555555555555555555555555")));
        System.out.println(bd.setScale(2,BigDecimal.ROUND_UP)); //setScale(int newScale, RoundingMode roundingMode)
        System.out.println(bd.setScale(2,BigDecimal.ROUND_DOWN));
//        111111111111111111111111111111111.111111111111111111111111111111111111111111111111111110
//        55555555555555555555555555555555.56
//        55555555555555555555555555555555.55
    

 

3.日期:

Date

Calendar

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

public class TimeTest 
    public static void main(String[] args)
        System.out.println(System.currentTimeMillis());//计算机元年1970.1.1到现在的毫秒差
        try 
            Thread.sleep(3000); //尝试让这个线程睡眠3000毫秒
         catch (InterruptedException e) 
            e.printStackTrace();
        
        System.out.println(System.currentTimeMillis());

        //正好过了3000毫秒
//        1570000718473
//        1570000721473
        //这个方法也可以用来测试电脑或者程序运算性能

        //Date
        Date d = new Date(System.currentTimeMillis()); //构造方法中添加的是计算机元年1970.1.1到现在的毫秒差
        d = new Date();//直接new默认当前时间
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd KK:mm:ss");
        System.out.println(simpleDateFormat.format(d));
        //2019-10-02 03:23:22


        //Date现在很少使用了,日期处理采用calendar
        Calendar cal = Calendar.getInstance();  //创建当前时间的时间对象
        //public void set(int year,int month,int date,int hourofday,int minute,int second)

        cal.set(1990,5,26,2,15,16);
        cal.set(Calendar.DATE, 2);
        // 获取年
        int year = cal.get(Calendar.YEAR);
        // 获取月
        int month = cal.get(Calendar.MONTH);
        // 获取日
        int date = cal.get(Calendar.DATE);
        // 获取时
        int hour = cal.get(Calendar.HOUR);  //会自动 %12,所以上面就算hourOfDay设成25也是能存入 1 的= =

        //getTimeZoon();
        System.out.println("timeZoon = " + cal.getTimeZone().getDisplayName());

        System.out.println(simpleDateFormat.format(cal.getTime()));//simpleDateFormat一样可以处理cal,需要把calendar先转为date

    

 

技术图片

 

以上是关于java - 工具类 - 包装类,数字相关类, 日期相关类的主要内容,如果未能解决你的问题,请参考以下文章

179 01 Android 零基础入门 03 Java常用工具类02 Java包装类 03 包装类总结 01 Java中的包装类总结

Java-数字相关类

J2SE核心开发实战——字符串与包装类

Java基础——常用类(DateFile)以及包装类

Java之数字处理类浅析

java字符串转成数字