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
将参数转换为当前类型
比较两个对象的内容是否相同,并返回比较结果
- 直接调用继承的equals方法,进行对象的比较
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);
}
}
输出结果
1970年01月01日 08: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;
}
}
输出结果
2021年3月12日14:26:49秒
这一天是星期五
--------
2021年1月1日0:0:0秒
这一天是星期五
--------
2022年12月31日23: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