Java笔记_11(常用API)

Java笔记_11

  • 一、常用的API
    • 1.1、Math
      • Math练习
    • 1.2、System
    • 1.3、Runtime
    • 1.4、Object
    • 1.5、浅克隆、深克隆
    • 1.6、对象工具类的Objects

一、常用的API

1.1、Math

  • 是一个帮助我们进行数学计算的工具类
  • 私有化构造方法,所有的方法都是静态的

Math类的常用方法

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

Math练习

  • 判断是否为质数
public static boolean isProme(int a){

        for (int i = 1; i <Math.sqrt(a) ; i++) {
            if(a%i==0){
                return false;
            }
        }
        return true;
    }
  • 获取四叶玫瑰数
int count = 0;
        for (int i = 1000; i < 9999; i++) {
            int ge = i%10;
            int shi = i/10%10;
            int bai = i/100%10;
            int qian = i/1000%10;

            double sum = Math.pow(ge,4)+Math.pow(shi,4)+Math.pow(bai,4)+Math.pow(qian,4);

            if(sum==i){
                count++;
                System.out.println(i);
            }
        }
        System.out.println(count);

1.2、System

  • System也是工具类,提供一些与系统相关的方法

计算机中的时间原点

1970年1月1日 08:00:00
我国在东八区,有八小时的时差

原因:
1969年8月,贝尔实验室的程序员肯汤普逊利用妻儿离开一个月的机会。开始着手创造一个全新的革命性的操作系统。他使用B编译语言在老旧的PDP-7机器上开发出了Unix的一个版本。随后,汤普逊和同事丹尼斯里奇改进了B语言,开发出了C语言,重写了UNIX。

1970年1月1日 算C语言的生日

  • 1秒 = 1000毫秒
  • 1毫秒 = 1000微秒
  • 1微秒 = 1000纳秒
方法名 说明
public static void exit(int status) 终止当前运行的Java虚拟机
public static long currentTimeMillis() 返回当前系统的时间毫秒值形式
public static void arraycopy(数据源数组,起始索引,目的地索引,起始索引,拷贝个数) 数组拷贝

使用arraycopy时注意事项:

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

1.3、Runtime

  • Runtime表示当前虚拟机的运行环境
方法名 说明
public static Runtime getRuntime() 当前系统的运营环境对象
public void exit(int status) 停止虚拟机
public int availableProcessors() 获得CPU的线程数
public long maxMemory() JVM能从系统中获取总内存大小(单位byte)
public long totalMemory() JVM已经从系统中获取总内存大小(单位byte)
public long freeMemory() JVM剩余内存大小(单位byte)
public Process exec(String command) 运行cmd命令

exec命令关机 shutdown(加上参数才能执行)

  1. -s :默认在1分钟之后关机
  2. -s -t 指定时间:指定关机时间
  3. -a :取消关机操作
  4. -r :关机并重启

1.4、Object

  • Object是Java中的顶级父类。所有的类都直接或间接的继承于Object类。
  • Object类中的方法可以被所有子类访问,所以我们要学习Object类和其中的方法
方法名 说明
public String toString() 返回对象的字符串表示形式
public boolean equals(object obj) 比较两个对象是否相等
protected object clone(int a) 对象克隆

println():方法

  • 参数:表示打印的对象
  • 核心逻辑:当我们打印一个对象的时候,底层会调用对象的toString方法,把对象变成字符串。然后再打印在控制台上,打印完毕换行处理。

toString方法结论:

  1. 如果我们打印一个对象,想要看到属性值的话,那么就重写tostring方法就可以了。
  2. 在重写的方法中,把对象的属性值进行拼接。

equals方法结论:

  1. 如果没有重写equals方法,那么默认使用object中的方法进行比较,比较的是地址值是否相等
  2. 一般来讲地址值对于我们意义不大,所以我们会重写,重写之后比较的就是对象内部的属性值了。

String中的equals方法

  • 先判断参数是否为字符串如果是字符串,再比较内部的属性
  • 但是如果参数不是字符串,直接返回false

StringBulider中的equals方法

  • 在StringBuilder当中,没有重写equals方法使用的是object中的在Object当中默认是使用==号比较两个对象的地址值

1.5、浅克隆、深克隆

  • 把A对象的属性值完全拷贝给B对象,也叫对象拷贝,对象复制

细节:

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

书写细节:

  1. 重写Object中的clone方法
  2. 让javabean类实现Cloneable接口
  3. 创建原对象并调用clone就可以了。

Cloneable

  • 如果一个接口里面没有抽象方法表示当前接口是一个标志性接口,现在Cloneable表示一旦实现了,那么当前类的对象就可以被克隆
  • 浅克隆
    Java笔记_11(常用API)_第1张图片
    Object中的克隆是浅克隆
    重写的代码块
protected Object clone() throws CloneNotSupportedException{
        //调用父类中的clone方法
        //相当于让java帮我们克隆一个对象,并把克隆之后的对象返回
        return super clone();
    }
  • 深克隆

Java笔记_11(常用API)_第2张图片
重写的clone()方法

protected Object clone() throws CloneNotSupportedException{
        //调用父类中的clone方法
        //相当于让java帮我们克隆一个对象,并把克隆之后的对象返回
        int[] data = this.data;
        int[] data2 = new int[data.length];

        for (int i = 0; i < data.length; i++) {
            data2[i] = data[i];
        }
        User u =(User) super.clone();
        u.data = data2;
        return u;
    }

1.6、对象工具类的Objects

方法名 说明
public static boolean equals(Object a,Object b) 先做非空判断,比较两个对象
public static boolean isNull(Object obj) 判断对象是否为null,为null返回true,反之
public static boolean nonNull(Object obj) 判断对象是否为null,跟isNull的结果相反

细节:

  1. 方法的底层会判断 第一个对象 是否为null,如果为null,直接返回false
  2. 如果 第一个对象 不为null,那么就利用 第一个对象 再次调用equals方法
  3. 此时 第一个对象设置的对象 类型,所以最终还是会调用 设置的对象 中的equals方法。
  4. 如果没有重写,比较地址值,如果重写了,就比较属性值。

你可能感兴趣的:(java,笔记,开发语言)