API常用方法,学习记录

day04-API

今日内容

  • Math
  • System
  • Object
  • Objects
  • BigDecimal
    • 金融,银行(钱) ,高精度运算
  • 基本数据类型包装类-Integer (day05)

今日目标

  • 能够熟练使用Math类中的常见方法
  • 能够熟练使用System类中的常见方法
  • 能够理解Object类的常见方法作用
  • 能够熟练使用Objects类的常见方法
  • 能够熟练使用BigDecimal类的常见方法
  • 能够理解基本类型包装类的常见方法

1.常用API

1.1 Math(应用)

  • 1、Math类概述

    • Math 包含执行基本数字运算的方法
  • 2、Math中方法的调用方式

    • Math类中无构造方法,但内部的方法都是静态的,则可以通过 类名.进行调用
  • 3、Math类的常用方法

    方法名 方法名说明
    public static int abs(int a)返回参数的绝对值
    public static double ceil(double a)返回大于或等于参数的最小double值,等于一个整数
    public static double floor(double a)返回小于或等于参数的最大double值,等于一个整数
    public static int round(float a)按照四舍五入返回最接近参数的int
    public static int max(int a,int b)返回两个int值中的较大值
    public static int min(int a,int b)返回两个int值中的较小值
    public static double pow (double a,double b)返回a的b次幂的值
    public static double random()返回值为double的正值,[0.0,1.0)

1.2 System(应用)

  • System类的常用方法

    方法名说明
    public static void exit(int status)终止当前运行的 Java 虚拟机,非零表示异常终止
    public static long currentTimeMillis()返回当前时间(以毫秒为单位)
    static arraycopy(源数组,源数组起始索引,目的地数组,目的地数组起始索引,拷贝个数)数组copy
  • 示例代码

    • 需求:在控制台输出1-10000,计算这段代码执行了多少毫秒
    public class SystemDemo {
        public static void main(String[] args) {
            // 获取开始的时间节点
            long start = System.currentTimeMillis();
            for (int i = 1; i <= 10000; i++) {
                System.out.println(i);
            }
            // 获取代码运行结束后的时间节点
            long end = System.currentTimeMillis();
            System.out.println("共耗时:" + (end - start) + "毫秒");
        }
    }
    

1.3 Object类的toString方法(应用)

  • Object类概述

    • Object 是类层次结构的根,每个类都可以将 Object 作为超类。
  • 所有类都直接或者间接的继承自该类,该类所具备的方法,所有类都会有一份

  • System.out.println(对象)的源代码

public void println(Object x) {
    String s = String.valueOf(x);
}

public static String valueOf(Object obj) {
    return (obj == null) ? "null" : obj.toString();
}
public String toString() {
    return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
  • Object类中的toString方法
public String toString() {
    // getClass().getName(): 全类名(包名+类名)
    // "@" 固定值
    // Integer.toHexString(hashCode()) 地址值
    return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
  • 不打印地址值,打印对象的属性值

    • 重写toString方法的方式
    • Alt + Insert 选择toString
    • 在类的空白区域,右键 -> Generate -> 选择toString
    • idea插件,ptg,在类的空白区域 右键 – > ptg to JavaBean
    • 如果对于idea生成的格式不满意,自行修改
  • 示例代码:

    class Student extends Object {
        private String name;
        private int age;
    
        public Student() {
        }
    
        public Student(String name, int age) {
            this.name = name;
            this.age = age;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
    
        @Override
        public String toString() {
            return "Student{" +
                    "name='" + name + '\'' +
                    ", age=" + age +
                    '}';
        }
    }
    public class ObjectDemo {
        public static void main(String[] args) {
            Student s = new Student();
            s.setName("林青霞");
            s.setAge(30);
            System.out.println(s); 
            System.out.println(s.toString()); 
        }
    }
    
  • 运行结果:

    Student{name='名字', age=30}
    Student{name='名字', age=30}
    
小结
  • System.out.println(对象) ,源代码中调用对象的toString方法
  • 对象的toString方法 继承自Object
  • Object的toString方法默认打印的就是地址值
  • 如果不想打印地址,打印属性 ,重写

1.4 Object类的equals方法(应用)

  • equals方法的作用

    • 用于对象之间的比较,返回true和false的结果
    • 举例:s1.equals(s2); s1和s2是两个对象
  • Object类中equals方法默认比较地址值

  • 重写equals方法的场景

    • 不希望比较对象的地址值,想要结合对象属性进行比较的时候。
  • 重写equals方法的方式

      1. alt + insert 选择equals() and hashCode(),IntelliJ Default,一路next,finish即可
      1. 在类的空白区域,右键 -> Generate -> 选择equals() and hashCode(),后面的同上。
  • 示例代码:

    class Student {
        private String name;
        private int age;
    
        public Student() {
        }
    
        public Student(String name, int age) {
            this.name = name;
            this.age = age;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
    
        @Override
        public boolean equals(Object o) {
            //this -- s1
            //o -- s2
            if (this == o) return true;
            if (o == null || getClass() != o.getClass()) return false;
    
            Student student = (Student) o; //student -- s2
    
            if (age != student.age) return false;
            return name != null ? name.equals(student.name) : student.name == null;
        }
    }
    public class ObjectDemo {
        public static void main(String[] args) {
            Student s1 = new Student();
            s1.setName("林青霞");
            s1.setAge(30);
    
            Student s2 = new Student();
            s2.setName("林青霞");
            s2.setAge(30);
    
            //需求:比较两个对象的内容是否相同
            System.out.println(s1.equals(s2));
        }
    }
    
    
  • 面试题

    // 看程序,分析结果
    String s = “abc”;
    StringBuilder sb = new StringBuilder(“abc”);
    s.equals(sb); 
    sb.equals(s); 
    
    public class InterviewTest {
        public static void main(String[] args) {
            String s1 = "abc";
            StringBuilder sb = new StringBuilder("abc");
            //1.此时调用的是String类中的equals方法.
            //保证参数也是字符串,否则不会比较属性值而直接返回false
            //System.out.println(s1.equals(sb)); // false
    
            //StringBuilder类中是没有重写equals方法,用的就是Object类中的.
            System.out.println(sb.equals(s1)); // false
        }
    }
    

1.5 Objects (应用)

  • 常用方法

    • Objects 提供操作对象的工具类
    • 绝大多数方法都是用来避免空指针异常
    方法名说明
    public static String toString(对象)返回参数中对象的字符串表示形式。
    public static String toString(对象, 默认字符串)返回对象的字符串表示形式。
    public static Boolean isNull(对象)判断对象是否为空
    public static Boolean nonNull(对象)判断对象是否不为空
    public static boolean equals(对象1,对象2)比较两个对象是否相同
  • 示例代码

    学生类

    class Student {
          private String name;
          private int age;
    
          public Student() {
          }
    
          public Student(String name, int age) {
              this.name = name;
              this.age = age;
          }
    
          public String getName() {
              return name;
          }
    
          public void setName(String name) {
              this.name = name;
          }
    
          public int getAge() {
              return age;
          }
    
          public void setAge(int age) {
              this.age = age;
          }
    
          @Override
          public String toString() {
              return "Student{" +
                      "name='" + name + '\'' +
                      ", age=" + age +
                      '}';
          }
      }
    

    测试类

    public class MyObjectsDemo {
              public static void main(String[] args) {
          //        public static String toString(对象): 返回参数中对象的字符串表示形式。
          //        Student s = new Student("小罗同学",50);
          //        String result = Objects.toString(s);
          //        System.out.println(result);
          //        System.out.println(s);
    
          //        public static String toString(对象, 默认字符串): 返回对象的字符串表示形式。如果对象为空,那么返回第二个参数.
                  //Student s = new Student("小花同学",23);
          //        Student s = null;
          //        String result = Objects.toString(s, "随便写一个");
          //        System.out.println(result);
          
          //        public static Boolean isNull(对象): 判断对象是否为空
                  //Student s = null;
          //        Student s = new Student();
          //        boolean result = Objects.isNull(s);
          //        System.out.println(result);
    
          //        public static Boolean nonNull(对象): 判断对象是否不为空
                  //Student s = new Student();
                  Student s = null;
                  boolean result = Objects.nonNull(s);
                  System.out.println(result);
              }
      }
    

1.6 BigDecimal (应用)

  • 作用

    可以用来进行精确计算

  • 构造方法

    注意: 创建BigDecimal对象的时候推荐使用String类型的参数

    第二种方式

    ​ public static BigDecimal valueOf(double val)

    方法名说明
    BigDecimal(String val)参数为String
  • 常用方法

    注意: 以下方法会将运算后的结果返回一个新的BigDecimal对象

    方法名说明
    public BigDecimal add(另一个BigDecimal对象)加法
    public BigDecimal subtract (另一个BigDecimal对象)减法
    public BigDecimal multiply (另一个BigDecimal对象)乘法
    public BigDecimal divide (另一个BigDecimal对象)除法
    public BigDecimal divide (另一个BigDecimal对象,精确几位,舍入模式)除法
  • 总结

    1. BigDecimal是用来进行精确计算的
    2. 创建BigDecimal的对象,构造方法使用参数类型为字符串的。
    3. 四则运算中的除法,如果除不尽请使用divide的三个参数的方法。

    代码示例:

    BigDecimal divide = bd1.divide(参与运算的对象,小数点后精确到多少位,舍入模式);
    参数1 ,表示参与运算的BigDecimal 对象。
    参数2 ,表示小数点后面精确到多少位
    参数3 ,舍入模式  
      BigDecimal.ROUND_UP --  向上取整   -- RoundingMode.UP
      BigDecimal.ROUND_DOWN -- 向下取整  -- RoundingMode.DOWN
      BigDecimal.ROUND_HALF_UP -- 四舍五入 -- RoundingMode.HALF_UP
        
     @Deprecated(since="9")9版本的时候过时了,过时并不是表示不能用了
        出现了新的方式代替
        过时方式,有可能在将来的某个版本移除
    

2.基本数据类型包装类

2.1 概述

  • 所在的包java.lang
  • 包装类:基本数据类型都有对应的引用数据类型
    • 好处:调用方法、操作属性
      • Integer中有两个静态变量
        • Integer.MAX_VALUE:int类型的最大值
        • Integer.MIN_VALUE:int类型的最小值
基本数据类型包装类
byteByte
shortShort
intInteger
longLong
floatFloat
doubleDouble
charCharacter
booleanBoolean

2.2Integer-获得对象

  • 构造方法:已过时
  • 静态方法:常用
方法名说明
public Integer(int value)根据 int 值创建 Integer 对象(过时)
public Integer(String s)根据 String 值创建 Integer 对象(过时)
public static Integer valueOf(int i)返回表示指定的 int 值的 Integer 实例
public static Integer valueOf(String s)返回一个保存指定值的 Integer 对象 String

2.3 Integer-自动拆箱和自动装箱

  • JDK 5版本的特性:基本数据类型和对应的包装类类型自动互相转换
  • 装箱: 把一个基本数据类型 转换对应的包装类.
  • 拆箱:把一个包装类型 转换对应的基本数据类型
  • 引用数据类型可以赋值为null
public class MyIntegerDemo3 {
    public static void main(String[] args) {
        
        Integer i1 = 100; // 自动装箱,调用valueOf方法
        System.out.println(i1);

        
        int i2 = i1; // 自动拆箱,调用了intValue方法
        System.out.println(i2);

        Integer i3 = 100; // 自动装箱,调用valueOf方法
        i3 += 200; 
        // i3 = i3 + 200
        // 1.i3 自动拆箱 int类型
        // 2.加法运算  
        // 3.自动装箱 
        System.out.println(i3);


     
        Integer i4 = null;
        if(i4 != null){
            i4 += 200;
            System.out.println(i4);
        }


    }
}
自动拆箱和装箱内存图

2.4 类型转换

  • Integer 转 String
    • int类型+“”:字符串+任意数据类型 字符串的拼接
    • String.valueOf(int类型)
  • String 转 Integer
    • Integer.parseInt(字符串) 返回Integer类
    • 注意:字符串必须要是数字 否则报异常:NumberFormatException

2.5Integer-练习

  • 需求:有一个字符串:“91 27 46 38 50”,把其中的每一个数存到int类型的数组中
  • 步骤
    • 定义一个字符串
    • 分割字符串到字符串数组 {“91”,“27”,“46”,“38”,“50”}
    • 创建int类型数组
    • 将字符串数组中的每一个元素转换成int类型并存入int类型数组
    • 遍历int类型数组
public class Test {
    public static void main(String[] args) {
        // 1.定义一个字符串
        String str = "91 27 46 38 50";
        //2.分割字符串到字符串数组 {"91","27","46","38","50"}
        String[] strArr = str.split(" ");
        //3.创建int类型数组,长度和字符串数组的长度是一致的
        int[] intArr = new int[strArr.length];
        //4.将字符串数组中的每一个元素转换成int类型并存入int类型数组
        for (int i = 0; i < strArr.length; i++) {
//            intArr[i] = Integer.parseInt(strArr[i]);
            String s = strArr[i];
            int i1 = Integer.parseInt(s);
            intArr[i] = i1;
        }
        //5.遍历int类型数组
        for (int i = 0; i < intArr.length; i++) {
            System.out.println(intArr[i]);
        }
    }
}

2.6 Integer面试题

  • 结论
    • Integer 记录的值 在-128~127 之间的,使用已有的地址
    • Integer 记录的值不在-128~127 之间的 ,新建一个对象
  • 建议
    • 引用数据类型比较内容,都用equals方法
public class IntegerTest2 {
    /*
        看程序 ,说结果,说明原因

        Integer 记录的值 在-128~127 之间的,使用已有的地址
        Integer 记录的值不在-128~127 之间的 ,新建一个对象


        建议,引用数据类型比较内容,都用equals方法
     */
    public static void main(String[] args) {
        Integer i1 = 127; // 自动装箱 valueOf()
        Integer i2 = 127;
        System.out.println(i1 == i2); // true

        Integer i3 = 128;
        Integer i4 = 128;
        System.out.println(i3 == i4); // false

        System.out.println("---------------------------");
        System.out.println(i1.equals(i2));
        System.out.println(i3.equals(i4));
    }

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值