Java入门到精通——第十九单元 常用API

复习

  1. 什么是面向对象
类:一类事物的抽象的表现形式 
包含属性和行为 
对象:是类的实例。对类进行描述
  1. 面向对象的三大特征及好处
封装(private):提高代码的安全性
继承(extends):调高代码的复用性
多态(instanceof):提高代码的灵活性
  1. 多态的前提、好处及弊端
前提:  1、继承或者实现
       2、重写父类或者接口中的方法 ---接口中可以定义抽象方法、静态方法、(default)默认方法、私有方法
       3、父类的引用指向子类的对象
好处: 提高代码的灵活性
弊端: 不能调用子类的特有的方法 -先判断再向下转型 

今日重点学习目标

  1. Object类toString()方法和equals()方法
  2. Date类常用的方法
  3. DateFormat类中的常用方法
  4. Canlender类中的常用方法
  5. System类中的常用方法

Object类

什么是Java的API?

Application Programing Interface:面向程序接口编程。俗称Java词典。

Java.lang.Object

2.1、概念

概述:
Object 是类层次结构的根类。每个类都使用 Object 作为超类。所有对象(包括数组)都实现这个类的方法。

它是所有的类的父类。

2.2、方法

JVM内存划分

栈、堆、方法区

JVM占用内存默认是1/64,可以调成最大的1/4.

演示堆内存溢出异常

public class User {
    public static void main(String[] args) {
            int[] arr = new int[999999999];//堆内存溢出异常 空指针 角标越界异常 类型转换异常
            System.out.println(arr);
    }
}

2.3、查看Object类源码

private static native void registerNatives();
    static {
        registerNatives();
    }

native关键字:

代表调用本地的属性和行为。只要加native关键字,它所有的属性和行为都不是java语言开发的。都是由c/c++语言开发的。

C语言是面向过程语言 c++是面向过程和面向对象的中间产物。

java语言也是开源编程语言。实际上java语言并不开源。

2.4、toString()方法

public String toString(); 返回该对象的字符串表示。

代码演示

定义User类

/**
 * Create by yanhongbo
 * 日期 2021/4/22
 * 在没有制定父类的前提下 该类的父类就是Object类
 * 概念:
 *    它是所有的类的父类。
 * 只要任意定义一个类。默认就有12个方法。 本类的空参构造方法和Object类的11个方法
 *
 * @Version 1.0
 */
public class User {
    //属性
    private String name;
    private int age;

    public User() {
    }

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

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
    //重写父类的toString();  如果不重写默认会调用父类的toString()方法
   /* public String toString() {
        return name+"....."+age ;
    }*/
    //第二种解决方案 快捷键 alt+insert

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

定义测试类

public class TestObject {
    public static void main(String[] args) {
        User user = new User("杨过",18);
        System.out.println(user);//com.deyuan.User@1540e19d
        System.out.println("----------犹豫的分割线-------------");
        String str = user.toString();//调用的是父类的toString();
        System.out.println(str);//com.deyuan.User@1540e19d

        /**
         * 结论:
         *    输出语句中,打印的对象默认会调用父类的toString();
         *   需求:
         *     打印的地址,是没有意义的
         *     产生有意义的数据 要看到user对象中的属性和行为
         *     属性:姓名要看到具体的名字
         *          行为:具体的动作。
         *
         *     public String toString() {
         *         return getClass().getName() + "@" + Integer.toHexString(hashCode());
         *                获取类名+"@"+十进制转换为十六进制  hashCode是一个十进制的数
         *     }
         *     解决方案:
         *       重写父类的toString()方法
         */
        //学过的哪些类都重写toString()方法
        Scanner sc=new Scanner(System.in);
        System.out.println(sc);//重写了object类中的toString()方法
        ArrayList<String> list=new ArrayList<>();
        list.add("aa");
        list.add("bb");
        System.out.println(list);
    }
}

2.5、equals()方法

public boolean equals(Object obj);指示其他某个对象是否与此对象“相等”。

代码演示

定义User类–重写equals()方法

/**
 * Create by yanhongbo
 * 日期 2021/4/22
 *
 * @Version 1.0
 */
public class User {
    private String name;
    private int age;

    public User() {
    }

    public User(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 "User{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

    //重写父类的equals()方法  真正的用法是比较对象中的内容
    public boolean equals(Object obj) {
        if(this==obj){
            return true;
        }
        //非空判断
        if (obj == null) {
            return false;//对于任何非空引用值 x,x.equals(null) 都应返回 false。
        }
        //age是子类特有的属性  向下转型
        if (obj instanceof User) {
            User user1 = (User) obj;
            return this.age == user1.age;
        }
        return false;
    }
}

定义测试类 1

/**
 * Create by yanhongbo
 * 日期 2021/4/22
 * 演示equals()方法
 *
 * @Version 1.0
 */
public class TestEquals {
    public static void main(String[] args) {
        int a = 1;
        int c = 1;
        System.out.println(a == c);//==如果两边是基本数据类型 比较的是具体的数值
        System.out.println("----------------------------");
        User user1 = new User("佳伟", 19);
        User user2 = new User("佳伟", 19);
        System.out.println(user1 == user2);//== 如果两边是引用类型 ,比较的是对象的地址值
        System.out.println("----------------------------");
        boolean b = user1.equals(user2);
        System.out.println(b);//false  equals比较的是对象中的内容  指示其他某个对象是否与此对象“相等”。

        /**
         * public boolean equals(Object obj) {
         *         return (this == obj);
           }
         * 重写父类equals()方法
         */
        System.out.println(user1.equals(user1));
        System.out.println(user1.equals(null));//对于任何非空引用值 x,x.equals(null) 都应返回 false。
    }
}

定义测试类 2

public class Test02 {
    public static void main(String[] args) {
        User user1=new User("佳伟",19);
        User user2=new User("佳伟",19);
        System.out.println(user1.equals(user2));//true
    }
}

使用快捷键来重写父类的equals方法

面试题 ==和equals的区别

==:如果两边是基本数据类型,比较的是具体的数值。

​ 如果两边是引用数据类型,比较的是内存的地址值。

equals:比较的是对象中的内容。

笔试题:

public class Test03 {
    public static void main(String[] args) {
        String str1=null;
        String str2="abc";
        System.out.println(str1.equals(str2));//空指针异常
        System.out.println("-----------可爱的分割线-------------");
        String str3="abc";
        String str4=null;
        System.out.println(str3.equals(str4));//false
        System.out.println("-----------可爱的分割线-------------");

        String str5=new String("abc");
        String str6="abc";
        System.out.println(str5.equals(str6));//true 原因 String类重写Object的equals()方法,比较的就是内容了
        System.out.println("-----------可爱的分割线-------------");
        System.out.println(str5==str6);//false
    }
}

Date日期类

Java.util.Date 包下

3.1、概述

Date 表示特定的瞬间,精确到毫秒。 1秒= 1000 毫秒

3.2、方法

Date():空参构造方法

public long getTime():返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。

public void setTime(): 设置此 Date 对象,以表示 1970 年 1 月 1 日 00:00:00 GMT 以后 time 毫秒的时间点。

日期对象转换为毫秒值-getTime()

毫秒值转换为日期对象-setTime();

代码演示

import java.util.Date;
/**
 * Create by yanhongbo
 * 日期 2021/4/22
 * date对象打印的结果分配 Date 对象并初始化此对象,以表示分配它的时间(精确到毫秒)。
 * @Version 1.0
 */
public class TestDate01 {
    public static void main(String[] args) {
        Date date=new Date();
        System.out.println(date);//Thu Apr 22 14:23:49 CST 2021   格式:  2021年4月22日 14:25
        long time = date.getTime(); //date对象转化为毫秒值
        System.out.println(time);//1619072815184  当前的毫秒值
        //毫秒值转换日期对象 setTime();
        date.setTime(1519234324332L);
        System.out.println(date);
    }
}

DateFormat类

java.text.DateFormat
从api中可以看出它是一个抽象类,它表示日期格式化。

4.1、 概述

DateFormat 是日期/时间格式化子类的抽象类

通过这个类来实现2个功能

日期–>文本—format()方法 --使用的是父类的format()方法

文本–>日期—parse()方法 --使用的是父类的parse()方法
具体实现由子类SimpleDateFormat来实现

4.2、 日期转换字符串 -format()

代码演示

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

public class TestDate02 {
    public static void main(String[] args) {
        Date date=new Date();
        DateFormat df=new SimpleDateFormat("yyyy年MM月dd日 hh:mm");
        String format = df.format(date);//使用的是父类DateFormat中format()方法  将一个 Date 格式化为日期/时间字符串。
        System.out.println(format);//2021年04月22日 03:01
    }
}

4.3、字符串转化为日期 --parse()

代码演示

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
 * Create by yanhongbo
 * 日期 2021/4/22
 * 字符串转化为日期 --parse()
 * @Version 1.0
 */
public class TestDate03 {
    public static void main(String[] args) throws ParseException {
        DateFormat df=new SimpleDateFormat("yyyy-MM-dd");
        String str="1999-03-05";//参考SimpleDateFormat里面的日期格式
        Date parse = df.parse(str);
        System.out.println(parse);
    }
}

4.4 、练习

从出生年月到现在活了多少天。

思路分析

​ 第一步:获取今天的时间 毫秒值

​ 第二步:减去出生的时间 毫秒值

​ 第三步:通过毫秒值来计算时间的 今天的毫秒值 减去 出生年月的毫秒值

​ 第四步:得到的毫秒值转换为天数 毫秒值/1000/60/60/24 天数

代码演示

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

public class TestDate04 {
    public static void main(String[] args) throws ParseException {
        //请输入你的出生年月 例如 1999-04-05
        System.out.println("请输入你的出生年月,格式:1999-04-05");
        String birthday = new Scanner(System.in).next();//输入的文本转换为日期对象
        //创建Date对象 获取毫秒值
        Date date=new Date();
        long endtime = date.getTime();//获取今天时间的毫秒值

        DateFormat df=new SimpleDateFormat("yyyy-MM-dd");
        Date date2 = df.parse(birthday);
        long starttime = date2.getTime();//获取出生年月的毫秒值

        long time=endtime-starttime;//毫秒值
        System.out.println("天数"+time/1000/60/60/24);
      
    }
}

Calender类-日历类

java.util.Calender类

5.1 、概述

Calendar 类是一个抽象类,它为特定瞬间与一组诸如 YEARMONTHDAY_OF_MONTHHOUR日历字段之间的转换提供了一些方法。

创建Calendar 对象

Calendar calender = Calendar.getInstance();

5.2 方法

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

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

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

import java.util.Calendar;

/**
 * Create by yanhongbo
 * 日期 2021/4/22
 *
 * @Version 1.0
 */
public class TestDate05 {
    public static void main(String[] args) {
        //get 方法
        //创建Calender对象
        Calendar calendar = Calendar.getInstance();
        //获取年
        int year = calendar.get(Calendar.YEAR);
        System.out.println(year+"年");
        //获取月
        int month = calendar.get(Calendar.MONTH);
        System.out.println(month+1+"月");//国外12月算第一个月 国内1月算第一个月
        //获取日
        int day = calendar.get(Calendar.DAY_OF_MONTH);
        System.out.println(day+"日");

        //set方法 互联网 财务软件
        //设置年
     /*   calendar.set(Calendar.YEAR,2020);
        System.out.println(calendar.get(Calendar.YEAR));
        //设置月
        calendar.set(Calendar.MONTH,3);
        System.out.println(calendar.get(Calendar.MONTH));
        //设置日
        calendar.set(Calendar.DAY_OF_MONTH,23);
        System.out.println(calendar.get(Calendar.DAY_OF_MONTH));*/
        //add方法可以对指定日历字段的值进行加减操作,如果第二个参数为正数则加上偏移量,如果为负数则减去偏移量
        calendar.add(Calendar.YEAR,-2);
        calendar.add(Calendar.MONTH,2);// 5月
        System.out.println(calendar.get(Calendar.YEAR));//2019年
        System.out.println(calendar.get(Calendar.MONTH));//5月
    }
}

getTime方法
Calendar中的getTime方法并不是获取毫秒时刻,而是拿到对应的Date对象。

代码演示

import java.util.Calendar;
import java.util.Date;

/**
 * Create by yanhongbo
 * 日期 2021/4/22
 *
 * @Version 1.0
 */
public class Test06 {
    public static void main(String[] args) {
        Calendar calendar = Calendar.getInstance();
        Date date = calendar.getTime();
        System.out.println(date);
    }
}

System类

System.out System.in

代码演示

/**
 * Create by yanhongbo
 * 日期 2021/4/22
 *static long currentTimeMillis()
 *           返回以毫秒为单位的当前时间。
 *
 *      循环打印1-99999 耗时多长时间 毫秒值来计算
 * @Version 1.0
 */
public class TestSytem {
    public static void main(String[] args) {
        //当前时间
        long start = System.currentTimeMillis();
        for(int i=0;i<99999;i++){
            System.out.println(i);
        }
        //结束时间
        long end= System.currentTimeMillis();
        long time=end-start;
        System.out.println(time);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

沐黎Mu li

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

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

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

打赏作者

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

抵扣说明:

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

余额充值