[JavaSE](API,API文档使用、Math、System、Object、重写(toString、equals)、Objects)

 ✨✨个人主页:沫洺的主页

📚📚系列专栏: 📖 JavaWeb专栏📖 JavaSE专栏 📖 Java基础专栏📖vue3专栏 

                           📖MyBatis专栏📖Spring专栏📖SpringMVC专栏📖SpringBoot专栏

                           📖Docker专栏📖Reids专栏📖MQ专栏📖SpringCloud专栏     

💖💖如果文章对你有所帮助请留下三连✨✨

🍃API

什么是API

API(Application Programming Interface),即应用程序编程接口。是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件的以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。

 API就是我们设计程序用的接口和方法,API文档就是API接口的使用说明;接口是一种特殊的类。

Java API文档

 API文档一般叫做API帮助文档

链接:https://pan.baidu.com/s/1NgM50O0X71Qm6LncPyReiw?pwd=wznb 
提取码:wznb 

打开后

使用API帮助文档的注意事项

  • 如何创建这个类的对象
  • 调用方法、参数、返回值
  • 静态方法: 类.方法名();

🌾Math

注意: java.lang下的类不需要导包,但是其他包需要导包

 常用的方法

public static int  abs(int a)                                 返回参数的绝对值
public static double ceil(double a)                    向上取整
public static double floor(double a)                   向下取整
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)

🌻System

 常用方法

public static void exit​(int status)                 终止当前运行的 Java 虚拟机,非零表示异常终止

public static long currentTimeMillis​()         返回当前时间(以毫秒为单位)

arraycopy(数据源数组, 起始索引, 目的地数组, 起始索引, 拷贝个数);        数组copy

package moming10;

import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;

public class systemDemo{
    public static void main(String[] args) {
        //arraycopy(数据源数组, 起始索引, 目的地数组, 起始索引, 拷贝个数);
        int[] arr = new int[]{1,2,3,4,5,6,7,8,9};//数据源数组
        int[] newArr = new int[arr.length];//目的地数组,由于数组长度是固定的,所以和arr长度一样就行
        System.arraycopy(arr,0,newArr,0,arr.length);//拷贝arr.length个
        System.out.println(Arrays.toString(newArr));//输出

        long l = System.currentTimeMillis();//获取当前时间的时间戳
        System.out.println(l);
        System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date(l)));

        System.exit(0);//这个status表示退出的状态码,非零表示异常终止。
        System.out.println("虚拟机停止,所以这句话就不执行了");
    }
}
[1, 2, 3, 4, 5, 6, 7, 8, 9]
1660211578969
2022-08-11 17:52:58

System.exit(0): 

  • 正常退出,程序正常执行结束退出,Java GC进行垃圾回收,直接退出。
  • 在Swing开发中,一般用于Swing窗体关闭按钮。(重写windowClosing方法时调用System.exit(0)来终止程序,Window类的dispose()方法只是关闭窗口,并不会让程序退出)。

System.exit(1): 

  • 是非正常退出,就是说无论程序正在执行与否,都退出.
  • 如果为非0的话,如果这个方法被调用后,虚拟机已开始关闭序列如果关闭钩子正在运行,此方法将无限期阻塞。如果关将钩子运行完成,并且未调用的finalizers,在finalization-on-exit允许的情况下启动回收完成,虚拟机停止。
  • 一般在catch块中会使用(例如使用Apache的FTPClient类时,源码中推荐使用System.exit(1)告知连接失败),当程序会被脚本调用、父进程调用发生异常时需要通过System.exit(1)来告知操作失败,默认程序最终返回的值返是0,即然发生异常默认还是返回0,因此在这种情况下需要手工指定返回非零。

🌷​​​​​​​ Object

  • 所以类的祖类,一个类如果没有显示继承任何类,默认继承Object
  • Object类中的功能-所有的类都可以使用

🌹两个Java类常用的方法:toString、equals

💐​​​​​​​toString

作用: 将对象里面属性值拼接成字符串返回
注意: 定义Java类时如果重写了toString方法,返回的是属性值. 如果没有重写,返回的是地址值
结论: 定义Java类时啥都不用想,直接重写toString方法

类中没有重写toString方法时

Student类

package cn.moming10;

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

测试类

package cn.moming10;

public class Test {
    public static void main(String[] args) {
        Student student = new Student("沫洺",18);
        System.out.println(student);
        System.out.println(student.toString());
    }
}
cn.moming10.Student@3b07d329
cn.moming10.Student@3b07d329

注意:输出对象时默认调用toString方法

​ 

 其实不管参数是什么类型的,底层调用的都是toString方法。

可以看到输出的是地址值,那么为什么是地址值呢?

在Student类名上鼠标悬浮按下CTRL可以看到Student继承了Object,由于Student没有重写toString方法,所以调用的是Object的toString方法,输出地址值。

重写toString方法

ALT+INS(Insert) 

package cn.moming10;

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 String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}
package cn.moming10;

public class Test {
    public static void main(String[] args) {
        Student student = new Student("沫洺",18);
        System.out.println(student);
        System.out.println(student.toString());
    }
}

重写之后再次运行,输出结果

Student{name='沫洺', age=18}
Student{name='沫洺', age=18}

🌲equals

作用: 比较两个对象是否相等
注意: 定义Java类时如果重写了equlas方法,则比较的是属性值.如果没有重写,则比较的地址值
结论: 定义Java类时啥都不用想,直接重写equlas方法 

没有重写equals方法

package cn.moming10;

public class Test {
    public static void main(String[] args) {
        Student student1 = new Student("沫洺",18);
        Student student2 = new Student("沫洺",18);
        System.out.println(student1==student2);
        System.out.println(student1.equals(student2));
    }
}
false
false

==号在比较时比较的是值,对象而言就是地址值,而类没有重写equals方法,所以继承Object的equals方法,底层调用的就是==号;

Object的equals方法里只有一个return (this==obj),在代码中this指的是student,student2作为参数传进去就相当于obj,所以说底层还是student1==student2,比较地址值。

 重写equals方法

 

 

 

 

package cn.moming10;

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 String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", 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;

        if (age != student.age) return false;
        return name != null ? name.equals(student.name) : student.name == null;
    }

    @Override
    public int hashCode() {
        int result = name != null ? name.hashCode() : 0;
        result = 31 * result + age;
        return result;
    }
}
package cn.moming10;

public class Test {
    public static void main(String[] args) {
        Student student1 = new Student("沫洺",18);
        Student student2 = new Student("沫洺",18);
        System.out.println(student1==student2);
        System.out.println(student1.equals(student2));
    }
}

再次运行

false
true

解析重写后的equals()方法

package cn.moming10;

public class Test {
    public static void main(String[] args) {
        Student student1 = new Student("沫洺",18);
        Student student11 = (Student) student1;     //类型转换
        System.out.println(student1==student11);
        System.out.println(student11.equals(student1));

        Class<? extends Student> aClass = student1.getClass();//获取对象的数据类型
        System.out.println(aClass);
    }
}
true
true
class cn.moming10.Student

 补充

String类下的equals方法(已经对基类Object中的equals重写过了)

package cn.moming10;

public class Test {
    public static void main(String[] args) {
        String name1 ="沫洺";
        String name2= new String("沫洺");
        StringBuilder name3 = new StringBuilder("沫洺");

        System.out.println(name1==name2);//值是否相等
        System.out.println(name1.equals(name2));//String类下的equals比较多是内容
        System.out.println(name2.equals(name1));//String类下的equals比较多是内容
        System.out.println(name3.equals(name1));//StringBuilder类没有重写equals方法,调用的是Object下的equals方法,比较值
        System.out.println(name1.equals(name3));//name3不是String类型,无法比较,直接false
        System.out.println(name1.contentEquals(name3));//StringBuilder类下有比较内容的方法contentEquals
        System.out.println(name3.equals(name2));//StringBuilder类没有重写equals方法,调用的是Object下的equals方法,比较值
        System.out.println(name2.equals(name3));//name3不是String类型,无法比较,直接false
    }
}
false
true
true
false
false
true
false
false

StringBuilder类就没有对equals进行重写

但是有contentEquals方法

🌺Objects

 常用方法

public static String toString(对象)  返回参数中对象的字符串表示形式。

public static String toString(对象, 默认字符串)  返回对象的字符串表示形式。

public static Boolean isNull(对象)  判断对象是否为空

public static Boolean nonNull(对象)  判断对象是否不为空

 学生类(Student)

package cn.moming10;

public class Student {
    private String name;
    private int age;

    public Student() {
    }

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public Student(String name) {
        this.name = name;
    }

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

测试类(Test)

package cn.moming10;

import java.util.Objects;

public class Test{
    public static void main(String[] args) {
        Student stu = new Student();
        boolean aNull = Objects.isNull(stu);//判断对象为空
        System.out.println(aNull);
        boolean bNull = Objects.nonNull(stu);//判断对象不为空
        System.out.println(bNull);

        mod(null);

    }
    public static void mod(Student stu) {
        try {
            String string1 = stu.toString();   //使用它很可能出现空指针异常
            System.out.println(string1);
        } catch (NullPointerException e) {
            e.printStackTrace();
        }

        String string2 = Objects.toString(stu);   //使用它代码不会空指针异常
        System.out.println(string2);
    }
}

false
true
null
java.lang.NullPointerException: Cannot invoke "cn.moming10.Student.toString()" because "stu" is null
	at cn.moming10.Test.mod(Test.java:18)
	at cn.moming10.Test.main(Test.java:13)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

沫洺

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值