Day_12【Object类、常用API】

今日内容
    Object类
    日期相关类
        Date类
        DataFormat类
        Calendar类
    System类
    StringBuilder类
    8种基本数据类型对应的包装类

API怎么学习
    不要去死记,只要学过的类和方法会查会用即可

    如何查看API文档
        (1)可以先查包,然后去包里查类
        (2)点击索引,输入框中输入类名        推荐的方式
    如何使用API文档
        (1)看包
            如果是java.lang包下的类,直接使用不用导包
            如果不是java.lang包下的类,使用之前就需要导包
        (2)看类的描述
            描述了类的作用,特点,注意事项甚至简单的使用方式
        (3)看构造方法
            创建对象需要用到构造方法
            在文档中,有些类展示了构造方法,有些没有
        (4)看成员方法
            方法名:看到方法名要能知道这个方法是什么作用
            看参数列表(形参):调用方法的时候必须根据形参来传递对应类型的实参
                            如果形参是基本数据类型,则传递的是对应类型的值
                            如果形参是引用数据类型(数组、类、接口),则传递的是数组、该类对象或者子类对象、该接口的实现类对象

            返回值类型:如果返回值类型为void,则使用的时候只能单独调用
                       如果返回值类型不是void,则使用的时候可以使用三种方式(单独、输出、赋值)调用


Object类
    在java.lang包下,所以使用的时候不用导包
    类 Object 是类层次结构的根类。每个类都使用 Object 作为超类。所有对象(包括数组)都实现这个类的方法。
    解释:Object类是所有类的直接或者间接父类,如果一个类没有直接继承其他类,则一定默认继承了Object类

    常见方法
        toString方法
            public String toString():将对象转为字符串

            每个类都能继承Object类中的方法,所以toString方法也会被继承,Object类中的toString方法有指定的格式:
                public String toString() {
                    return getClass().getName() + "@" + Integer.toHexString(hashCode());
                }

                // com.itheima.demo01.Object.Person@75412c2f

            Object类中的toString方法输出的格式的内容没有太大意义,所以我们平常一般会重写toString方法,重写的原则
            是:打印对象中的内容(类中的成员变量的值)

            如何重写
                快捷键生成
                alt+insert 找到toString

            直接打印一个对象的名字,其实默认调用的是对象的toString方法
                这个和println方法有关,底层判断如何传递的对象不是null,则默认调用toString方法


        equals方法
            public boolean equals(Object obj):判断两个对象是否相等

            Object类中的equals方法比较的是内存地址值:
            public boolean equals(Object obj) {
                return (this == obj);
            }

            // this代表调用equals方法的那个对象,obj是调用方法传递的实参对象

            ==的使用
                比较基本数据类型,比较的是值是否相等
                比较引用数据类型,比较的是地址值是否相等

            equals只能比较引用数据类型,==既可以比较基本数据类型也可以比较引用数据类型

            equals方法底层使用的是==号,如果只是要比较内存地址是否相等可以直接使用==,没有必要使用equals方法再去底层调用==,
            所以equals方法一般也会被重写,改变比较的规则,不比较地址了,而比较内容.
            重写的原则是:比较对象的内容(类中成员变量的值)是否相等
            如何所有的内容都相同,说明是相等,如果有一个不同,则说明不相等

            如何重写
                使用快捷键 alt+insert 找到equals&hashCode

日期相关类
    Date类
        在java.util包下,使用的时候必须导包,注意不是使用java.sql包下的Date类了,这是它的子类
        表示是特定的瞬间(时间精确到毫秒),毫秒值是相当于1970年1月1日 0时0分0秒0秒
        Date类可以表示过去、现在和将来的任何一个特定瞬间,主要就看传递的毫秒值落到哪个时候就是哪个时候

        构造方法
            Date():空参构造,代表的是现在这个特定瞬间
            Date(long date):有参构造,传递的毫秒值落到哪个时候就是哪个时候

        成员方法
            public long getTime():获取Date对象代表的瞬间的毫秒值(是一个相对值,相对于1970年1月1日 0时0分0秒0秒)
            public void setTime(long time):设置毫秒值,和有参构造方法都能达到给Date对象设置毫秒值的效果

        如何获取当前系统时间的毫秒值?
            (1)System.currentTimeMillis()
            (2)new Date().getTime()

    DataFormat类
        格式化和解析日期字符串
        是一个抽象类,没法创建对象使用,使用其子类SimpleDateFormat
        抽象类中可以有抽象方法,可以有非抽象方法,如果一个类去继承抽象类,就必须实现其中所有的抽象方法,否则该类也必须变成抽象类

        SimpleDateFormat
            构造方法
                SimpleDateFormat(String pattern)

                pattern指的就是模式

            常见方法
                格式化:日期对象(Date) ->文本(String)
                    有了这个方法之后,日期对象想要以什么样的格式显示都是可以的,只要指定模式
                    y 年
                    M 月
                    d 日
                    H 时
                    m 分
                    s 秒

                    yyyy-MM-dd     -> 2018-08-08
                    yyyy/MM/dd     -> 2018/08/08
                    yyyy年MM月dd日     -> 2018年08月08日

                    public final String format(Date date)

                解析:文本(String) ->日期对象(Date)
                    "2018年08月10日"  "2018年08月08日"
                    注意:给定的文本(日期字符串)必须匹配指定的模式,这样才能正确的解析,否则报解析异常ParseException

                    public Date parse(String source)


            步骤:
                (1)创建SimpleDateFormat对象,使用有一个参数的构造方法,传递模式
                (2)调用format或者parse方法进行格式化或者解析


            课堂练习:
                键盘录入一个人的出生日期(格式:xxxx/xx/xx),计算这个人到底出生了多少天?

 

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

public class DateTest {
    public static void main(String[] args) throws ParseException {
        function();
    }


    public static void function() throws ParseException {
        System.out.println("请输入生日(格式yyyy-MM-dd)");
        String birthdayString=new Scanner(System.in).next();
        SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
        //将输入的字符串转换成进行解析
        Date birthday=sdf.parse(birthdayString);

        Date todayDate=new Date();//当前时间
        //获取到出生日期的毫秒值
        long birthdaySecond=birthday.getTime();
        //获取当前时间毫秒值
        long todaySecond=todayDate.getTime();
        //获取时间差
        long secone=todaySecond-birthdaySecond;
        if (secone<0){
            System.out.println("还没出生呢!");
        }else {
            System.out.println("你已经出生了:"+secone/1000/60/60/24+" 天");
        }

    }
}

    Calendar类
        日历类,能够操作单独的年、月、日、时、分、秒、星期等信息
        它是一个抽象类,不能通过构造方法创建对象,但是要调用其中的方法必须要有对象,
        这时可以创建子类对象或者寻找本类的静态方法返回子类对象

        public static Calendar getInstance()

        // 获取对象
        Calendar c = Calendar.getInstance();

        常用方法
            获取
                int get(int field)
            设置
                void set(int field, int value)  :一次给一个年或者月或者日进行设置值
                void set(int year, int month, int date) :一次可以同时给年月日进行设置值

            添加和减少
                void add(int field, int amount)  :给指定的日期字段进行值的添加和减少
            Date互转
                Date getTime()  :将Calendar对象转为Date对象
                setTime(Date date) :将Date对象转为Calendar对象


        课堂案例:
            键盘录入一个日期字符串(格式:xxxx年xx月xx日),求出这个日期代表星期几

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

public class TestCalendar {
    public static void main(String[] args) throws ParseException {
        Scanner sc=new Scanner(System.in);
        System.out.println("请输入一个日期(格式:xxxx年xx月xx日)");
        String dateStr=sc.next();
        Date date=new SimpleDateFormat("yyyy年MM月dd日").parse(dateStr);
        Calendar c = Calendar.getInstance();
        c.setTime(date);
        int week=c.get(Calendar.DAY_OF_WEEK);

        String[] str={"","星期天","星期一","星期二","星期三","星期四","星期五","星期六"};
        System.out.println(str[week]);

    }
}

 

System类
    static long currentTimeMillis()
    static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)

StringBuilder类
    在java.lang包下,使用的时候不用导包
    代表的是一个可变字符串,String是不可以变的字符串,它是常量
    StringBuilder相当于是一个容器,里面可以添加(append)任意的数据,最终得到的都是字符串

    append:添加方法

    String和StringBuilder
        String ->StringBuilder :通过构造方法
            StringBuilder sb = new StringBuilder("hello");

        StringBuilder ->String:toString方法
            String str = sb.toString();

你可能感兴趣的:(JAVA,SE,24天)