JavaSEday04常用API和Object類

day04面向對象(Object類和常用API)
    一.Object類
        1.Object類的介紹
            它是所有類的超類,所有對象(包括數組)都擁有Object類中方法
        2.toString方法
            原型:public String toString():返回該對象的字符串表示。
            默認表示格式: 包名.類名@地址值
            在實際開發中,我們通常會重寫toString方法
public class Dog {
    private int age;
    private String name;
    //重寫toString
    //返回對象的內容纔有意義
    //快速生成toString
    @Override
    public String toString() {
        return "Dog{" +
                "age=" + age +
                ", name='" + name + '\'' +
                '}';
    }
}

            注意:實際上toString方法我們並不需要自己主動調用
            使用輸出語句直接打印對象名時,編譯器會自動先調用toString,然        後打印toString的返回值!!!
            即以下兩種寫法是等價的:
                System.out.println(對象名);
                System.out.println(對象名.toString());
        3.equals方法
            原型:public boolean equals(Object obj);
            判斷某個其他對象是否與此對象“相等”。
            equals方法默認比較的是兩個對象的地址值
            在實際開發中,我們通常會重寫equals方法,比較兩個對象的內容        (屬性值)而不是地址值
public class Dog {
    private int age;
    private String name;

    //重寫equals
    //比較兩個對象的內容(屬性值)
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Dog dog = (Dog) o;
            //只有age相同  &&  name相同才返回true,否則返回false
                    return age == dog.age &&
                            Objects.equals(name, dog.name);
                }
        }

        4.補充
            == 與 equals的區別
            對於基本類型來說:
                == 比較是數值
                基本類型沒有equals方法!!!!
            對於引用類型來說:
                ==比較的是地址值
                equals默認比較也是地址值,如果重寫了比較的是對象屬性        值
    二.時間日期類
        1.Date類
            Date表示特點的時間點
            構造方法:
            public Date():創建代表當前系統的時間Date
            public Date(long time):創建一個代表距離標準時間time毫秒後的        時間
            標準時間(英國):1970-01-01 00:00:00
            標準時間(中國):1970-01-01 08:00:00
public class TestDateDemo {
    public static void main(String[] args) {
        //1.創建Date對象,無參構造
        Date dd = new Date();
        System.out.println(dd);
        //2.創建Date對象,有參數構造
        Date dd2 = new Date(1000L);
        System.out.println(dd2);
    }
}


            成員方法:
            public long getTime():獲取Date對象距離標準時間的毫秒值
            public void setTime(long time):修改Date對象距離標準時間的毫        秒值
            public String toString():重寫Object的toString方法,返回時間        字符串
        public class TestDateDemo {
                public static void main(String[] args) {
                    //1.創建Date對象,無參構造
                    Date dd = new Date();
                    System.out.println(dd);
                    //2.創建Date對象,有參數構造
                    Date dd2 = new Date(0L);
                    System.out.println(dd2);
                    //3.獲取毫秒值
                    long time = dd.getTime();
                    System.out.println(time);
                    //4.修改毫秒值
                    dd2.setTime(1565682794591L);
                    System.out.println(dd2);
                }
        }

        2.DateFormat類型
            DateFormat時間/日期格式化類,將Date對象時間串改成我們喜歡的        那種格式
            查閱API發現DateFormat是一個抽象類!!!我們使用的是JDK提供的        子類:SimpleDateFormat類
            構造方法:
            public SimpleDateFormat(String pattern):以指定的模板創建日期
        格式化對象
            y - 年
            M - 月
            d - 日
            H - 時
            m - 分
            s - 秒
            成員方法:
            public String format(Date date):將Date對象格式化爲一個時間串
            public Date parse(String time):將時間串解析爲一個Date對象    
public class TestDateFormatDemo {
    public static void main(String[] args) {
        //1.創建一個日期格式化對象
        SimpleDateFormat sdf = new     SimpleDateFormat("yyyy年MM月dd日 HH點mm分ss秒");
        //2.調用格式化方法
        Date now = new Date();
        String s = sdf.format(now);
        //假設: 2019年05月06日 20點18分25秒
        System.out.println(s);
//3.調用解析方法
Date date = sdf.parse("3000年10月23日 10點11分12秒");
System.out.println(date);

    }
}

        3.Calendar類(抽象類)
            a.獲取方法**********
                public static Calendar getInstance():靜態方法,獲取當        前系統時間的日    歷對象
            b.常用方法
                public int get(int field):根據字段的編號,獲取該字段        的值
                public void set(int field, int value):根據字段的編        號,修改字段的值
                public void add(int field, int value):根據字段的編        號,增加該字段的值
                public Date getTime():把Calendar對象轉換爲Date對象
public class TestCalendarDemo {
    public static void main(String[] args) {
        //1.獲取Calendar對象
        Calendar c = Calendar.getInstance();
        System.out.println(c);
        //2.獲取字段的值
        printCalendar(c);
        //3.修改字段的值
        c.set(Calendar.YEAR,3000);
        c.set(Calendar.MONDAY,10);
        c.set(Calendar.DAY_OF_MONTH, -5);
        printCalendar(c);
        //4.增加字段的值
        c.add(Calendar.MONTH,1);
        c.add(Calendar.DAY_OF_MONTH,2);
        printCalendar(c);
        //5.轉成Date對象
        Date time = c.getTime();
        System.out.println(time);
    }

    public static void printCalendar(Calendar c) {
        int year = c.get(Calendar.YEAR);
        System.out.println(year);
        int month = c.get(Calendar.MONDAY);
        System.out.println(month);
        int day = c.get(Calendar.DAY_OF_MONTH);
        System.out.println(day);
    }
}

            c.練習
                需求:獲取任意一年的二月份有多少天
                使用Calendar對象設置爲該年三月份的第一天,再將日期減1        即可
public class TestDemo {
    public static void main(String[] args) {
        //練習:獲取某一年的二月份有多少天
        //1.輸入年齡
        System.out.println("請輸入一個年:");
        int year = new Scanner(System.in).nextInt();
        //2.創建一個Calendar對象,設置成該年的三月份的第一天
        Calendar c = Calendar.getInstance();
        c.set(Calendar.YEAR,year);
        c.set(Calendar.MONTH,2);
        c.set(Calendar.DAY_OF_MONTH,1);
        //c.set(year,2,1);
        //3.然後減去一天
        c.add(Calendar.DAY_OF_MONTH, -1);
        //4.獲取天數
        int day = c.get(Calendar.DAY_OF_MONTH);
        //打印
        System.out.println(year + "年的二月份有" + day + "天");
    }
}

    三.Math類(private 不可實例化)
        Math類中包含了很多數學運算相關的方法,而且這麼方法都是靜態的,類名直        接調用即可
        1.8個方法
        public static double abs(double d):求絕對值
        public static double max(double d1, double d2):求最大值
        public static double min(double d1, double d2):求最小值
        public static double ceil(double d):向上取整
        public static double floor(double d):向下取整
        public static long round(double d):四捨五入
        public static double random():產生一個[0,1)的隨機小數
        public static double pow(double d1, double d2):求指數
public class MathDemo {
    public static void main(String[] args) {
        //1.絕對值
        double abs = Math.abs(-3.5);
        System.out.println(abs);
        //2.求最值
        double max = Math.max(3.4, 4.5);
        System.out.println(max);
        double min = Math.min(3.4, 4.5);
        System.out.println(min);
        //3.向上向下取整
        double ceil = Math.ceil(3.1);
        double floor = Math.floor(3.9);
        System.out.println(ceil); //4
        System.out.println(floor); // 3
        //4.四捨五入
        long round = Math.round(3.499);
        System.out.println(round);
        //5.產生一個[0,1)的隨機小數
        double random = Math.random();
        System.out.println(random);
        //6.求次方
        double pow = Math.pow(10, 3);//10的3次方  10*10*10
        System.out.println(pow);
    }
}

    四.System類(private 不可實例化)
        1.兩個常用的靜態方法
            public static void exit(int status):退出JVM虛擬機
            public static long currentTimeMillis():獲取當前系統時間距離        標準時間的毫秒值
public class SystemDemo {
    public static void main(String[] args) {
        //1.退出JVM
        for (int i = 0; i < 10; i++) {
            System.out.println(i);
            System.exit(0);
        }
        //2.獲取毫秒值
        long time = System.currentTimeMillis();
        System.out.println(time);
    }
}

            
        2.currentTimeMillis方法在開發中的作用
             用於計算某個代碼塊的運行時間
public class SystemDemo02 {
    public static void main(String[] args) {
        //字符串拼接時,建議使用StringBuilder
        //1.使用String進行拼接 耗時:29650毫秒
        long start = System.currentTimeMillis();
        String s = "";
        for (int i = 0; i < 100000; i++) {
            s += i;
        }
        long end = System.currentTimeMillis();
        System.out.println("耗時:" + (end - start) + "毫秒");

        //2.使用StringBuilder進行拼接 耗時:23毫秒
        long start = System.currentTimeMillis();
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < 100000; i++) {
            sb.append(i);
        }
        long end = System.currentTimeMillis();
        System.out.println("耗時:" + (end - start) + "毫秒");
    }
}
                

    五.包裝類
        1.包裝類的介紹
            包裝類:基本數據類型   對應的引用類型
                byte            Byte
                char            Character
                short            Short
                int            Integer
                long            Long
                float            Float
                double            Double
                boolean            Boolean
        2.Integer的構造方法和靜態方法
            構造方法
                Integer i = new Integer(int value);
                Integer i = new Integer(String value);
            靜態方法
                Integer i = Integer.valueOf(int value);
                Integer i = Integer.valueOf(String value);
        3.自動拆箱和自動裝箱的介紹**************
            自動拆箱:把包裝類轉成對應的基本類型
                在JDK1.7以前,只有手動拆箱
                    Integer i = new Integer(10);
                    int j = i.intValue();
                在JDK1.7,引入自動拆箱
                    Integer i = new Integer(10);
                    int j = i;    // 自動拆箱 
            自動裝箱:把基本類型轉成對應的包裝類
                在JDK1.7以前,只有手動裝箱
                    Integer i = new Integer(10);
                    或 Integer i = Integer.valueOf(10);
                在JDK1.7,引入自動裝箱
                    Integer i = 10;   // 底層 是通過靜態方法執行
                總結:JDK1.7以後,基本類型和包裝類類型我們可以當作基            本處理了(直接當作基本數據類型運算)
        4.基本類型和字符串類型之間的轉換***********
            基本類型 ——> 字符串
            int i = 10;
            a. i + ""
            b. 使用StringBuilder
                StringBuilder sb = new StringBuilder();
                sb.append(i);
                String s = sb.toString();
            c. 使用String
                String s = String.valueOf(i);

            字符串 ——> 基本類型
            String s = "1234";
            a.使用包裝類
                Integer i = new Integer(s);
                int j = i; // i.intValue();
            b.使用包裝類***********
                int value = Integer.parseInt(s);

總結:
    -[] 能夠說出Object類的特點
        所有類的父類,所有對象包括數組,都有Object類中的方法
    -[] 能夠重寫Object類中的toString方法
        a.toString默認返回的字符串的:包名.類名@地址值
        b.toString在開發我們通常重寫:返回對象的屬性值
        c.toString方法不需要手動調用,只需要直接使用對象名即可
    -[] 能夠重寫Object類的equals方法
        a.equals方法默認比較:兩個對象的地址值
        b.equals在開發中我們也會通常重寫:比較兩個對象的屬性值
    -[] 能夠使用日期類輸出當前日期
        Date now = new Date();   //當前日期對象
    -[] 能夠使用將日期格式化爲字符串的方法
    -[] 能夠使用將字符串轉換爲日期的方法
        SimpleDateFormat sdf = new SimpleDateFormat("模板");
        String s = sdf.format(Date d);
        Date d = sdf.parse(String s);
    -[] 能夠創建日曆對象
        Calendar c = Calendar.getInstance();
    -[] 能夠使用日曆對象的方法
        c.set(int field, int value);
        c.get(int field);
        c.add(int field, int value);
        c.getTime();  轉換成Date對象
    -[] 能夠使用Math類的方法
        abs max min ceil floor round random pow
    -[] 能夠使用System類獲取當前系統毫秒值
        long time = System.currentTimeMillis();
    -[] 能夠說出自動裝箱、自動拆箱的概念
        自動裝箱: Integer i = 10;
               Double d = 3.1;
        自動拆箱: int j = i;
                double dd = d;
    -[] 能夠將基本類型轉換爲對應的字符串
        a.直接+""
        b.使用StringBuilder
        c.使用String
    -[] 能夠將字符串轉換爲對應的基本類型
        a.使用包裝類的靜態方法
            Integer i = new Integer("10");
            int j = i; // i.intValue();
        b.使用包裝類的parseInt方法
            int i = Integer.parseInt("10");
                


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章