一、Object类
Object类是所有java类的根类。在这里有几个重要的方法
1.Class getClass():返回此Object的运行时类
2.
boolean equals
(Object obj):和其他对象比较,比较它们之间的地址是否一样
3.int hashCode(): 返回该对象的哈希码值.(地址值的十进制表示) 可以和Integer.toHexString(int)使用查看一个地址的十六进制值
4.String toString() 一个对象的字符串化输出。
1).Class getClass() 的使用方法:
//方式1 通过Object类的getClass()方法获取
//方式2 通过类名调用属性class 来获取
Teacher t = new Teacher();
Class clazz = t.getClass();
System.out.println(clazz);//包含了全路径的类名
//方式2 通过类名调用属性class 来获取
Class clazz2 = Teacher.class;
//方式3 通过Class类的静态方法forName()来获取
Class clazz3 = Class.forName("com.itheima01.objects.Teacher");
System.out.println(clazz == clazz2);
System.out.println(clazz == clazz3);
Teacher t2 = new Teacher();
System.out.println(t.getClass() == t2.getClass());
2) equals():没有重写的时候,
是比较两个对象的地址。注意是地址,不是内容。相当于"= ="号的比较
来自Object类equals()的源码:
public boolean equals(Object obj) {
return (this == obj);
}
以下的案例很好说明equals是比较地址值,而不是比较内容值
/*
* String toString() 返回字符串的对象
* getClass() 返回一个字节码对象
* Integer.toHexString(int num):返回一个十六进制的整数
* Object.hasHashCode():返回代表对象地址值的hashCode值
* toString()方法快捷生成:alt+shift+s+s
*/
public class ObjectDemo {
public static void main(String[] args) {
Student s1 = new Student("zhangsan", 18);
Student s = s1;
Student s2 = new Student("zhangsan",18);
System.out.println("Obejct中有一个hasHashCode(),这个方法是一个对象的地址的十进制表示:");
System.out.println("对象s的哈希值:"+s.hashCode());
System.out.println("对象s1的哈希值:"+s1.hashCode());
System.out.println("对象s2的哈希值:"+s2.hashCode());
System.out.println("s和s1比较:"+s.equals(s1));
System.out.println("s1和s2比较:"+s1.equals(s2));
}
}
输出结果:
Obejct中有一个hasHashCode(),这个方法是一个对象的地址的十进制表示:
对象s的哈希值:118352462
对象s1的哈希值:118352462
对象s2的哈希值:1550089733
s和s1比较:true
s1和s2比较:false
3)toString():对象的字符串化。
System.out.println();方法执行的是Object.toString();
输出一个对象的时候,会输出这个对象的全路径类名+@+哈希地址值
二、System类
1.static void arrayCopy(Object src,int srcPos,Object dest,int destPos,int length);
src:源数组
srcPos:从源数组复制元素的开始索引位置
dest:目标数组
destPos: 目标数组开始黏贴源素组元素的位置:
length:这次复制的元素个数
2.static long currentTimeMillis() 返回以毫秒为单位的当前时间
应用1:用来计算一个算法所花费的时间
long start =System.currentTimeMills();
//算法:
for(int i = 0;i<1000000;i++)
{
System.out.println("Hello World");
}
long end = System.currentTimeMills():
int time = end - start;
//i遍历范围 所花费的时间
10000000: 70002ms
1000000 : 7277ms
100000 : 779ms
10000 : 115ms
1000 : 56ms
100 : 5ms
3.
static void exit(int staus)
:终止Java虚拟机(status:惯例上0表示终止)
三、日期类:
1.Date类:
1).Date: 表示特定的瞬间,精确到毫秒,他可以通过方法来设定自己所表示的时间,可以表示任意的时间
Date() :创建的是一个表示当前系统时间的Date对象
Date(long date) :根据"指定时间"创建Date对象
2).void setTime(long time)
long getTime()
2.SimpleDateFormat:
1)格式化:date ->String:用 String sdf.format();
2)解析: String->date:用sdf.parse(“要变成的日期格式”);
public class SimpleDateFormatDemo {
public static void main(String[] args) throws ParseException {
//method();
//method2();
//使用指定的模式进行对象的构建
//1999年9月1日 10:10:10
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
//格式化
Date date = new Date();
String s = sdf.format(date);
System.out.println(s);//2049年08月26日 13:39:12
//解析
Date d = sdf.parse("2049年08月26日 13:39:12");
System.out.println(d.toLocaleString());
}
四、Calendar类:
日历类:可以对日期进行增查改。来获得想要的效果
/*
* 第二题:分析以下需求,并用代码实现
要求:利用Calendar类的方法判断当前年是闰年还是平年
提示:
闰年:二月有29天
提示:将日期设置为3月1号,然后倒退1天至2月底,求出2月底是多少天
*/
public class MainApp {
public static void main(String[] args) {
Calendar c = Calendar.getInstance();
int year = c.get(Calendar.YEAR);
System.out.println(year);
c.set(Calendar.MONTH, 2);
c.set(Calendar.DAY_OF_MONTH, 1);
c.add(Calendar.DAY_OF_MONTH, -1);
int month = c.get(Calendar.MONTH);
int day = c.get(Calendar.DAY_OF_MONTH);
System.out.println((month+1)+"."+day);
}
}
五、正则表达式:
第三题:分析以下需求,并用代码实现
(根据描述写匹配手机号和邮箱的正则表达式)
1.根据描述写出正则表达式
(1)手机号正则:
第一位为1
第二位为3或4或5或7或8
第三~十一位为0~9的其中一个数字
(2)邮箱正则:以@分界
@ 符号左边为任意多个字母或数字
@ 符号右边为任意多个字母或数字+点符号+任意多个字母或数字
2.利用正则表达式完成以下需求:
(1)判断手机号"11600014387"是否符合手机的格式
(2)定义一个存放邮箱的字符串数组{"hhxx@163.com","18601066888","nxgw@yeah.net","jpql@sohu.com.cn","15115888028"}
利用正则表达式过滤出所有的邮箱,打印正确的邮箱
*/
public class MainApp {
public static void main(String[] args) {
String regex = "[1]{1}[34578]{1}\\d{9}";
String numStr = "16504698305";
boolean b = numStr.matches(regex);
System.out.println("\"11600014387\"是否符合手机的格式:"+b);
regex.toString();
String mailRegex = "\\w*@{1}\\w*.\\w*";
String[] strs= {"hhxx@163.com","18601066888","nxgw@yeah.net","jpql@sohu.com.cn","15115888028"};
for(String s:strs)
{
System.out.println(s+":"+s.matches(mailRegex));
}
}
3)toString():对象的字符串化。
System.out.println();方法执行的是Object.toString();
输出一个对象的时候,会输出这个对象的全路径类名+@+哈希地址值