zoukankan      html  css  js  c++  java
  • Java常用包装类

    前言

    Java的4类8种基本数据类型,功能过于单一无法满足快速开发需要。

    JDK1.8中自带了大量Java包装类, 这些包装类在基本数据类的基础上进行了大量功能封装。

    学习和使用包装类,避免了重复造轮子,达成敏捷开发的目的。

    一、引入包装类

    1.包装类是什么?

    之前我们定义变量,只能使用Java基本数据类型,这些基本数据类型有4类八种。

    • 1  整型:    byte 、short 、int 、long 
    • 2  浮点型:float 、 double 
    • 3 字符型:char
    • 4 布尔型:boolean

    对于这些基本数据类型来说,它们值就是1个数字。没有任何方法和属性,不方便我们使用和操作。

    所以为了使基本数据类型拥有面向对象的特征,功能更加丰富,Java对它的基本数据类型进行进一步的功能封装,就产生了包装类。

    包装类被封装在Java的lang包里,这就意味着我们无需导入直接使用;

    2.包装类有哪些?

    对应以上的四类八种基本数据类型,包装类有以下。

     

    二、Integer类

    Integer类是对int基本数据类型的封装。

    package CommonClass;
    
    public class Test01 {
        public static void main(String[] args) {
            //Interger的属性
            System.out.println(Integer.MAX_VALUE);
            System.out.println(Integer.MIN_VALUE);
            //物极必反
            System.out.println(Integer.MAX_VALUE + 1);
            System.out.println(Integer.MIN_VALUE - 1);
            //字符串转换成数字
            Integer i1 = new Integer("12");
            Integer i2 = Integer.parseInt("12");
            System.out.println(i1 + i2);
            //自动装箱和自动拆箱:int类型和Integer类型之间可以进行快速的类型转换
            Integer i3 = new Integer(12);
            int num4 = i3;
            System.out.println(num4);
            //Interger的方法:返回3种结果:小于返回-1/等于返回0/大于返回1
            int num5 = i1.compareTo(i2 + i2);//(x < y) ? -1 : ((x == y) ? 0 : 1);
            System.out.println(num5);
            //equals:Integer类虽然继承了Object类,但是对Object的equals()进行了重新,比较的是底层封装的值,而不是内存地址。
            //如果Integer的值在-128到127之间比较值,否则比较对象的地址
            Integer i7 = 22;
            Integer i8 = 22;
            System.out.println(i7 == i8);
            System.out.println(i7.equals(i8));
    
            //intValue():将integer转换为int类型
            int i9 = i8.intValue();
            System.out.println(i9);
    
            //toString():把integer转换为String类型    
            System.out.println(i7.toString());
    
    
        }
    }

    三、时间日期类

    在编程的过程中,我们经常从前端或者数据库获取到字符串类型的时间。

    这时我们就需要把String类型的时间字符串,转换成便于Java处理的时间格式。

    或者把Java中的时间类型,转成字符串响应给浏览器或者存储到数据库。 

    所以每1种编程语言都会有一种String<====>Date之间的转换机制。

    1.java.util.Date

    java.util.Date是java中最常用的时间类型,以下的几个时间相关类,我们都围绕java.util.Date展开。

    package DateClass;
    
    import java.util.Date;
    
    public class Test {
        public static void main(String[] args) {
            Date d = new Date();
            System.out.println(d);
            System.out.println(d.toLocaleString());//2021-11-2 10:17:24
            System.out.println(d.getYear());
            System.out.println(d.getMonth());
            System.out.println(d.getTime()); //时间戳:               1635819720476
            System.out.println(System.currentTimeMillis()); //时间戳:1635819720523
    
            long startTime = System.currentTimeMillis();
            for (int i = 0; i < 100000; i++) {
                System.out.println(i);
            }
            long endTime = System.currentTimeMillis();
            System.out.println(endTime - startTime);
    
    
        }
    }

    2.java.sql.Date

    package CommonClass;
    
    import java.sql.Date;
    
    public class Test02 {
        //导入import java.sql.Date;
        public static void main(String[] args) {
            //sql.Date继承至java.util.Date;public class Date extends java.util.Date
            Date d = new Date(1635820261871L);
            System.out.println(d);
            /*
             *(1)java.util.Date和java.sql.Date的区别?
             *java.util.Date:年月日 时分秒
             * java.sql.Date:只有年月日
             *
             * (2)java.util.Date和java.sql.Date的联系?
             *java.util.Date是java.sql.Date的父类:java.sql.Date继承至java.util.Date
             *
             *(3)java util.Date和java.sql.Date相互转换。
             *java.util.Date转换成java.sql.Date
             *
             *
             * */
            //java.util.Date转换成java.sql.Date类型
            java.util.Date date = new java.sql.Date(1635820261871L); //创建java.util.Date的对象
            //方式1:向下转型:就是把父类强转成子类
            java.sql.Date date1 = (java.sql.Date) date; //把java.util.Date转换成java.sql.Date
            System.out.println(date1);
    
            //方式2:利用构造器
            Date date2 = new Date(date.getTime());
            //java.sql.Date转换成java.sql.util类:向上转换,父类引用指向子类对象,是自动进行的!
            java.util.Date date3 = new java.sql.Date(1635820261871L);
    
    
        }
    }

    3.String转换成java.util.Date类型

    日常开发过程中,我们经常需要把字符串(String)转换成时间类型。

    package CommonClass;
    
    public class Test03 {
        public static void main(String[] args) {
            //(1)String转成java.sql.Date
            java.sql.Date date=java.sql.Date.valueOf("2015-6-25");
            //(2)java.sql.Date转成java.util.Date
            java.util.Date date1=date;
            System.out.println(date.getTime());
            //以上代码有局限性,字符串的格式只能是年-月-日(2015-6-25)形式,换成其他格式(2015/6/25)就会出现以下异常。
            /*
            * Exception in thread "main" java.lang.IllegalArgumentException
                at java.sql.Date.valueOf(Date.java:143)
                at CommonClass.Test03.main(Test03.java:6)
            * */
        }
    }

    以上代码有局限性,字符串的格式只能是年-月-日(2015-6-25)形式,如果是其他格式(2015/6/25)就会出现以下异常。
     Exception in thread "main" java.lang.IllegalArgumentException
                at java.sql.Date.valueOf(Date.java:143)
                at CommonClass.Test03.main(Test03.java:6)

    4.自定时间转换格式

    我们可以自定义一种时间格式,用于完成Date和String之间的相互转换;

    package CommonClass;
    
    import java.text.DateFormat;
    import java.text.ParseException;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    
    public class Test03 {
        public static void main(String[] args) {
    
            //1.自定义一种时间格式化标准
            DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            //2.使用parse把String转成java.util.Date
            try {
                Date date = df.parse("2019-04-06 12:23:54");
                System.out.println(date);
            } catch (ParseException e) {
                System.out.println("转换失败");
            }
            System.out.println(df);
            //3.使用format把Date(java.util.Date)转成String
            String curentTime = df.format(new Date());
            System.out.println(curentTime);
    
    
        }
    }

    5.Calendar

    我们可以使用Calendar类获取当前时间的年月日,也可以给Calendar设置一个其他的时间。

    package CommonClass;
    
    import java.util.Calendar;
    import java.util.GregorianCalendar;
    
    public class Test04 {
        public static void main(String[] args) {
            //1.Calendar是一个抽象类,不可以直接创建对象
            Calendar cal = new GregorianCalendar();
            Calendar cal2 = Calendar.getInstance();
            System.out.println(cal);
    
            //2.Calendar常用的方法
            //2.1get方法
            System.out.println(cal.get(Calendar.YEAR));
            System.out.println(cal.get(Calendar.MONTH));
            System.out.println(cal.get(Calendar.DATE));
            System.out.println(cal.get(Calendar.DAY_OF_WEEK)); //获取星期
            //获取当月日期的最大天数
            System.out.println(cal.getActualMaximum(Calendar.DATE));
            //获取当月日期的最小天数
            System.out.println(cal.getActualMinimum(Calendar.DATE));
    
            //2.2 set方法:可以改变Calendar中的年、月、日等时间信息
            cal.set(Calendar.YEAR, 1993);
            cal.set(Calendar.MONTH, 6);
            cal.set(Calendar.DATE, 28);
            System.out.println(cal.get(Calendar.YEAR)); //获取年
            System.out.println(cal.get(Calendar.MONTH));//获取月
            System.out.println(cal.get(Calendar.DATE)); //获取日
    
            //String--->Calendar的转换
            java.sql.Date date = java.sql.Date.valueOf("2020-02-20");
            cal.setTime(date);//把时间设置成2020-02-20
            System.out.println(cal.get(Calendar.YEAR));
            System.out.println(cal.get(Calendar.MONTH));
            System.out.println(cal.get(Calendar.DATE));
    
        }
    }

    6.日历

    package CalendarClass;
    
    import java.util.Calendar;
    import java.util.Scanner;
    import java.util.Calendar;
    
    public class Test01 {
        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
            System.out.print("请录入你想要查看的日期 例如 2021-02-22的格式:");
            String strDate = sc.next();
            java.sql.Date sqlDate = java.sql.Date.valueOf(strDate);
            Calendar cal = Calendar.getInstance();
            cal.setTime(sqlDate);
            //获取今天是几号
            int currentDay = cal.get(Calendar.DATE);
            //获取本月的最大天数
            int maxDay = cal.getActualMaximum(Calendar.DATE);
            //将日期调为本月1号
            cal.set(Calendar.DATE, 1);
            //获取本月的1号是星期几
            int firstDayOfWeek = cal.get(Calendar.DAY_OF_WEEK) - 1;
    
            int counter = 0;
            System.out.println("日	一	二	三	四	五	六	");
            for (int i = 0; i < firstDayOfWeek; i++) {
                System.out.print("	");
            }
            counter = counter + firstDayOfWeek;
            for (int i = 1; i < maxDay; i++) {
                if (i == currentDay) {
                    System.out.printf("*%d	", i);
                } else {
                    System.out.printf("%d	", i);
                }
                counter++;
                if (counter % 7 == 0) {
                    System.out.println();
                }
            }
    
    
        }
    }

    7.LocalDateTime

    JDK1.0中使用的java.util.Date类,属于第一批日期时间API

    JDK1.1引入Calendar类,属于第二批日期时间API

    但是JDK1.1有以下缺陷

    可变性:像日期和时间这样的类应该是不可变的。

    偏移性:Date中的年份是从1900开始,而月份是从0开始。

    格式化:格式化只对Date有用,Calendar则不行。

    在JDK1.8之后新增了第3批日期时间API,LocalDate、LocalTime、LocalDateTime。

    package CommonClass;
    
    import java.time.LocalDate;
    import java.time.LocalDateTime;
    import java.time.LocalTime;
    
    public class Test05 {
        public static void main(String[] args) {
            //1.完成实例化
            //方法1:now():获取当前的日期,时间,日期+时间
            LocalDate localDate = LocalDate.now();  //2021-11-04
            System.out.println(localDate);
            LocalTime localTime = LocalTime.now(); //15:03:35.536
            System.out.println(localTime);
            LocalDateTime localDateTime = LocalDateTime.now(); //2021-11-04T15:03:35.537
            System.out.println(localDateTime);
            //方法2:of():设置日期,时间,日期+时间
            LocalDate of = LocalDate.of(2010, 5, 6);
            System.out.println(of);
            LocalTime of1 = LocalTime.of(12, 35, 56);
            System.out.println(of1);
            LocalDateTime of2 = LocalDateTime.of(2010, 12, 16, 23, 3);
            System.out.println(of2);
    
            //LocalDate和LocalTime用的不如LocalDateTime多
            //get()
            System.out.println(localDateTime.getYear());       //
            System.out.println(localDateTime.getMonth());      //
            System.out.println(localDateTime.getMonthValue()); //月份数字
            System.out.println(localDateTime.getDayOfMonth()); //
            System.out.println(localDateTime.getDayOfWeek());  //星期几
            System.out.println(localDateTime.getHour());    //
            System.out.println(localDateTime.getMinute());  //
            System.out.println(localDateTime.getSecond());  ////with:
            LocalDateTime localDateTime1 = localDateTime.withMonth(12);
            System.out.println(localDateTime1);
            //LocalDateTime使用with()修改时间,修改的是1个新的对象。具有不可变性
            System.out.println(localDateTime);
    
    
            //LocalDateTime提供了加、减操作
            LocalDateTime localDateTime2 = localDateTime.plusMonths(4);//4个月之后
            System.out.println(localDateTime2);
            LocalDateTime localDateTime3 = localDateTime.minusMonths(4); //4个月之前
            System.out.println(localDateTime3);
    
    
        }
    }

    8.DateTimeFormatter

    我们可以使用DateTimeFormatter,完成LocalDateTime和String之间的相互转换。

    package CommonClass;
    
    import java.time.LocalDateTime;
    import java.time.format.DateTimeFormatter;
    import java.time.format.FormatStyle;
    import java.time.temporal.TemporalAccessor;
    
    public class Test06 {
        public static void main(String[] args) {
    
            //方式一:
            //formatter可以帮助我们完成LocalDateTime和String之间的相互转换
            DateTimeFormatter formatter = DateTimeFormatter.ISO_DATE_TIME;
            //LocalDateTime-->String
            LocalDateTime now = LocalDateTime.now();
            String dateString = formatter.format(now);
            System.out.println(dateString);  //2021-11-04T16:00:02.718
            //String-->LocalDateTime
            TemporalAccessor date = formatter.parse("2021-11-04T16:00:02.718");
            System.out.println(date);
    
            //方式二:
            //参数:
            /*
             FormatStyle.LONG--2021年11月4日  长格式
             FormatStyle.MEDIUM---2021-11-4   中格式
             FormatStyle.SHORT:21-11-4        短格式
            */
            DateTimeFormatter formatter1 = DateTimeFormatter.ofLocalizedDate(FormatStyle.SHORT);
            //LocalDateTime-->String
            LocalDateTime now1 = LocalDateTime.now();
            String dateString1 = formatter1.format(now1);
            System.out.println(dateString1);
            //String-->LocalDateTime
            TemporalAccessor date1 = formatter1.parse("21-11-4");
            System.out.println(date1);
    
    
            //方式三:较为常用
            DateTimeFormatter formatter2 = DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss");
            //LocalDateTime-->String
            LocalDateTime now2 = LocalDateTime.now();
            String dateString2 = formatter2.format(now2);
            System.out.println(dateString2); //2021-11-04 04:15:22
            //String-->LocalDateTime
            TemporalAccessor date2 = formatter2.parse("2021-11-04 04:15:22");
            System.out.println(date2);
    
    
        }
    }

    四、Math类 

    Math类是封装在java.lang中常用类,对外提供一些数学运算的API。

    package CommonClass;
    
    // import static java.lang.Math.*;
    // 静态导入时:如果本类中有静态方法和导入的包同名,会优先执行本类中的静态方法,遵循就近原则。
    public class Test07 {
        public static void main(String[] args) {
            //math常用属性
            System.out.println(Math.PI);
            //math常用方法
            System.out.println("随机数" + Math.random());//随机返回0.0 -1.0之间的小数
            System.out.println("绝对值" + Math.abs(-90));
            System.out.println("向上取值" + Math.ceil(9.1));  //天花板:ceiling
            System.out.println("向上取值" + Math.floor(9.9)); //地板:floor
            System.out.println("四舍五入" + Math.round(3.8));
            System.out.println("比较2数取大" + Math.max(6, 9));
            System.out.println("比较2数取小" + Math.min(6, 9));
        }
    }

    五、随机数生成

    java.util.Random类可以帮我们生成随机数字。

    package CommonClass;
    
    import java.util.Random;
    
    public class Test08 {
        public static void main(String[] args) {
            //学习Math.random()返回带正号的double值,该值大于等于0.0且小于1.0
            System.out.println(Math.random());
            //学习Random类
            //(1) 利用带参数构造器创建对象
            Random r1 = new Random(System.currentTimeMillis());
            int x = r1.nextInt();
            System.out.println(x);
            //(2) 利用空参构造器创建对象:实际底层还是调用了参数为纳秒的有参构造器。
            Random random = new Random();
            //返回大于等于0且小于10的整数
            System.out.println(random.nextInt(10));
            //返回大于等于0.0且小于1.0的值
            System.out.println(random.nextDouble());
    
        }
    }

    参考

  • 相关阅读:
    多线程在javaweb中的应用
    Class类是什么? Class.forName()是干什么的?
    JDBC学习笔记
    jsp
    VMware虚拟机中red hat linux ping不通宿主物理主机原因
    数据库设计原则(装载)
    PHP实现正态分布的累积概率函数
    如何正确配置 Nginx + PHP ???
    PHP针对二维数组无限遍历变形研究
    easyui常用控件及参数说明
  • 原文地址:https://www.cnblogs.com/sss4/p/15494299.html
Copyright © 2011-2022 走看看