Java - 常用API

发布于:2023-01-11 ⋅ 阅读:(281) ⋅ 点赞:(0)

Java - 常用API

一、Object

  1. 概述

    ​ java.lang.Object 类是Java语言中的根类,即所有类的父类。

  2. 常用方法

    • Object中有11个可被子类继承的方法,常用的有equals方法、toString方法等。

    • public String toString():返回该对象的字符串表示。

      默认返回,“对象的类型名+@+内存地址值”字符串形式。子类可以通过重写获取自己想要的字符串内容。

    • public boolean equals(Object obj):判断指定对象(参数)是否与此对象(调用者)“相同”。

      默认返回,通过==运算符对地址值做比较后,获取的比较结果

  3. 打印类的对象信息(变量名),其实就是系统自动调用了变量名.toString( ) 方法打印的,所以打印对象信息直接打印对象变量名就行。

  4. Object类方法重写

    <1> 重写 toString() 方法 - 为了更好地展示对象的信息,原有的太简陋了,所以要重写优化。

    • 按照需要,展示指定类中的内容,若不重写则展示地址值。输出语句中展示的内容,均为指定对象的字符串形式。

    • 快捷方式:alt+insert --> toString() --> 选择要展示的成员 --> OK

    <2> 重写equals (xxx) 方法 - 不重写的话,由于系统默认的equals 方法比较的是两个对象的地址,不够好,因为我们去比较对象,还是想看他们的内容是否相同,比如两个学生对象,我想看的是,他们的年龄,姓名是否相同,尽管地址不同,很正常没关系,我主要看内容,所以要重写。

    • 按照需要,将两个对象按照指定规则进行比较,若不重写则通过地址值比较。

      ① 比较两个对象的地址值是否相同,如果相同,返回true
      
      ② 如果参数为空,或者类型不一致,返回false
      
      ③ 将参数转换为当前类型
      
      ④ 比较两个对象的内容是否相同,并返回比较结果。
      
    • 快捷方式:alt+insert --> equals and hashcode --> 选择要比较的成员 --> OK

    • 代码优化:java.util.Objects,JDK7添加的工具类。由nullsave(空指针安全)或nulltolerant(容忍空指针)两类方法组成。

    • 注意事项:

      • @Override
        public boolean equals(Object o) {
            if (this == o) return true;
            if (o == null || getClass() != o.getClass()) return false;
        
            Student student = (Student) o;
        
            if (age != student.age) return false;
            return name != null ? name.equals(student.name) : student.name == null;
        }
        
      • 只赋值年龄,姓名不赋值那它的值默认为null ,那么它调用equals 方法会报错,所以为了解决它有两种办法:直接用JDK 7+ 之后的Objects的静态方法进行比较,也可以把它的判断语句直接抄过来

      • 快捷方式,idea会展示两种,一个是JDK提供的Objects的静态方法,但是会多导一个包,浪费空间;另外一种是idea 提供的,它是直接把判断语句抄过来的,不用导包,节省空间,推荐。

二、Date(时间类)

  1. 标准基准时间:【历元(epoch):1970年1月1日00:00:00 GMT)】,也称为时间原点。

    ​ java.util.Date类 表示自时间原点以来,特定的瞬间所经历的毫秒值。

  2. 构造方法

    • 获取当前日期

      ​ public Date() : 运行时刻 - 时间原点,得到经过了多少毫秒,再换算成经过了多少年,多少月这样的格式

      在这里插入图片描述

    • 获取指定日期,参数是从时间原点开始经过的毫秒数

      ​ public Date(long date) : 时间原点+形参(经过的毫秒),得到总毫秒,再换算成经过了多少年,多少月这样的格式

  3. 常用功能

    • public long getTime () 把日期对象转换成对应的时间毫秒值。

    • public void setTime (long time) 把方法参数给定的毫秒值设置给日期对象 - 会覆盖,直接重新算

三、DateFormat (时间格式转换类)

  1. 概述

    • java.text.DateFormat 该类可以使得在Date对象与String对象之间进行来回转换。
  2. 构造方法

    • DateFormat为抽象类,需要使用其子类 java.text.SimpleDateFormat 创建对象。

    • public SimpleDateFormat (String pattern):创建给定模式和默认语言环境日期格式符号转换对象。

  3. 常用功能

    • public String format ( Date date):(格式化)按照指定的格式,把Date对象转换为String对象。

    • public Date parse ( String source):(解析)按照指定的格式,把String对象转换为Date对象。

    • 转换的时候要定义一个模板,便于对象获取值,不然它看不懂,互相转换时要遵循同一个模板。

    • 案例 - 注意格式文本中的 MM(月份)与 HH(小时) 是大写的,月份是因为要和分钟区分,小时是因为大小写代表不同的意思,小写的hh 代表的是采用12小时制,HH 是24小时制。

      //Date-->String  格式化:format
      Date d = new Date();
      //SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
      SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
      String result = sdf.format(d);
      System.out.println(result);
      
      //String-->Date  解析:parse
      String time = "2020-08-19  10:41:28";
      SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
      //这里存在一个编译时异常,需要明确处理,异常的处理"后面学"。这里采用处理异常的方式try...catch。
      //快捷方式Ctrl+Alt+T 将内容放到语法块中
      Date d2 = null;
      try {
          d2 = sdf2.parse(time);// Unparseable date: "2020-08-19  10:41:28"
      } catch (ParseException e) {
          e.printStackTrace();
      }
      System.out.println(d2);
      

四、Calendar(日历类)

  1. 概述

    ​ java.util.Calendar类表示一个“日历类”,可以进行日期运算,但是抽象类,不可实例化,其实我们实际上用的是它的亚洲地区子类GregorianCalendar,不同地区用的子类其实是不一样的。

  2. 注意事项

    ​ 日历对象中的星期是从1-7来表示,1表示星期天

    ​ 日历对象中的月份是从0-11来表示,0表示一月份

  3. 构造方法

    ​ Calendar类是一个抽象类,需要使用其 子类java.util.GregorianCalendar 创建对象。

    ​ Calendar提供了一个静态方法getInstance()可以获取GregorianCalendar对象

    ​ ~ public static Calendar getInstance() 获取GregorianCalendar对象,以Calendar类型返回。

    // 获取对象写法:类名 . 静态方法
    Calendar nowCal = Calendar.getInstance();
    
  4. 常用功能 - 值超过范围直接进入下一个周期,比如月份设置12,会直接到下一年。值为负数代表回退。

    ​ public int get (int field) 获取某个字段的值。

    ​ public void set (int field,int value) 设置某个字段的值

    ​ public void add (int field,int amount) 为某个字段增加/减少指定的值

    ​	[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-arASSYVp-1660914521848)(C:\Users\ASUS\Desktop\学习笔记\自己\笔记截图\image-20220819161828062.png)]

  5. 获取日历及时间标准格式

    private static void showCalendar(Calendar c) {
        //public int get(int field)  获取某个字段的值。
        int year = c.get(Calendar.YEAR);
        int month = c.get(Calendar.MONTH);
        month++;
        int day = c.get(Calendar.DAY_OF_MONTH);
        int hour = c.get(Calendar.HOUR_OF_DAY); // hour有两种:12小时制的和24小时制的,选后者
        int minute = c.get(Calendar.MINUTE);
        int second = c.get(Calendar.SECOND);
    
        System.out.println(year + "年" + month + "月" + day + "日 " + hour + ":" + minute + ":" + second);
    
        String[] weeks = {"星期天", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"};
        int week = c.get(Calendar.DAY_OF_WEEK);
        week--;
        System.out.println(weeks[week]);
    }
    
  6. 时间类小练习

    • 如果用毫秒相减的办法,到时候毫秒换算的时候,是除以365还是366没法判断,不准确,所以还是不行。
    public class Test {
        public static void main(String[] args) {
            //定义一个方法,参数为生日的字符串类型的时间(yyyy-MM-dd),获取该生日对应的当前年龄
            Scanner sc = new Scanner(System.in);
            System.out.println("请输入一个生日(格式:2000-12-12)");
            String birthday = sc.nextLine();
    
            int age = birthdayToAge(birthday);
    
            System.out.println(age);
        }
    
            //生日转年龄   当前年-生日年
        public static int birthdayToAge(String birthday) {
            //定义了一个代表年龄的变量
            int age = -1;
    
            //①获取生日Calendar对象  void setTime(Date date) 使用给定的 Date设置此日历的时间。
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
            Date birDate = null;
            try {
                birDate = sdf.parse(birthday);
            } catch (ParseException e) {
                e.printStackTrace();
            }
            Calendar birCal = Calendar.getInstance();
            birCal.setTime(birDate);
    
            //②获取当前Calendar对象
            Calendar nowCal = Calendar.getInstance();
    
            //③判断如果当前的时间,在生日时间的后面
            //boolean after(Object when) 返回 Calendar是否表示在指定的 Object表示的时间之后的时间。
            //boolean before(Object when) 返回此 Calendar是否表示由指定的 Object表示的时间之前的时间。
            //if (nowCal.after(birCal)){
            if (birCal.before(nowCal)) {
                //3.1分别获取生日的年  和   当前的年
                int birYear = birCal.get(Calendar.YEAR);
                int nowYear = nowCal.get(Calendar.YEAR);
                //3.2计算年龄  当前年-生日年
                age = nowYear - birYear;
                //3.3判断如果(当前月份比生日月份小) 或 (月份相同,当前日比生日的日小),age--
                int birMonth = birCal.get(Calendar.MONTH);
                int nowMonth = nowCal.get(Calendar.MONTH);
                int birDay = birCal.get(Calendar.DAY_OF_MONTH);
                int nowDay = nowCal.get(Calendar.DAY_OF_MONTH);
                if ((nowMonth<birMonth) || (nowMonth==birMonth&&nowDay<birDay)){
                    age--;
                }
            }
    
            return age;
        }
    }
    

五、Math类

  • 概述

    • java.lang.Math: 含执行基本数字运算的方法的工具类。

    • Math类构造方法被私有修饰,不能创建对象,通过类名调用内部静态内容即可。

  • 常用方法

    • public static int abs (int a) 获取参数a的绝对值

    • public static double ceil (double a) 向上取整

    • public static double floor (double a) 向下取整

    • public static double pow (double a, double b) 获取a的b次幂

    • public static long round (double a) 四舍五入取整

    • public static int max (int a, int b) 返回两个 int 值中较大的一个

    • public static int min (int a, int b) 返回两个 int 值中较小的一个

六、System类

  1. 概述

    • java.lang.System 可以获取与系统相关的信息或系统级操作的工具类。

    • System类构造方法被私有修饰,不能创建对象,通过类名调用内部静态内容即可。

  2. 常用方法

    • public static void exit (int status) 终止当前运行的Java虚拟机,非零表示异常终止,可以设计-1等数字分别代表什么原因终止

    • public static long currentTimeMillis () 返回当前时间(以毫秒为单位),类型是 long ,长整型

七、BigDecimal类

  1. 概述

    • java.math.BigDecimal 为浮点数提供精准计算的类

    • 小数转换成二进制存储到计算机中,在参与运算的过程中会出现丢失精度的现象,比如直接打印两个小数,打印出来的不是我们认为的结果,2.1+1.3,应该是等于3.4,但是打印出来很长一串,因为计算机会把它转换成二进制再算,会丢失后面的位数。

  2. 构造方法

    • BigDecimal (double val) 将double类型的数据封装为BigDecimal对象(不推荐使用,不能解决精度丢失的问题)。

    • BigDecimal (String val) 将 BigDecimal 的字符串表示形式转换为 BigDecimal。(val必须是小数样式的字符串 “10.0”)。

  3. 常用方法

    • 加法运算 public BigDecimal add (BigDecimal value)

    • 减法运算 public BigDecimal subtract (BigDecimal value)

    • 乘法运算 public BigDecimal multiply (BigDecimal value)。

    • 除法运算 public BigDecimal divide (BigDecimal value) 不推荐,也是不能解决精度丢失的问题

    • 除法运算 public BigDecimal divide (BigDecimal divisor, int scale, RoundingMode roundingMode)

在这里插入图片描述

八、Arrays

  1. 常用的打印数组和排序方法,还有很多方法,直接查API。

    package com.itheima.demo10_Arrays;
    
    import java.util.Arrays;
    import java.util.Collections;
    
    public class Test {
        public static void main(String[] args) {
            int[] arr = {1, 4, 2};
            System.out.println(Arrays.toString(arr));//打印数组
    
            Integer[] arr2 = {22, 11, 55, 78, 1, 99}; 
    
            Arrays.sort(arr);   //默认升序
            System.out.println(Arrays.toString(arr));  
            Arrays.sort(arr2, Collections.reverseOrder()); //降序排序,注意数组必须是包装类的类型!
            System.out.println(Arrays.toString(arr2));
        }
    }
    
    

网站公告

今日签到

点亮在社区的每一天
去签到