简单了解java中的API

API学习

1、Object类

1.1、介绍

类Object是类层次结构的根,每个类都把Object作为超类,所有对象包括数组都实现了这个类的方法。在java语言中,程序员自定义或者jdk中存在的类,直接或者间接的都要继承Object类。

1.2、Object类中的常用方法

继承了Object类之后就可以使用Object类提供的方法

  • String toString()
    • 作用:把对象转换成字符串

示例:用toString方法在控制台输出名字和年龄

创建一个Person类,此时类中没有重写toString

public class Person {
    String name;
    int age;

    public Person(){

    }

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

创建测试类

public class Test {
    public static void main(String[] args) {
        Person person = new Person("糖锅", 20);

        String str = person.toString();//此时Person类中没有重写toString,调用的是Object类中的toString

        System.out.println(str);
    }
}

当运行程序时,我们发现此时的输出结果是一个地址,但是我们想要的是输出名字和年龄

此时我们需要在Person中重写toString方法,可使用快捷键alt + ins

alt + ins之后选择toString()

toString快捷重写

选择需要的属性然后点击ok

toString快捷重写

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

此时运行发现结果为:

Person{name='糖锅', age=20}

又因为执行时,每次打印对象,或者字符串进行拼接时,都会默认调用toString方法,所以我们可以省略Test测试类中的person.toString();

public class Test {
    public static void main(String[] args) {
        Person person = new Person("糖锅", 20);

        System.out.println(person);
    }
}

此时运行结果也是一样的

  • boolean equals(Object obj)
    • boolean:方法的返回值类型
    • Object:方法传递的参数类型
    • 作用:比较两个对象是否相同(比较两个对象的地址是否相同

示例:比较两个对象的姓名是否一样(使用上述Person类)

我们此时创建Test类如下

public class Test {
    public static void main(String[] args) {
        Person person1 = new Person("糖锅", 20);
        Person person2 = new Person("糖锅", 20);

        System.out.println(person1);//打印的是对象的地址
        System.out.println(person2);

        System.out.println(person1 == person2);
    }
}

运行结果为

java_api.Person@4554617c
java_api.Person@74a14482
false

我们想要比较的是对象中存储的数据的值,那我们直接用person1.equals(person2)不就行了?

当然也不行,因为equals比较的也是对象的地址,结果依然会输出false,所以我们需要重写equals方法。

具体步骤和重写toString方法类似:alt + ins -->next(选择需要比较的属性值)–>next–>create

@Override
    public boolean equals(Object o) {
        //判断当前地址值和传递对象地址值是否相同
        if (this == o) 
            return true; //两个对象相同,返回true
        
        //判断传递过来的对象是否为null  或者  当前对象和传递对象的类型是否匹配
        if (o == null || getClass() != o.getClass()) 
            //当前比较的对象为null,则不需要比较,直接返回false
            //当比较的两个对象的类型不一样时,也直接返回false
            return false;
        
        //向下转型
        Person person = (Person) o;
        
        //1.基本数据类型比较  使用Objects工具类中的equals方法,比较两个字符串是否相同
        return Objects.equals(name, person.name);
        
        //2.也可以使用如下写法  使用Stirng类中的equals方法,比较两个字符串是否相同
        //return this.name.equals(person.name);
    }

上述字符串比较的两种方法(1和2)讨论:

  • String类中的equals方法

    boolean res = 字符串1.equals(字符串2);

  • Objects工具类中的equals方法(推荐使用

    boolean res = Objects.equals(字符串1, 字符串2);

两者区别:Objects类中的equals方法可以避免NullPointerException异常的发生

报错测试示例:

public class Test {
    public static void main(String[] args) {
        String str1 = null;
        String str2 = "糖锅";

        //使用Objects中的equals
        System.out.println(Objects.equals(str1, str2));

        //使用Stirng中的equals
        System.out.println(str1.equals(str2));
    }
}

此时运行结果

在这里插入图片描述

重写equals方法后,再运行Test测试类

public class Test {
    public static void main(String[] args) {
        Person person1 = new Person("糖锅", 20);
        Person person2 = new Person("糖锅", 20);

        System.out.println(person1);//打印的是对象的地址
        System.out.println(person2);

        System.out.println(person1 == person2);

        System.out.println(person1.equals(person2));
    }
}

运行结果就会是我们的预期了

java_api.Person@fb30e
java_api.Person@fb30e
false
true

2、Data类

2.1、介绍

  • 归属包:java.util

  • 作用:表示日期时间(精确到毫秒)

  • 使用:

    • 构造方法(创建时间对象)

      public Data();//创建的对象,表示当前计算机的系统时间
      public Data(long time);//Data对象 = 1970/1/1 0:0:0 + time毫秒值
      
    • 常用方法

      public long getTime(); //返回毫秒值 = 当前date代表的时间 - 1970/1/1 0:0:0
      public void setTime(long t) //Date对象 = 1970/1/1 0:0:0 + time毫秒值
      

2.2、DateFormat类

什么是DateFormat类?

DateFormat类是java提供的日期格式化类

这个类能干啥?

  1. 对日期进行格式化

  2. 对日期进行解析操作

那么如何使用嘞?

  • 所属包:java.text.DateFormat

  • DateFormat是一个抽象类无法实例化,使用子类:SimpleDateFormat

    DateFormat d = new SimpleDateFormat(“日期模板”);

    日期模板:yyyy表示全年、MM表示月、dd表示日

    例如:DateFormat d = new SimpleDateFormat(“yyyy年MM月dd日 HH:mm:ss”);

  • String format(Date date) 可以将Date类型的数据,按照日期模板,转换为字符串

  • **Date parse(String s) **可以将日期式的字符串数据,按照日期模板,转换成Date对象

3、Calendar类

3.1、Calendar类介绍

java.util.Calendar类表示日历,内含各种事件信息,以及获取,计算时间的方法。Calendar本身是一个抽象类,可以通过Calendar提供的静态方法getInstance日历子类对象。

3.2、Calendar常用方法

方法名说明
public static Calendar getInstance ()获取一个它的一个子类GregorianCalendar
public int get (int field)获取指定日历字段的时间
public void set (int field, int value)设置指定字段的值
public void add (int field, int amount)为某个字段增加/减少指定的值

示例:获取当前系统年月日

public class Test {
    public static void main(String[] args) {
        Calendar calendar = Calendar.getInstance();

        int year = calendar.get(Calendar.YEAR);
        int month = calendar.get(Calendar.MONTH);
        int day = calendar.get(Calendar.DAY_OF_MONTH);

        System.out.println(year + "年" + month + "月" + day + "日");
    }
}

运行结果

202454//我们发现运行结果中,月份是比实际少1的,因为直接获取月份是从0开始数的

示例:给日历对象设置指定值

public class Test {
    public static void main(String[] args) {
        Calendar calendar = Calendar.getInstance();

        //修改前
        int year = calendar.get(Calendar.YEAR);
        int month = calendar.get(Calendar.MONTH);
        int day = calendar.get(Calendar.DAY_OF_MONTH);
        System.out.println(year + "年" + month + "月" + day + "日");

        //修改后
        //calendar.set(Calendar.YEAR, 1949);
        calendar.set(1949, 10, 1);//也可以这样设置
        int year1 = calendar.get(Calendar.YEAR);
        int month1 = calendar.get(Calendar.MONTH);
        int day1 = calendar.get(Calendar.DAY_OF_MONTH);
        System.out.println(year1 + "年" + month1 + "月" + day1 + "日");
    }
}

运行结果

2024年5月4日
1949年10月1日

示例:给日历对象中的信息增加或减少, 给月份减少5,日增加3

public class Test {
    public static void main(String[] args) {
        Calendar calendar = Calendar.getInstance();

        //修改前
        int year = calendar.get(Calendar.YEAR);
        int month = calendar.get(Calendar.MONTH);
        int day = calendar.get(Calendar.DAY_OF_MONTH);
        System.out.println(year + "年" + month + "月" + day + "日");

        //修改后
        //calendar.set(Calendar.YEAR, 1949);
        calendar.set(1949, 10, 1);
        int year1 = calendar.get(Calendar.YEAR);
        int month1 = calendar.get(Calendar.MONTH);
        int day1 = calendar.get(Calendar.DAY_OF_MONTH);
        System.out.println(year1 + "年" + month1 + "月" + day1 + "日");

        //给月份减少5,日增加3
        calendar.add(Calendar.MONTH, -5);
        calendar.add(Calendar.DAY_OF_MONTH, 3);
        int month2 = calendar.get(Calendar.MONTH);
        int day2 = calendar.get(Calendar.DAY_OF_MONTH);
        System.out.println(year1 + "年" + month2 + "月" + day2 + "日");
    }
}

运行结果

2024年5月4日
1949年10月1日
1949年5月4日

欧克,今日到此结束

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值