## Object类
*是所有类的父类
*所有的对象以及数组都是实现了这个类的方法
String toString(): 返回该对象的字符串表示.
直接打印对象的名字就是调用对象的toString方法 例如:打印对象Person p 相当打印p.toString
而直接打印对象的地址值没有意义,所以需要重写Object类的toString()方法.
*重写格式:return "Person{name = name,age = age}"再字符串拼接
看一个类是否重写了toString方法,直接打印这个类的对象就可以(没有意义,只需要记住我们的类要重写就行 )
*例如Random没有重写 而Scanner进行了重写
boolean equals(): 指示其他某个对象是否与此对象"相等"
*方法源码 public boolean equals(Object obj){
return (this == obj);
}
obj可以传递任意对象
==是比较符号 返回boolean值
基本数据类型比较的是值
引用类型比较的是对象的地址值
*重写equals方法:
问题:
隐含一个多态
多态的弊端:无法使用子类中特有的内容(属性和方法)
Object obj = p2 = new Person("jack",18);
解决:
使用向下转型
public boolean equals(Object obj){
//传递本身比较
if(obj == this){
return true;
}
if(obj == null){//提高程序的效率
return false;
}
if(obj instanceof Person){
Person p = (Person)obj;
boolean b = this.name.equals(p.name)&&this.age.equals(p.age);
return b;
}
return false;
}
Objects中的equals,可以容忍空指针异常.
## Date
*java.util.Date类,表示特定的瞬间,精确到毫秒
毫秒值的作用:可以对时间和日期进行计算
时间原点(0毫秒):1970-1-1 00:00:00
毫秒转换为日期(天) /1000/60/60/24
构造方法:
空参数:Date() Date date = new Date();
带参数:Data(long date):传递毫秒值,把毫秒转换为Date日期 Date date1 = new Date(1533092163666L);
long getTime():把日期转换为毫秒值
返回自1970-1-1-0-0-0以来的对象的毫秒值
System.out.println(date.getTime()); //1533092163666
## DateFormat
*java.text.DateFormat
继承自Format(抽象类)
作用:格式化(日期->文本),解析(文本->日期)
*成员方法
String format(Date date)
按照指定的模式,把Date日期格式化为符合模式的字符串
Date parse(String source) 把符合模式的字符串转换为date对象
parse方法声明了一个异常,解析异常
如果字符串和构造方法的模式不一样,程序就会抛出异常
要么处理这个一样,要么throws继续抛出这个异常
DateFormat是一个抽象类,无法直接创建对象使用,可以使用SimpleDateFormat自类创建
java.text.SimpleDateFormat extends DateFormat
*构造方法:
SimpleDateFormat(String parttern)
用给定的模式和默认环境的日期格式符号构造
参数:
String pattern:传递指定的模式
一种格式:"yyyy-MM-dd HH:mm:ss"
使用步骤:1.创建对象:SimpleDateFormat
2.调用方法 parse
format
### 练习:计算一个人出生了多少天.
*思路:
1.新建一个SimpleDateFormat对象(sdf),Scanner对象
2.键盘录入 出生日期(String)格式和SimpleDateFormat一样
3.利用sdf的parse()方法解析字符串为date对象
4.使用getTime()方法得到两个时间的毫秒值
5.计算差值/1000/60/60/24
public static void main(String[] args){
//新建一个SimpleDateFormat对象(sdf),Scanner对象
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Scanner sc = new Scanner(System.in);
System.out.println("请输入出生日期:xxxx-xx-xx:")
//键盘录入 出生日期(String)格式和SimpleDateFormat一样
String birthdayDateString = sc.nextLine();
//利用sdf的parse()方法解析字符串为date对象
Date birthdayDate = sdf.parse(birthdayDateString);//记得抛出异常
//使用getTime()方法得到两个时间的毫秒值
long todayTime = new Date().getTime();
long birthdayTime = birthdayDate.getTime();
long diffTime = todayTime - birthdayTime;
//计算差值/1000/60/60/24
System.out.println("出生的天数为:"+diffTime/1000/60/60/24)
}
## Calendar
*java.util.Calendar
*日历类,是一个抽象类,里边提供了很多操作日历字段的方法
*无法直接创建对象使用,里边有静态方法,getInstance(),该方法返回了Calendar类的子类对象
*static Calendar getInstance():使用默认时区和语言环境获取一个日历
*常用的成员方法
int get(int field):返回给定日历字段的值(注意月份要加一)
void set(int field,int value):将给定的日历字段设置为给定值
有个重载的方法:set(2018,08,08);//设置年月日
abstract void add(int field, int amount):根据日历的规则,为给定的日历字段添加或减去指定的时间量。
Date getTime():返回一个表示此Calendar时间值(从历元到现在的毫秒偏移量)的Date对象。就是把日历变成日期
## System
*java.lang.System
*类中提供了大量的静态方法,所以可以通过类名直接使用
*常用方法:
*static long currentTimeMillis():返回以毫秒值为单位的当前时间.
*static void arraycopy(Object src,int srcPos,Object dest,int destPos,int length):复制一个数组
*src:源数组
*srcPos:起始索引
*dest:目标数组
*destPos:目标数组的起始位置
*length:要复制的数组元素的数量
## StringBuilder
*java.lang.StringBuilder
*字符串缓冲区,可以提高字符串操作的效率(看成一个长度可以变化的字符串)
*底层也是一个数组,但是没有被final修饰,可以改变长度
*StringBuilder在内存中始终是一个数组,占用的空间少,效率高一些如果超出了容量,会自动扩容(默认16字符空间)
*StringBuilder与StringBuffer基本相同,但是后者是线程安全带额
*构造方法:
*空参数:StringBuilder()
*带参数:StringBuilder(String Str)
*成员方法:
*StringBuilder append(...):向StringBuilder中添加任意类型的数据
append方法返回的是this,使用append方法无需接收返回值
*toString():转换为String对象
StringBuilder和String可以互相转换
String->StringBuilder :可以使用StringBuilder的构造方法
StringBuilder->String :使用StringBuilder的toString方法
*reverse():反转
## 包装类
*java.lang中,八种
*除了int->Integer,char->Character其他对应的都是首字母大写.
*装箱与拆箱
*装箱:基本数据类型->对应的包装类对象
*构造方法:
Integer(int value)
Integer(String s)
NumberFormatException:s必须为数值型的,不然会报数字格式化异常
*静态方法:
static Integer valueOf(int i)
static Integer valueOf(String s)
*拆箱:包装类对象->基本数据类型
*成员方法:
int intValue():以int类型返回该Integer的值
*自动装箱与自动拆箱
*基本类型的数据和包装类之间可以自动的相互转换
jdk1.5之后出现的新特性
*自动装箱
Integer in = 1;(相当于 Integer in = new Integer(1) ;)
*自动拆箱
in = in +2;(相当于 in = in.intValue()+2 = 3 ;)
*字符串与基本类型之间的转换
*基本类型转字符串:基本类型->String
*基本类型的值+""(最简单的方法):常用
*包装类的静态方法toString(参数),不是Object的toString重载
*包装类的静态方法valueOf(参数)
*字符串转基本类型:
*使用包装类的静态方法parseXXX("对应类型的字符串")
例如Integer: static int parseInt(String s);