Object类、常用API
Object类
概述
java.lang.Object类是java语言的根类,即所有类的父类,该类中描述的所有方法子类都可以使用。在对象实例化的时候,最终找的父类就是Object。且 一个类没有指定父类。则默认继承Object类、
object类中包含的的方法有11种,我们主要学习2个
- public String tostring() : 返回该对象的字符串表示
- public boolean equals(Object obj): 指示其他某个对象是否与此对象相等。
tostring方法
方法摘要
-
public string tostring(): 返回该对象的字符串表示。
tostring 方法返回该对象的字符串表示,其实该字符串内容就是对象的类型+@+ 内存地址
由于tostring 方法 返回的结果是内存地址,而在开发中,经常需要按照对象的属性得到相应的字符串表现形式。f
覆盖重写
如果不希望使用tostring方法的默认行为,则可以对它进行覆盖重写,
public class Person {
private String name;
private int age;
@Override
public String toString(){
return "Person{"+"name="+name+",age="+age+"}";
}
}
注意: 在我们直接使用输出语句输出对象名的时候,其实是通过该对象调用了其tostring() 方法。
quuals方法
方法摘要
- pubblic boolean equals(object obj): 指示其他某个对象时候与此对象相等
对象内容比较
public class Person01 {
private String name;
private int age;
@Override
public boolean equals(Object o){
if (this ==o)
return true;
if (o==null|| getClass() !=o.getClass())
return false;
Person01 person =(Person01)o;
return age= person.age && Object.equals(name,person.name);
}
}
日期时间类
Date类
概述
java.util.date 类表示特定的时间,精确到毫秒
根据Date类的描述,Date拥有多个构造函数,但是其中有未过时的构造函数可以把毫秒转成日期对象
- public Date(): 分配Date对象并初始化此对象,以表示分配它的时间
- public Data(long date) :分配date对象并初始化此对象,以表示自从标准基准时间。
由于我们处于东八区,所以我们的基准时间为1970年1月1日8时0分0秒
简单来说:使用无参构造,可以自动设置当前系统时间的毫秒时刻,
? 使用long类型的构造类型,可以自定义毫秒时刻
import java.util.Date;
public class DemoDate01 {
public static void main(String[] args) {
// 创建日期对象,把当前的时间转成日期对象
System.out.println(new Date());
// 创建日期对象,把当前的毫秒值转成日期对象
System.out.println(new Date(0L));
}
}
tips: 在使用println方法时,会自动欧诺个调用Date类中的tostring方法。Date类对Object类中的tostring方法进行覆盖重写,
所以结构为指定格式的字符串。
常用方法
Date类中的多数方法已经过时,常用的方法有
- public long getTime(): 把日期对象转换成对应的时间毫秒
DateFormat类
java.text.DateFormat 是日期/时间格式化子类的抽象类,我们通过这个类可以帮我们完成日期和文本之间的转换,就是可以在Date对象与String对象之间进行来回转换。
- 格式化: 按照指定的格式,从Date对象转化为String对象
- 解析: 按照指定的格式,从String 对象转换为Date对象。
构造方法
由于DateFormat为抽象类,不能直接使用,所以需要常用的子类java.text.SimpleDateFormat. 这个类需要一个模式来指定格式或解析的标准。构造方法为:
- public SimpleDateFormat(String pattern): 用给定的模式和默认语言环境的日期格式符号构造SimpleDateFormat、
- 参数pattern 是一个字符串,代表日期时间的自定义格式
格式规则
标识字母:
y 年 M 月 d日 H时 m分 s秒
备注:详细的格式规则,可以参考API文档
相关代码
public static void main(String[] args) {
DateFormat format =new SimpleDateFormat("yyyy-MM-dd HH-mm-ss");
}
常用方法
使用format方法的代码为:
将Date对象转化为string
public static void main(String[] args) {
// 把Date对象转换成string
Date date=new Date();
// 创建日期格式化对象,在获取格式化对象时可以指定风格
DateFormat format =new SimpleDateFormat("yyyy-MM-dd HH-mm-ss");
String str =format.format(date);
System.out.println(str);
}
parse 方法
将string转化为date对象
public static void main(String[] args) throws ParseException {
// 通过simpleDateFormate来设置转换时间的类型
DateFormat df =new SimpleDateFormat("yyyy年MM月dd日");
String str ="2018年12月11日";
// 将string 转化为Date对象
Date date =df.parse(str);
System.out.println(date);
}
小练习 : 根据输入的出生日期计算一个人已经出生的天数
public class DemoDate02 {
public static void main(String[] args) throws ParseException {
// 获取出生日趋,键盘出入
System.out.println("请输入出生日期 格式 :yyyy-MM-dd");
String birthdayString =new Scanner(System.in).next();
// 将字符串日期转化为date对象
// 创建simpledateformate对象,设置日期模式
DateFormat df =new SimpleDateFormat("yyyy-MM-dd");
// 调用parse方法将字符串转化为日期对象
Date birthdaydate =df.parse(birthdayString);
// 获取当前的日期对象
Date todayDate=new Date();
// 将两个日期对象转化为毫秒值,date类的方法getTime
long birthdayDate =birthdaydate.getTime();
long todaySecond =todayDate.getTime();
long secone =todaySecond-birthdayDate;
if (secone < 0) {
System.out.println("未出生");
}else{
System.out.println(secone/1000/60/60/24);
}
}
}
StringBuilder 类
字符串拼接问题
由于String类的对象内容不可改变,所以每当进行字符串拼接时,总是会在内存中创建一个新的对象。
在API中对String类有这样的描述: 字符串是常量,它们的值在创建后不能被更改。
StringBuilder类
又被称为可变字节序列,它是一个类似于String的字符串缓冲区,通过某些方法调用可以改变该序列的长度和内容。
原来StringBulider是一个字符串的缓冲区,即它是一个容器,可以装很多字符串,并且能够对其中的字符串进行各种操作。
常用的两个方法
append方法
- 添加任意类型数据的字符串形式,并返回当前对象自身。
- append具有多种重载形式,可以接收任意类型的参数。
public static void main(String[] args) {
StringBuilder builder=new StringBuilder();
StringBuilder builder2=builder.append("hello");
// 通过append 方法添加数据
System.out.println("Build"+builder);
System.out.println("build2"+builder2);
System.out.println(builder==builder2);
// 在开发中会遇到调用一个方法后,返回一个对象的情况,然后使用返回的对象继续调用方法
builder.append("world");
builder.append("100");
builder2.append("world").append("100");
System.out.println(builder==builder2);
}
}
tostring方法
通过toString方法,stringbuilder对象将会转换为不可变得string对象。
public class Demo06 {
public static void main(String[] args) {
StringBuilder sb =new StringBuilder("hello").append("world").append("java");
String str =sb.toString();
System.out.println(sb);
}
}
包装类
概述
java提供了两个类型系统,基本类型和引用类型,使用基本类型在于效率,然而很多情况下,会创建对象使用,因为对象可以做很多的功能,如,如果想要我们的基本类型像对象一样操作。就可以使用基本类型对应的包装类。
基本类型 | 对应的包装类(位于java.lang包中) |
---|---|
byet | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
装箱与拆箱
基本类型与对应的包装类对象之间,来回转换的过程称为“装箱”与“拆箱”:
- 装箱: 从基本类型转换为对应的包装类对象。
- 拆箱:从包装类对象转换为对应的基本类型。
基本数值--》 包装对象
Integer i =new Integer(4); // 使用构造函数
Integer iii= Integer.valueof(4);
包装对象--> 基本数值
int num =i.intvalue();
自动装箱与自动拆箱
jdk1.5之后,基本类型与包装类的装箱、拆箱动作可以自动完成。