JAVA的常用API(下)

文章详细介绍了Java中的Math类,包括其提供的各种数学运算方法如绝对值、取整、随机数生成等。接着讨论了System类的静态方法,如exit和currentTimeMillis。然后提到了Object类的重要方法toString和equals,以及如何重写它们以满足特定需求。最后,文章深入讲解了BigDecimal类,强调了其用于精确数值计算的构造方法和四则运算,并讨论了除法运算的舍入模式。
摘要由CSDN通过智能技术生成

1.Math

Math中没有构造方法类的成员都是静态的(static修饰),通过类名就可以直接调用

Math类中包含执行基本数字运算的方法,如基本指数,对数,平方根和三角函数。

方法名说明
public static int abs(int a)获取参数a的绝对值
public static double ceil(double a) [ce’l]向上取整
public static double floor(double a)向下取整
public static long round(double a)四舍五入取整
public static int max(int a,int b)返回两个数中较大值
public static int min(int a,int b)返回两个数中较小值
public static double pow(double a,double b)获取a的b次幂
public static double random()返回值为double类型随机数 [0.0~1.0)
public class MathDemo {
    public static void main(String[] args) {
        //1、public static int abs(int a)	获取参数a的绝对值
        int abs=Math.abs(-10);
        System.out.println(abs); //10

        //2、public static double ceil(double a)	向上取整
        double ceil=Math.ceil(12.01);
        System.out.println(ceil); //13.0

        //3、public static double floor(double a)	向下取整
        double floor=Math.floor(12.99);
       System.out.println(floor);//12.0

        //4、public static long round(double a)	四舍五入取整
        double round=Math.round(12.5);
        System.out.println(round); //13

        //5、public static int max(int a,int b)	返回两个数中较大值
        int max=Math.max(10,20);
        System.out.println(max); //20

        //6、public static int min(int a,int b)	返回两个数中较小值
        int min=Math.min(10,20);
        System.out.println(min); //10

        //7、public static double pow(double a,double b)	获取a的b次幂
        double pow=Math.pow(2,3);
        System.out.println(pow); //8.0

        //8、public static double random()	返回值为double类型随机数 [0.0~1.0)
        System.out.println(Math.random());
    }
}

2.System

System被静态修饰,不能被实例化但可以使用类名.方法名的方式调用静态方法。

方法名说明
public static void exit(int status)终止JVM虚拟机,非 0 是异常终止
public static long currentTimeMillis()返回当前时间(以毫秒为单位)
arraycopy(数组copy)(数据源数组,目的地数组,起始索引,拷贝个数)
import java.text.SimpleDateFormat;

public class SystemDemo {
    public static void main(String[] args) {
        /*
        System.out.println("开始"); //开始
        //1、public static void exit(int status)	终止JVM虚拟机,非 0 是异常终止
        System.exit(0);
        System.out.println("结束"); //没有输出结束
        */
        /*
        //2、public static long currentTimeMillis()	返回当前时间(以毫秒为单位)
        //long start=System.currentTimeMillis();//获取当前时间
        //System.out.println(System.currentTimeMillis());
        //SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss EEE a");
        //System.out.println(sdf.format(start)); //2023年05月25日 22:49:15 星期四 下午
        //for (int i=0;i<10000;i++) {
        //    System.out.println(i);
        //}
        //long end=System.currentTimeMillis();//获取当前时间
        //System.out.println(end-start);//58---当前for循环的运行时间
        */
        //arraycopy(数据源数组,目的地数组,起始索引,拷贝个数)  数组copy
        int [] arr1 = {1,2,3,4,5};
        int [] arr2 =new int[10];
        //把arr1中的数据拷贝到arr2中
        System.arraycopy(arr1,0,arr2,0,arr1.length);
        for(int i=0;i<arr2.length;i++){
            System.out.println(arr2[i]);//1 2 3 4 5 0 0 0 0 0
        }
    }
}

3.Object

Object类是类层次结构的根。
每个类都有Object作为超类(父类)。 所有对象(包括数组)都实现了这个类的方法。

该类所具备的方法,所有类都会有一份

object类常用方法:

方法名描述
public String toString​()返回对象的字符串表示形式,建议所以子类重写该方法,自动生成
public boolean equals​(Object obj)指示一些其他对象是否等于此(即作为参数的对象是否与方法调用的对象是一同一个对象)。默认比较地址值,重写可以比较内容,自动生成

1.tostring

重写toString方法的方式

1.Alt + Insert 选择toString

2.在类的空白区域,右键 -> Generate -> 选择toString

public String toString()

  • 默认是返回当前对象在堆内存中的地址信息
  • 直接输出对象名称,默认会调用 toString()方法,所以直接输出对象可以省略 toString()
  • 所以 toString() 存在的意义是为了被子类重写,以便能够返回对象的数据内容输出
  • 看方法的源码:选中方法,按Ctrl+B

public 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;
    }

    //自动生成重写toString()方法;Fn+Alt+Insert  -> generate -> toString 
    @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(23);
        System.out.println(s); //Student@1b6d3586
        System.out.println(s.toString()); //Student@1b6d3586
        //重写后输出
        /*源码
        Student{name='好厚米', age=23}
        Student{name='好厚米', age=23}*/

        //选中方法Ctrl+B查看方法源码
        /*public void println(Object x) { //1、x = s
            String s = String.valueOf(x);
            synchronized (this) {
                print(s);
                newLine();
            }
        }*/

        /*public static String valueOf(Object obj) { //2、obj = x
            return (obj == null) ? "null" : obj.toString();
        }*/

        /*public String toString() { //3、
            return getClass().getName() + "@" + Integer.toHexString(hashCode()); //所以重写前才会输出ceshi.Student@1b6d3586
        }*/
    }
}

2.equals

重写equals方法的方式

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

不希望比较对象的地址值,想要结合对象属性进行比较的时候使用。

public boolean equals(Object o)

  • 默认是比较两个对象的地址是否相同,相同返回true
  • 直接比较两个对象的地址是否完全相同,可以用"=="替代equals
  • 所以 equals 存在的意义是为了被子类重写

public 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;
    }

    //自动生成重写equals()方法
    @Override
    public boolean equals(Object o) {
        //this--s1
        //o--s2
        if (this == o) return true; //1、比较地址是否相同,如果相同就是同一个对象,直接返回true
        //2、先判断参数是否为null;判断连个对象是否来自同一个类;一个满足就返回false
        if (o == null || getClass() != o.getClass()) return false;
        //向下转型
        Student student = (Student) o; //student = s2;
        //3、比较年龄是否相同,年龄相同往下走
        if (age != student.age) return false;
        //比较名字是否相同,s1的name不是null才能取调方法
        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(20);

        Student s2 = new Student();
        s2.setName("好厚米");
        s2.setAge(20);

        //比较两个对象内容是否相等
        System.out.println(s1.equals(s2)); //重写前:false ; 重写后:true
        /*public boolean equals(Object obj) {
            //this---s1
            //obj---s2
            return (this == obj); //重写前==比较的是地址值,不是内容需要重写equals()方法
        }*/

    }
}

4.Objects

tostring

方法名描述
static String toString​(Object o)返回非 null参数调用 toString的结果和 null参数的 "null"的 null 。
static String toString​(Object o, String nullDefault)如果第一个参数不是 null ,则返回第一个参数上调用 toString的结果,否则返回第二个参数(即当对象为null时给个默认值)。
static boolean isNull​(Object obj)返回 true如果提供的引用是 null,否则返回 false 。
static boolean nonNull​(Object obj)返回 true如果提供的参考是非 null,否则返回 false 。
import java.util.Objects;

public class MyObjcects {
    public static void main(String[] args){
//        public static  String toString(对象)   返回参数中对象的字符串表示形式。如果对象为空,则返回第二个参数。
      //  Student s=new Student("小罗同学",50);
      //  String result= Objects.toString(s);
      //  System.out.println(result);
//        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;  //true
       // Student s=new Student();  //false
       // boolean result=Objects.isNull(s);
       // System.out.println(result);
//        public static Boolean nonNull(对象)   判断对象是否不为空
        // Student s=null;  //false
         Student s=new Student();  //true
         boolean result=Objects.isNull(s);
         System.out.println(result);
    }
}

 5.BigDecimal

1.构造方法

方法名描述
BigDecimal​(int val)将 int翻译成 BigDecimal 。
BigDecimal​(double val)将 double转换为 BigDecimal ,它是 double的二进制浮点值的精确十进制表示。
BigDecimal​(long val)将 long翻译成 BigDecimal 。
BigDecimal​(String val)将 字符串表示转换为 BigDecimal 。

注意:建议使用String形参的构造方法!!不建议使用double形参的构造方法,因为其有一定的不可预知性,即给定一个double值,在计算机中其展示出来的可能不是你原来给定的那样精确的值。

import java.math.BigDecimal;

public class MyBigDecimal {
    public static void main(String [] args) {
        BigDecimal num1 = new BigDecimal(15);//int形参
        System.out.println(num1);
        BigDecimal num2 = new BigDecimal(15L);//long形参
        System.out.println(num2);
        BigDecimal num3 = new BigDecimal(159.68);//double形参,给的是159.68,但结果不一样
        System.out.println(num3);
        BigDecimal num4 = new BigDecimal("15");//String形参
        System.out.println(num4);
    }
}

2.四则运算

方法名描述
public BigDecimal add(BigDecimal augend)加法
public BigDecimal subtract (BigDecimal augend)减法
public BigDecimal multiply (BigDecimal augend)乘法
public BigDecimal divide (BigDecimal augend)除法
public BigDecimal divide (BigDecimal augend,精确几位,舍入模式)除法(当除不尽时使用)

当需要精确运算时,需要用string 的构造方法 

import java.math.BigDecimal;
import java.math.RoundingMode;

public class MyBigDecimal {
    public static void main(String [] args) {
        //构造方法重载了,但常用String形参的构造方法创建,因为更精确
        BigDecimal bd1 = new BigDecimal("0.17");
        BigDecimal bd2 = new BigDecimal("0.3");
        System.out.println(bd1.add(bd2));
        System.out.println(bd1.subtract(bd2));
        System.out.println(bd1.multiply(bd2));
        //用三个参数的divide方法 divide(BigDecimal divisor, int scale, RoundingMode roundingMode)
        //第二个参数表示精确的范围即小数点后几位,第三个参数可以设置进位模式等
        System.out.println(bd1.divide(bd2, 5, RoundingMode.DOWN));

    }
}

如果进行除法运算的时候,结果不能整除,有余数,这个时候会报java.lang.ArithmeticException: 

在进行除法运算的时候,针对可能出现的小数产生的计算,必须要多传两个参divide(BigDecimal,保留小数点后几位小数,舍入模式)

舍入模式

ROUND_CEILING    //向正无穷方向舍入
ROUND_DOWN    //向零方向舍入
ROUND_FLOOR    //向负无穷方向舍入
ROUND_HALF_DOWN    //向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,向下舍入, 例如1.55 保留一位小数结果为1.5
ROUND_HALF_EVEN    //向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,如果保留位数是奇数,使用ROUND_HALF_UP,如果是偶数,使用ROUND_HALF_DOWN
ROUND_HALF_UP    //向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,向上舍入, 1.55保留一位小数结果为1.6,也就是我们常说的“四舍五入”
ROUND_UNNECESSARY    //计算结果是精确的,不需要舍入模式
ROUND_UP    //向远离0的方向舍入
 

import java.math.BigDecimal;
public class MyBigDecimal {
    public static void main(String [] args) {
        BigDecimal bd1=new BigDecimal("10.0");
        BigDecimal bd2=new BigDecimal("3.0");
        //进一法  BigDecimal.ROUND_UP  3.34
        //去尾法  BigDecimal.ROUND_FLOOR  3.33
        //四舍五入  BigDecimal.ROUND_HALF_UP  3.33
        BigDecimal divide=bd1.divide(bd2,2,BigDecimal.ROUND_HALF_UP);
        System.out.println(divide);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值