java基础---常用API

一、Math

Math:帮助我们进行数学计算的工具类
(1)私有化构造方法(不让外界创建它的对象)
(2)所有的方法都是静态的(可以通过类名直接调用)

public class demo1 {

    /*
    * public static int      abs(int a)                  获取参数绝对值
    * public static double   ceil(double a)              向上取整
    * public static double   floor(double a)             向下取整
    * public static int      round(float a)              四舍五入
    * public static int      max(int a,int b)            获取两个int值中的较大值
    * public static double   pow(double a,double b)      返回a的b次幂的值
    * public static double   sqrt(double a)              返回a的平方根
    * public static double   cbrt(double a)              返回a的立方根
    * public static double   random()                    返回值为double的随机值,范围[0.0,1.0)
    */

    public static void main(String[] args) {
        //abs 获取参数绝对值
        System.out.println(Math.abs(88));//88
        System.out.println(Math.abs(-88));//88

        //bug:
        //以int类型为例,取值范围:-2147483648~2147483647
        //如果没有正数与负数对应,那么传递负数结果有误
        //-2147483648 没有正数与之对应,所以abs结果产生bug
        //system.out.println(Math.abs(-2147483648));//-2147483648
        //System.out.println(Math.absExact(-2147483648));JDK15以后才有

        System.out.println("------------------------");

        //进一法,往数轴的正方向进一
        System.out.println(Math.ceil(12.34));//13.0
        System.out.println(Math.ceil(12.54));//13.0
        System.out.println(Math.ceil(-12.34));//-12.0
        System.out.println(Math.ceil(-12.54));//-12.0

        System.out.println("------------------------");

        //去尾法
        System.out.println(Math.floor(12.34));//12.0
        System.out.println(Math.floor(12.54));//12.0
        System.out.println(Math.floor(-12.34));//-13.0
        System.out.println(Math.floor(-12.54));//-13.0

        System.out.println("------------------------");

        // 四舍五入
        System.out.println(Math.round(12.34));//12
        System.out.println(Math.round(12.54));//13
        System.out.println(Math.round(-12.34));//-12
        System.out.println(Math.round(-12.54));//-13

        System.out.println("------------------------");

        //获取两个整数的较大值
        System.out.println(Math.max(20, 30));//30
        //获取两个整数的较小值
        System.out.println(Math.min(20, 30));//20
        // 获取a的b次幂
        System.out.println(Math.pow(2, 3));//8

        //细节:
        // 如果第二个参数 0 ~ 1之间的小数
        // system.out.println(Math.pow(4,0.5));//2.0
        // system.out.println(Math.pow(2,-2));//0.25

        //建议:
        //第二个参数:一般传递大于等于1的正整数。

        System.out.println("------------------------");
        System.out.println(Math.sqrt(4));//2.0
        System.out.println(Math.cbrt(8));//2.0

        System.out.println("------------------------");
        System.out.println(Math.floor(Math.random() * 100 + 1));//打印语句快捷方式最后面.sout
    }
}

两道数学题
(1)判断一个数是不是质数
在这里插入图片描述

public class demo1_test1 {

    public static void main(String[] args) {
        System.out.println(isPrime(100));
    }

    public static boolean isPrime(double number){
        for (int i = 2; i <= Math.sqrt(number); i++) {
            if(number % i != 0){
                return false;
            }
        }
        return true;
    }

}

(2)水仙花数

public class demo1_test2 {
    public static void main(String[] args) {
        for (int i = 100; i <= 999; i++) {
            int ge = i % 10;
            int shi = i / 10 % 10;
            int bai = i / 100 % 10;

            //判断
            //每一位的三次方之和跟自身比较
            double sum = Math.pow(ge,3) + Math.pow(shi,3) + Math.pow(bai, 3);
            if(sum==i){
                System.out.println(i);
            }
        }
    }
}

二、System

public static void exit(int status)终止当前运行的 Java 虚拟机

public static long currentTimeMillis()返回当前系统的时间毫秒值形式

public static void arraycopy(数据源数组,起始索引,目的地数组,起始索引,拷贝个数)数组拷贝

计算机中的时间原点:
1970年1月1日 00:00:00
1、
0:表示当前虚拟机是正常停止
非0:表示当前虚拟机异常停止

system.exit(0);

2、当前时间到时间原点的时间间隔(单位:毫秒)

long l = system.currentTimeMillis();

3、
参数一:数据源,要拷贝的数据从哪个数组而来
参数二:从数据源数组中的第几个索引开始拷贝
参数三:目的地,我要把数据拷贝到哪个数组中
参数四:目的地数组的索引
参数五:拷贝的个数

System.arraycopy(arr1,0,arr2,0,10);

细节:
1.如果数据源数组和目的地数组都是基本数据类型,那么两者的类型必须保持一致,否则会报错
2.在拷贝的时候需要考虑数组的长度,如果超出范围也会报错
3.如果数据源数组和目的地数组都是引用数据类型,那么子类类型可以赋值给父类类型

三、Runtime

		//1、获取Runtime的对象
        //Runtime r1 = Runtime.getRuntime();
        //2、exit 停止虚拟机
        //r1.exit(0);
        //3、获得CPU的线程数
        System.out.println(Runtime.getRuntime().availableProcessors());
        //4.总内存大小,单位byte字节
        System.out.println(Runtime.getRuntime().maxMemory()/1024 / 1024);//3156
        //5.已经获取的总内存大小,单位byte字节
        System.out.println(Runtime.getRuntime().totalMemory()/1024 /1024);//213
        //6.剩余内存大小
        System.out.println(Runtime.getRuntime().freeMemory()/1024 / 1024);//208
        //7.运行cmd命令
        Runtime.getRuntime().exec("notepad");

四、Object

1、toString

		//object 没有成员变量,所以只有空参构造
        Object obj = new Object();
        String str1 = obj.toString();
        System.out.println(str1);

        Student stu = new Student();
        String str2 = stu.toString();
        System.out.println(str2);

        //当我们打印一个对象的时候,底层会调用对象的tostring方法,把对象变成字符串。
        //然后再打印在控制台上,打印完毕换行处理。
        System.out.println(stu);
        //如果我们打印一个对象,想要看到属性值的话,那么就重写tostring方法就可以了。
        //在重写的方法中,把对象的属性值进行拼接。

student类

public 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) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Student student = (Student) o;
        return age == student.age &&
                Objects.equals(name, student.name);
    }


    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

2、equal

		Student s1 = new Student();
        Student s2 = new Student();
        boolean result1 = s1.equals(s2);
        System.out.println(result1);
        //结论:
        //1.如果没有重写equa1s方法,那么默认使用object中的方法进行比较,比较的是地址值是否相等
        //2.一般来讲地址值对于我们意义不大,所以我们会重写,重写之后比较的就是对象内部的属性值了。

        String s = "abc";
        StringBuilder sb = new StringBuilder("abc");
        System.out.println(s.equals(sb));
        System.out.println(sb.equals(s));
        // 字符串中的equals方法,先判断参数是否为字符串
        // 如果是字符串,再比较内部的属性//
        // 但是如果参数不是字符串,直接返回false

        // 在object当中默认是使用==号比较两个对象的地址值
        // 而这里的s和sb记录的地址值是不一样的

3、clone
细节:

方法在底层会帮我们创建一个对象,并把原对象中的数据拷贝过去。

书写细节:

(1).重写object中的clone方法。
在这里插入图片描述

(2).让javabean类实现Cloneable接口。
在这里插入图片描述

(3).创建原对象并调用clone就可以了。
在这里插入图片描述
4、浅克隆
在这里插入图片描述
5、深克隆
在这里插入图片描述
6、总结
object中的克隆是浅克隆。
在这里插入图片描述

五、Objects

1、equals

细节:

1.方法的底层会判断s1是否为nu11,如果为nu11,直接返回false

2.如果s1不为nu11,那么就利用s1再次调用equals方法

3.此时s1是student类型,所以最终还是会调用student中的equals方法。

4.如果没有重写,比较地址值,如果重写了,就比较属性值。

//1.创建学生类的对象
Student s1 = null;
Student s2= new student("zhangsan",23);
boolean result = objects.equals(s1,s2);
System.out.println(result);

2、isNull and nonNull

Student s3 = new student();
Student s4 = null;
System.out.println(objects.isNull(s3));//false
system.out.println(objects.isNull(s4));//true
System.out.println(objects.nonNull(s3);//true
System.out.println(Objects.nonNull(s4));//false

六、BigInteger

1、获取随机大整数

BigInteger bi = new BigInteger(4,new Random());//[0~2^4-1]

2、获取指定大整数

BigInteger bi2 = new BigInteger("999999999")//只接受字符串数字

3、静态方法获取BigInteger的对象,内部有优化

细节:

(1)能表示范围比较小,只能在long的取值范围之内,如果超出long的范围就不行了。

(2)在内部对常用的数字:-16~16 进行了优化。

(3)提前把-16~16 先创建好BigInteger的对象,如果多次获取不会重新创建新的。

BigInteger bi3 = BigInteger.valueOf(16);

4、小结
如果BigInteger表示的数字没有超出long的范围,可以用静态方法获取

如果BigInteger表示的超出long的范围,可以用构造方法获取。

对象一旦创建,BigInteger内部记三的值不能发生改变。只要进行计算都会产生一个新的BigInteger对象。

5、常用方法
(1)add 加 subtract 减 multiply 乘 divide 除
(2)

//1.创建两个BigInteger对象
BigInteger bd1= BigInteger.value0f(10);
BigInteger bd2=BigInteger.valueOf(3);

//2.加法
BigInteger bd3= bd1.add(bd2);
System.out.println(bd3);

//3.除法
BigInteger[] arr = bd1.divideandremainder(bd2);
System.out.println(arr[0]);
System.out.println(arr[1]);

//4.比较是否相同
boolean result = bd1.equals(bd2);
System.out.println(result);

//5.次幂
BigIntrger bd4 = bd1.pow(2);
system.out.println(bd4);

//6.max
BigInteger bd5 = bd1.max(bd2);

//7.转为int类型整数
BigInteger bd6 = BigInteger.valueOf(1000);
int i = bd6.intValue();

七、BigDecimal

1、由于计算机底层存储原理,表示的小数会不精确。所以使用BigDecimal精确表示小数和进行精确运算。
在这里插入图片描述
2、创建小数对象

//1.通过传递字符串表示的小数来创建对象
BigDecimal bd1 = new BigDecimal("0.01");
BigDecimal bd2 = new BigDecimal("0.09");
BigDecimal bd3 = bd1.add(bd2);
System.out.println(bd1);
System.out.println(bd2);
System.out.println(bd3);

//2.通过静态方法获取对象
BigDecimal bd6 = BigDecimal.value0f(10);//10.0
System.out.println(bd6);

//细节:
//1.如果要表示的数字不大,没有超出double的取值范围,建议使用静态方法
//2.如果要表示的数字比较大,超出了double的取值范围,建议使用构造方法
//3.如果我们传递的是0~10之间的整数,包含0,包含10,那么方法会返回已经创建好的对象,不会重新new

3、常用方法(和BigInteger类似)
在这里插入图片描述
小数保留方式
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值