javaee 易混淆知识点之API阶段

1.Object类

1.1Object类的概述

java.lang.Object类是Java语言中的根类,即所有类的父类。

如果一个类没有指定父类,该类默认继承Object类,即所有类直接或者间接继承Object类。

在对象实例化的时候,最终找的父类都是Object。

Object类中描述的所有方法子类都可以使用。

1.2Object中常用方法继承使用

根据JDK源代码及Object类的API文档,Object类当中包含的方法有11个。主要学习其中的2个。

  • public String toString():返回该对象的字符串表示。
    • toString方法默认返回的字符串表示其实就是:对象的类型名+@+内存地址值。
    • 子类默认继承的toString方法展示子类的对象的类型名+@+内存地址值的字符串表示。
  • public boolean equals(Object obj):指示其他某个对象是否与此对象“相等”。
    • equals方法默认通过==运算符比较两个对象地址值,返回的结果表示两个对象是否“相同“。
    • 子类默认继承的equals方法通过==运算符比较子类与其他对象地址值。
    • 不同对象在内存中的地址值唯一。

1.3 演示Object中常用方法继承使用

需求:通过定义人类和学生类,展示toString方法和equals方法的默认继承使用

//Teacher类代码(直接继承Object)

public class Person /*extends Object*/ {
}

//Sutdent类代码(间接继承Object)

public class Sutdent extends Person{
}

//测试类代码

public class Test {
    public static void main(String[] args) {
        Person p = new Person();
        Student s = new Student();
        //Object中toStirng默认打印当前对象的地址值。
        System.out.println(p.toString());
        System.out.println(s.toString());
        System.out.println("---------------");
        //Object中equals默认比较两个对象的地址值
        System.out.println(p.equals(p));
        System.out.println(p.equals(s));
    }
}

测试结果

com.itheima.demo2_API阶段.object类.person@4554617c
com.itheima.demo2_API阶段.object类.student@74a14482
---------------
true
false

2.toString方法

2.1toString方法的概述

  • public String toString():返回该对象的字符串表示。
  • 在开发中,为了使展示的内容更有意义,经常根据对象属性重写toString方法,得到相应的字符串表现形式。
    直接使用输出语句输出对象名的时候,其实通过该对象调用了其toString()方法。
    • SYstem.out.println(对象)等同于SYstem.out.println(对象.toString())
    • 如果打印的的对象没有打印地址值,则说明该类已重写toString方法

2.2演示toString方法的应用

需求:通过Person类重写Object中的toString方法展示Person对象内容
//Person类代码

package com.itheima.demo2_API阶段.toString方法;

public class person {
    private String name;
    private  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;
    }

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

//测试类代码

package com.itheima.demo2_API阶段.toString方法;

public class test {
    public static void main(String[] args) {
        person p = new person();
        p.setName("张三");
        p.setAge(18);
        System.out.println(p); //已完成toString方法调用,没有打印地址值
        System.out.println(p.toString());// 用了toString方法
        String s = "abc";
        System.out.println(s);
    }
}

测试结果

person{name='张三', age=18}
person{name='张三', age=18}
abc

3.equals方法

3.1equals方法的概述

  • public boolean equals(Object obj):指示其他某个对象是否与此对象“相等”。
  • equals方法可以判断两个对象是否相同,如果要定义自己的比较规则,需要进行重写
    默认地址比较
    • 直接调用继承的equals方法,进行对象的比较
      对象内容比较
    • 子类中重写Object继承的equals方法
    • 一般根据成员属性进行比较
    • 步骤
      比较两个对象的地址值是否相同,如果相同,返回true
      如果参数为空,或者类型不一致,返回false
      将参数转换为当前类型
      比较两个对象的内容是否相同,并返回比较结果

3.2演示equals方法的应用

需求:通过学生类重写Object中的equals方法演示比较两个学生

//学生类代码

package com.itheima.demo2_API阶段.equals方法;

import java.util.Objects;

public class student {
    private String name;
    private int age;

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

    // equals 简化及优化写法
    @Override
    public boolean equals(Object o) {
        //  步骤1:比较两个对象地址值,如果一样,则相同
        if (this == o) {
            return true;
        }
        //步骤2:如果参数为空,或者类型不一致,则不相同
        if (o == null || this.getClass() != o.getClass()) {
            return false;
        }
        //步骤3:将参数转换为本类
        student s = (student) o;

        //步骤4:判断两个对象的属性内容是否一致,完全一致,则相同
        // return this.age == s.age && this.name.equals(s.name);
        //解决空指针问题
        return this.age == s.age && Objects.equals(this.name,s.name);



    }
}

测试类代码

package com.itheima.demo2_API阶段.equals方法;

public class test {
    public static void main(String[] args) {
        student s = new student("张三", 18);
        student s1 = new student("李四", 28);
        System.out.println(s.equals(s1));

        s1.setAge(18);
        s1.setName("张三");
        System.out.println(s.equals(s1));


    }
}

测试结果`

false
true

在IntelliJ IDEA中,可以利用快捷方式生成equals方法

点击Code菜单中Generate...,点击equals() and hashCode(),选择需要包含的成员变量并确定。

使用快捷键alt+insert,点击equals() and hashCode()选项,选择需要包含的成员变量并确定。


4.Objects类

4.1 Objects类的概述

java.util.Objects:Objects工具类,在JDK7添加的工具类,用来操作对象的类,由一些静态的实用方法组成,用来操作对象。

  • 由nullsave(空指针安全的)或nulltolerant(容忍空指针的)两类方法组成
  • 用于计算对象的hashCode(默认是根据地址值生成的值)、返回对象的字符串表示形式、比较两个对象。

4.2 常见功能

  • public static boolean equals(Object a, Object b):判断两个对象是否相等。
  • 源码
public static boolean equals(Object a, Object b) {  
    return (a == b) || (a != null && a.equals(b));  
}

在比较两个对象的时候,Object的equals方法容易抛出空指针异常,Objects类中的equals方法就优化了这个问题。

4.3演示Objects类中的equals方法

需求:演示Objects类与Object类中equals方法使用区别

//测试类代码

import java.util.Objects;

public class test {
    public static void main(String[] args) {
        //Object中的equals方法
        String s1 =null;
        String s2 ="abc";
        //s1.equals(s2); //java.lang.NullPointerException 会发生空指针异常
        //Objects中的equals方法
        System.out.println(Objects.equals(s1,s2));


    }
}

5 Date类

5.1Date类的概述

java.util.Date类 表示特定的瞬间,精确到毫秒。

Date类达的构造方法和成员方法,很多都已经过时,只有个别方法还有在使用。

5.2构造方法

  • public Date():
    • 从运行程序的此时此刻到时间原点经历的毫秒值,转换成Date对象,分配Date对象并初始化此对象,以表示分配它的时间(精确到毫秒)。
    • 简单理解:获取此时此刻(运行new Date()那一刻)距离原点时间毫秒值,所对应的在Date对象中。
  • public Date(long date):
    • 将指定参数的毫秒值date,转换成Date对象,分配Date对象并初始化此对象,以表示自从标准基准时间(称为“历元(epoch)”,即1970年1月1日00:00:00 GMT)以来的指定毫秒数。
    • 简单理解:获取距离远点时间指定毫秒值,,所对应的在Date对象中。

5.3常用方法

  • public long getTime() 把日期对象转换成对应的时间毫秒值。
  • public void setTime(long time) 把方法参数给定的毫秒值设置给日期对象

5.4演示Date类的使用

需求:Date类的构造方法与常用方法

//测试类代码

package com.itheima.demo2_API阶段.Date类;

import java.util.Date;

public class test {
    public static void main(String[] args) {
        Date d = new Date();
        System.out.println(d);
        d.setTime(0);
        System.out.println(d);
        System.out.println("----------");
        Date d2 = new Date(10);
        System.out.println(d2);
        System.out.println(d2.getTime());
    }
}

测试结果

Fri Mar 12 13:38:57 CST 2021
Thu Jan 01 08:00:00 CST 1970
----------
Thu Jan 01 08:00:00 CST 1970
10

6.DateFormat类

6.1 DateFormat类的概述

java.text.DateFormat 该类可以使得在Date对象与String对象之间进行来回转换

  • 格式化:按照指定的格式,把Date对象转换为String对象。
  • 解析:按照指定的格式,把String对象转换为Date对象。

6.2 构造方法

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

  • public SimpleDateFormat(String pattern):SimpleDateFormat构造方法,用给定的模式和默认语言环境的日期格式符号构造参数
  • 参数pattern是一个字符串,代表日期时间的自定义格式。
  • 常见格式:yyyyMMdd HH:mm:ss 或者 yyyy年MM月dd日 HH:mm:ss … 或者yyyyMMdd

6.3 常用方法

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

6.4演示日期对象的的格式化与解析

需求:演示Date类与字符串类型的格式化和解析

//测试类代码

package com.itheima.demo2_API阶段.DateFormat类;

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

public class test {
    public static void main(String[] args) {
        //格式化:Date-->String  format
        Date d = new Date(0); //新建一个date对象
        DateFormat df = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");//新建一个ssimmp对象
        String format = df.format(d);    // 把d传给df 并转换为string 
        System.out.println(format);
    }
}

输出结果

1970010108:00:00

7.Calendar类

7.1 Calendar类的概述

java.util.Calendar类表示一个“日历类”,可以进行日期运算。

注意事项:

  • 日历对象中的星期是从1-7来表示,1表示星期天。
  • 日历对象中的月份是从0-11来表示,0表示一月份。

7.2获取对象

Calendar类是一个抽象类,不能创建对象,我们可以使用它的子类:java.util.GregorianCalendar类

  • GregorianCalendar类有两种方式获取对象
    • 通过GregorianCalendar无参构造创建对象;
    • 通过Calendar的静态方法getInstance()方法获取GregorianCalendar对象
      • public static Calendar getInstance() 获取一个它的子类GregorianCalendar对象。

7.3常用方法

  • public int get(int field) 获取某个字段的值。field参数表示获取哪个字段的值,可以使用Calender中定义的常量来表示。
    Calendar.YEAR : 年
    Calendar.MONTH :月
    Calendar.DAY_OF_MONTH:月中的日期
    Calendar.HOUR:小时
    Calendar.MINUTE:分钟
    Calendar.SECOND:秒
    Calendar.DAY_OF_WEEK:星期

  • public void set(int field,int value) 设置某个字段的值

  • public void add(int field,int amount) 为某个字段增加/减少指定的值

7.4演示Calendar类的使用

需求:按照下述需求,演示Calendar类的构造方法与常用方法

1.获取当前日期对象,并展示当前日期详细时间。
2.设置当前日期对象为一个月以后的第一天,查看当时的详细时间。
3.将当前日期对象的月份增加100000分钟,查看当时的详细时间。

//测试类代码

public class Test {
    public static void main(String[] args) {
        //创建日历类的对象
        Calendar c1 = Calendar.getInstance();
        //System.out.println(c1);
        //展示日历类的内容
        showCalendar(c1);
        System.out.println("--------");
        //修改日历类的内容  public void set(int field,int value)
        Calendar c2 = Calendar.getInstance();
        c2.set(Calendar.YEAR, 2021);
        c2.set(Calendar.MONTH, 0);
        c2.set(Calendar.DAY_OF_MONTH, 1);
        c2.set(Calendar.HOUR_OF_DAY, 00);
        c2.set(Calendar.MINUTE, 00);
        c2.set(Calendar.SECOND, 00);
        showCalendar(c2);
/*        c2.set(Calendar.DAY_OF_WEEK,1);
        showCalendar(c2);*/
        System.out.println("--------");
        //修改日历的内容  public void add(int field,int amount)
        c2.add(Calendar.YEAR, 1);
        c2.add(Calendar.MONTH, 11);
        c2.add(Calendar.DAY_OF_MONTH, 30);
        c2.add(Calendar.HOUR_OF_DAY, 23);
        c2.add(Calendar.MINUTE, 59);
        c2.add(Calendar.SECOND, 59);
        showCalendar(c2);
        /*
        c2.add(Calendar.MONTH, 13);
        showCalendar(c2);
        */
    }

    public static void showCalendar(Calendar c) {
        //  public int get(int field)
        int year = c.get(Calendar.YEAR);
        int month = c.get(Calendar.MONTH);
        int day = c.get(Calendar.DAY_OF_MONTH);
        //int hour = c.get(Calendar.HOUR);//12小时制,不好
        int hour = c.get(Calendar.HOUR_OF_DAY);//24小时制
        int minute = c.get(Calendar.MINUTE);
        int second = c.get(Calendar.SECOND);
        System.out.println(year + "年" + ++month + "月" + day + "日" + hour + ":" + minute + ":" + second + "秒");
        String week = getWeek(c);
        System.out.println("这一天是" + week);
    }

    public static String getWeek(Calendar c) {
        String[] weeks = {"星期天", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"};
        int week = c.get(Calendar.DAY_OF_WEEK);
        String weekStr = weeks[--week];
        return weekStr;
    }
}

输出结果

202131214:26:49秒
这一天是星期五
--------
2021110:0:0秒
这一天是星期五
--------
2022123123:59:59秒
这一天是星期六

进程已结束,退出代码0

8.Integer类(重点)

8.1 Integer类的概述

int类型对应包装类,包装一个对象中的原始类型 int 的值

8.2Integer类构造方法

  • public Integer(int value) 根据 int 值创建 Integer 对象(过时)
  • public Integer(String s) 根据 String 值创建 Integer 对象(过时)

8.3Integer类常用方法

  • public static Integer valueOf(int i) 返回表示指定的 int 值的 Integer 实例
  • public static Integer valueOf(String s) 返回保存指定String值的 Integer 对象

8.4演示Integer构造方法和常用静态方法

需求:演示Integer构造方法和常用静态方法

package com.itheima.demo2_API阶段.Integer类;

public class test {
    public static void main(String[] args) {
        Integer i1 = new Integer(10);
        System.out.println(i1);

        //字符串类型
        Integer i2 = new Integer("20");
        System.out.println(i2);

        Integer i3 = Integer.valueOf(30);
        System.out.println(i3);

        Integer i4 = Integer.valueOf("40");
        System.out.println(i4);


    }
}

输出结果

10
20
30
40

8.5基本类型与字符串之间的转换

  • 基本类型转换为String

    • 方式一:直接在数字后加一个空字符串 数据+""
    • 方式二:通过String类静态方法valueOf(Xxx)
  • String转换成基本类型

    • 方式一:通过包装类的静态方法valueOf(String s)将字符串转换给对应包装类,再自动拆箱
    • 方式二:通过包装类静态方法parseXxx()进行转换
      //对应包装类中静态parseXxx(String s)方法
      byte parseByte(String s) —字符串参数转为byte类型。
      short parseShort(String s) —字符串参数转为short类型。
      int parseInt(String s) —字符串参数转为int类型。
      long parseLong(String s) —字符串参数转为long类型。
      float parseFloat(String s) —字符串参数转为float类型。
      double parseDouble(String s) —字符串参数转为double类型。
      boolean parseBoolean(String s) —字符串参数转为boolean类型。
    • String转char类型不能使用上述转换方式
      • Character不存在valueOf(String s)静态方法和在parseXxx()静态方法
      • String转char类型String对象.charAt(0):
  • 演示基本类型与字符串之间的转换

需求:演示基本类型与字符串之间的转换

//测试类代码

package com.itheima.demo2_API阶段.Integer类;

import java.util.Objects;

public class test2 {
    public static void main(String[] args) {
        //基本数据类型转字符串
        int i = 10;
        String num1 = i + "";
        int num2 = 10;
        System.out.println(Objects.equals(num1, num2));

        //字符串转基本数据类型

        String num3 = "30";
        int num4 = Integer.parseInt(num3);
        System.out.println(num4 );

        System.out.println("------------------");
    }
}

测试结果

10
false
30
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值