1.Object获取字节码对象
通常将类中的成员变量、构造方法 、get/set方法给出后,可以通过3种方式获取字节码对象。
例如给出Teacher类、构造方法 、get/set方法给出后:获取
方式1:通过Object类的getClass()方法获取
//实例化对象的方法getClass来获取
Teacher t = new Teacher(); //将Teacher类实例化,创建对象
Class clazz = t.getClass(); //通过对象为Class的对象来获取,同时使实例化对象的getClass()来获取
方式2:通过类名调用属性class来获取
//通过类名的属性class来获取
Class clazz2 = Teacher.class;
方式3:通过Class类的静态方法forName()来获取
Class clazz3 = Class.forName("通过文件路径来获取");
同时三种方式所获取的字节码对象地址是一样的
2.toString方法
将所给对象返回为字符串的形式
由于toString方法返回的结果是内存地址,而在实际开发中,我们需要的是对于的字符串形式,因此就需要对其进行重写。eclipse的resource中已经提供了toString重写的方法。
package com.itheima_01;
/*
* String toString() : 返回该对象的字符串表示
* return getClass().getName() + "@" + Integer.toHexString(hashCode());
* getClass():返回一个字节码对象
* Integer.toHexString():返回指定参数的十六进制字符串形式
* hashCode():返回该对象的哈希码值(内部地址)
* boolean equals(Object obj)
*
*/
public class ObjectDemo {
public static void main(String[] args) {
Student s = new Student();
s.name = "zhangsan";
s.age = 18;
System.out.println(s.toString());//com.itheima_01.Student@737951b0
System.out.println(s);//说明我们输出一个对象就是默认输出这个对象的toString()方法
}
}
class Student extends Object {
String name;
int age;
@Override
public String toString() {
return "Student [name=" + name + ", age=" + age + "]";
}
}
3.equals()方法
用于比较两个对象是否相同,它其实就是使用两个对象的内存地址在比较。在实际开发中,要比较两个对象是否相同,经常会根据对象中的属性值进行比较,因此通常需要子类重写equals方法,从而实现属性值的比较。
package com.itheima_01;
import java.util.ArrayList;
/*
* boolean equals(Object obj)
* 使用==来比较两个对象是否相等,则比较地址值是否相等
*/
public class ObjectDemo2 {
public static void main(String[] args) {
Person p = new Person("zhangsan",18);
Person p2 = new Person("zhangsan",19);
//boolean flag = p.equals(p2);
boolean flag = p.equals(new ArrayList());
System.out.println(flag);
}
}
class Person {
String name;
int age;
public Person(String name,int age) {
this.name = name;
this.age = age;
}
@Override
public boolean equals(Object obj) {
//提高效率
if (this == obj)
return true;
if (obj == null)
return false;
//提高健壮性
if (getClass() != obj.getClass())
return false;
//向下转型
Person other = (Person) obj;
if (age != other.age)
return false;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
return true;
}
4.System类
其不能实例化
几个常用的:
static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length) 复制数组
static long currentTimeMillis() :返回以毫秒为单位的当前时间
static void exit(int staus):终止当前运行的JVM
long now = System.currentIimeMillis(); 返回当前的时间 1970年1月1日到现在的毫秒值
System.out.println(now);
如果要测试一个代码运行的时间;可采用结束的毫秒值减去开始的时间的毫秒值。
复制数组的方法:通常分为原数组和目标数组两个,通过指定要复制的部分和在那个位置开始复制,即可获得相应的数组,类似于截取获取。
//源数组
int[] src = {1,2,3,4,5};
//目标数组
int[] dest = new int[5];
System.arraycopy(src, 2, dest, 0, 3);
//遍历目标数组
for (int i = 0; i < dest.length; i++) {
System.out.print(dest[i]);
}
5.日期类
1).Date:表示特定的瞬间,精确到毫秒。
Date类的构造方法:
Date():创建的是一个表示当前系统时间的Date对象
Date():根据”指定时间“创建Date对象
System.currentTimeMillis():返回的是当前系统时间,1970-1-1至今的毫秒数
如:
Date d = new Date();
System.out.println(d); //返回现在的时间 类似这样的:Thu Aug 26 14:17:28 CST 2049
//可以采用转换的方式将其变成方便我们中国人看懂的
System.out.println(d.toLocaleString()); //采用toLocaleteString()方法
//同时还可以采用毫秒值进行修整时间
Date d2 = new Date(1000 * 60 * 60 * 24);//时区 有时差
System.out.println(d2.toLocaleString());
2)Date类常用方法
1秒 = 1000毫秒
注意:它们返回的是毫秒值,如果需要将时间转成我们想要的时间需要进行运算
void setTime(long time) //设置时间
long getTime() //获取时间
//通过新建Date对象,我们可以将其转成毫秒值进行或者转成我们能看到的时间
Date d = new Date();//默认当前系统时间
//d.setTime(1000 * 60 * 60 * 24 * 2);
System.out.println(d.toLocaleString());
System.out.println(d.getTime());//172800000
//同时如果我们知道毫秒值,也可以将其转成我们能看到的时间
d.setTime(172800000L);
System.out.println(d.toLocaleString());
3)DateFormat类 & SimpleDateFormat
DateFormat:是日期、时间格式化子类的抽象类。它可以解析日期或时间。
日期、时间格式化子类:SimpleDateFormat类 可以将日期转成文本格式或者文本到日期和标准化
SimpleDateFormat(String pattern) //给出特定的模式,它就会帮你转成你要的形式
String format(Date date):将一个Date格式化为日期/时间字符串
Date parse(String source):从给定字符串的开始解析文本,生成一个日期
如:
//指定要格式化的形式 yyyy年MM月dd日
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()) //转成我们能看的形式 2049-08-26 13:39:12
指定模式的:
//使用指定的模式进行对象的构建
//1999年9月1日
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日");
//格式化
Date date = new Date();
String s = sdf.format(date);
System.out.println(s);//2049年08月26日
//解析
Date d = sdf.parse("2049年08月26日");
System.out.println(d.toLocaleString());
默认系统时间模式的,如
//使用默认模式进行对象的构建
SimpleDateFormat sdf = new SimpleDateFormat();
//创建日期对象
Date date = new Date();
//格式化 把日期对象转换成字符串
String s = sdf.format(date);
System.out.println(s);//49-8-26 下午1:29
//解析 把字符串转换成日期对象
Date d = sdf.parse("49年9月26日 下午1:29");
System.out.println(d.toLocaleString());
需求:求出你来这个世界上多少天
//思路:首先指定时间,时间为字符串形式的,通过格式化日期,可以得到想要的时间日期,再获取它的毫秒值,相减即可得到
public class SimpleDateFormatTest {
public static void main(String[] args) throws ParseException {
//出生日期
String birthday = "1998-01-01";
//今天日期
String now = "2000-01-01";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
//将字符串转换成日期对象
Date d1 = sdf.parse(birthday);
Date d2 = sdf.parse(now);
//将日期对象转换成long类型
long l = d1.getTime();
long l2 = d2.getTime();
System.out.println((l2 - l) / 1000 / 60 / 60 / 24);
}
}
4)Calendar类
通常有:
Calendar c = Calendar.getInstance(); //返回当前时间
void set(int field, int value) :把指定的字段修改成指定的值
void add(int field, int amount): 在指定的字段上加上指定的值
int get(int field) // 返回给定日历字段的值
如:
当前的日期:通常可以采用当前的日期,再进行获取相应的年月日,按格式输出
或者采用自己给定日期的形式,再用先用setTime将时间进行建立,再通过get进行相应的处理即可。
public class CalendarDemo {
public static void main(String[] args) {
Calendar c = Calendar.getInstance();
c.add(Calendar.DAY_OF_MONTH, -1); //在原有的日期上减1
int year = c.get(Calendar.YEAR);
int month = c.get(Calendar.MONTH) + 1;
int day = c.get(Calendar.DAY_OF_MONTH);
System.out.println(year + "年" + month + "月" + day + "日");
}
}
6.正则表达式
参考笔记