Day12——Object类、Date类、DateFormat类、Calendar类、System类、StringBuilder类、常用API

  • Object类

定义:java.lang.Object类是Java语言中的根类,即所有类的父类。它中描述的所有方法子类都可以使用。在对象实例化的时候,最终找的父类就是Object。如果一个类没有特别指定父类, 那么默认则继承自Object类

  • public String toString()将对象转换为字符串。

toString方法返回该对象的字符串表示,其实该字符串内容就是对象的类型+@+内存地址值。

由于toString方法返回的结果是内存地址,而在开发中,经常需要按照对象的属性得到相应的字符串表现形式,因此也需要重写它。如果不希望使用toString方法的默认行为,则可以对它进行覆盖重写

@Override
public String toString() {
    return "User{" +
            "userId=" + userId +
            ", userName='" + userName + '\'' +
            ", userPwd='" + userPwd + '\'' +
            '}';
}
  • public boolean equals(Object obj):指示其他某个对象是否与此对象“相等”。

调用成员方法equals并指定参数为另一个对象,则可以判断这两个对象是否是相同的。这里的“相同”有默认和自定义两种方式。

默认地址比较

如果没有覆盖重写equals方法,那么Object类中默认进行==运算符的对象地址比较,只要不是同一个对象,结果必然为false。

对象内容比较

如果希望进行对象的内容比较,即所有或指定的部分成员变量相同就判定两个对象相同,则可以覆盖重写equals方法。例如:

package case7;

import java.util.Objects;

public class TestPerson {

    public static void main(String[] args) {

        Person p1 = new Person("刘德华", 45);

        System.out.println(p1);//case7.Person@1540e19d
        System.out.println(p1.toString());

        Person p2 = new Person("刘德华", 45);

        System.out.println(p1.equals(p2));

        String  s1 = "重地";
        String s2 = "通话";

        System.out.println(s1.hashCode());
        System.out.println(s2.hashCode());

        Class<? extends String> aClass = s1.getClass();
        Class<? extends String> bClass = s2.getClass();
        System.out.println(aClass == bClass);


        System.out.println(Objects.isNull(s1));

        System.out.println(Objects.nonNull(s1));
    }
}

package case7;

import java.util.Objects;

public class Person extends  Object{

    private  String name;
    private int age;

    public Person() {
    }

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


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

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Person person = (Person) o;
        return age == person.age &&
                Objects.equals(name, person.name);
    }




    /*  @Override
    public boolean equals(Object obj) {

        //先判断地址
        if(this == obj){
            return true;
        }
        //判断类型
        if(!(obj instanceof  Person)){
            return false;
        }
        // 判断内容-属性值
        Person otherPerson = (Person)obj;
        if(this.name.equals(otherPerson.name) && this.age == otherPerson.age){
            return true;
        }
        return false;
    }*/
}
  • Date类

 java.util.Date:
        Date() // 代表当前时间的Date对象
        Date(long date) // 代表Long类型表示的时间对象

        基准时间 :
            1970年1月1日00:00:00 GMT


        getTime() :获取当前时间的毫秒值
        setTime(long) : 可以将Long型数据表示的时间 设置为对应的时间

package com.case4;

import java.text.ParseException;
import java.util.Date;

public class Test {
    public static void main(String[] args) throws ParseException {
        Date date = new Date();
        System.out.println(date);
        System.out.println(date.toLocaleString());
        System.out.println("================================");
        System.out.println(DateUtil.convertTostring(new Date(),"yyyy-MM-dd"));
        System.out.println(DateUtil.convertToDate("1998-09-13", "yyyy-MM-dd"));

    }
}

tips:在使用println方法时,会自动调用Date类中的toString方法。Date类对Object类中的toString方法进行了覆盖重写,所以结果为指定格式的字符串。

  • DateFormat类

作用:是日期/时间格式化子类的抽象类,我们通过这个类可以帮我们完成日期和文本之间的转换,也就是可以在Date对象与String对象之间进行来回转换。

构造方法

由于DateFormat为抽象类,不能直接使用,所以需要常用的子类java.text.SimpleDateFormat。这个类需要一个模式(格式)来指定格式化或解析的标准

常用方法

DateFormat类的常用方法有:

  • public String format(Date date):将Date对象格式化为字符串。

  • public Date parse(String source):将字符串解析为Date对象。

package com.case4;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class DateFmart {
    public static void main(String[] args) throws ParseException {
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date date = new Date();
        String format = simpleDateFormat.format(date);
        System.out.println(format);

        SimpleDateFormat simpleDateFormat1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String str = "1998-09-13 14:28:36";
        Date parse = simpleDateFormat1.parse(str);
        System.out.println(parse);
        System.out.println("=================================");

    }
}

  • Calendar类

根据Calendar类的API文档,常用方法有:

  • public int get(int field):返回给定日历字段的值。

  • public void set(int field, int value):将给定的日历字段设置为给定值。

  • public abstract void add(int field, int amount):根据日历的规则,为给定的日历字段添加或减去指定的时间量。

  • public Date getTime():返回一个表示此Calendar时间值(从历元到现在的毫秒偏移量)的Date对象。

  • 日历字段与 Date之间转换
        setTime(Date date)  : 将Date转换为Calendar对象
        Date getTime()  : 将Calendar转换Date对象

获取方式

Calendar为抽象类,由于语言敏感性,Calendar类在创建对象时并非直接创建,而是通过静态方法创建,返回子类对象,如下:

Calendar静态方法

  • public static Calendar getInstance():使用默认时区和语言环境获得一个日历

例如:

public class CalendarTest {
    public static void main(String[] args) {
        Calendar instance = Calendar.getInstance();
        instance.add(Calendar.YEAR, 10);
        instance.add(Calendar.MONTH,2);
        int y = instance.get(Calendar.YEAR);
        int m = instance.get(Calendar.MONTH )+1;
        int d = instance.get(Calendar.DAY_OF_MONTH);
        int h = instance.get(Calendar.HOUR_OF_DAY);
        int min = instance.get(Calendar.MINUTE);
        int s = instance.get(Calendar.SECOND);
        System.out.println(y+"-"+m+"-"+d+" "+h+":"+min+":"+s);
        System.out.println("==========================================");

        System.out.println(y+"-"+m+"-"+d+" "+h+":"+min+":"+s);
        Date date = instance.getTime();
        System.out.println(date);
        System.out.println("==========================================");
        instance.set(Calendar.YEAR, 2018);
        System.out.println(y+"-"+m+"-"+d+" "+h+":"+min+":"+s);

    }
}

 

 注意:Calendar为抽象类,不能创建对象,只能通过调用静态方法Calendar.getInstance()创建返回子类的对象。

  • System类

java.lang.System类中提供了大量的静态方法,可以获取与系统相关的信息或系统级操作,在System类的API文档中,常用的方法有:

  • public static long currentTimeMillis():返回以毫秒为单位的当前时间。

  • public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length):将数组中指定的数据拷贝到另一个数组中。

           src :源数组
            srcPos : 源数组开始位置
            dest : 目标数组
            destPos:目标数组的开始位置
            length :copy元素的个数
 

import java.util.Arrays;

import static java.lang.System.arraycopy;

public class arrayCopy_2 {
    public static void main(String[] args) {
        int[] a = new int[20];
        int[] arry = {1, 2, 3, 4, 5, 6, 7, 8, 9,};
        arraycopy(arry, 1, a, 2, 4);

        for (int i = 0; i < a.length; i++) {
            System.out.print(a[i] + " ");
        }
    }
}

 练习

请使用日期时间相关的API,计算出一个人已经出生了多少天。

思路:

1.获取当前时间对应的毫秒值

2.获取自己出生日期对应的毫秒值

3.两个时间相减(当前时间– 出生日期)

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

public class DateBirth {
    public static void main(String[] args) throws ParseException {
        Date date = new Date();
        long time = date.getTime();

        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
        Date parse = simpleDateFormat.parse("1998-09-13");
        long time1 = parse.getTime();
        long l = (time - time1) / 1000 / 60 / 60 / 24;
        System.out.println("你已经生活了"+l+"天");
    }

}

 

  • StringBuilder类

4.4 常用方法

StringBuilder常用的方法有2个:

  • public StringBuilder append(...):添加任意类型数据的字符串形式,并返回当前对象自身。

  • public String toString():将当前StringBuilder对象转换为String对象。

 1、字符串怎么转换StringBuilder、StringBuffer
  方法一: 使用构造函数
        StringBuilder(String str)
        StringBuffer(String str)

  方法二:
        StringBuffer/StringBuilder    append(String str)
        reverse() : 反转
 2、StringBuider/StringBuffer转换为字符串
        toString() :
 

    StringBuilder : 线程非安全的可变字符序列、效率较好

    StringBuffer : 线程安全的可变字符序列、效率较差

public class StringBuildTest {

    public static void main(String[] args) {
        //字符串反转
        String s1 = "Hello Java";
        //将字符串转换为StringBuilder/StringBuffer对象
        StringBuilder stringBuilder = new StringBuilder(s1);
        stringBuilder.reverse();
        //将StringBuilder转换为字符串输出
        System.out.println(stringBuilder);
        StringBuilder s2 = new StringBuilder("Java");
        StringBuilder s3 = new StringBuilder("Java");
        System.out.println(s2.equals(s3));
        StringBuffer s4 = new StringBuffer("Java");
        StringBuffer s5 = new StringBuffer("Java");
        System.out.println(s4.equals(s5));
        String s6 = "Java";
        System.out.println(s5.equals(s6));//false
        System.out.println(s6.equals(s5));//false


    }
}

  • 包装类

基本类型与对应的包装类对象之间,来回转换的过程称为”装箱“与”拆箱“:

  • 装箱:从基本类型转换为对应的包装类对象。

  • 拆箱:从包装类对象转换为对应的基本类型。

用Integer与 int为例:

基本数值---->包装对象

Integer i = new Integer(4);//使用构造函数函数
Integer iii = Integer.valueOf(4);//使用包装类中的valueOf方法

 包装对象---->基本数值

int num = i.intValue();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值