Object类
Object类是java语言中的根类,是所有类的父类,Object中描述的方法,子类都可以使用。
- String toString()方法:返回该对象的字符串表示,返回的结果是内存地址,在实际开发中,经常需要按照对象的属性得到相应的字符串表示形式,因此需要重写该方法。
public static void main(String[] args) {
Student s =new Student();
System.out.println(s);
System.out.println(s.toString());
}
输出结果:
com.ArrayListTest.Student@5f4fcc96
com.ArrayListTest.Student@5f4fcc96
1、查看源码:return getClass().getName()+"@"+Integer.toHexString(hashCode());//返回类的全名+@+内存地址
getClass():返回一个字节码对象
Integer.toHexString():返回指定参数的十六进制字符串形式(静态方法)
hashCode():返回该对象的哈希码值(内存地址)
2、在MyEclipse中,在类里右键resource,选择Generate toString(),即可重写toString方法,
public class Student {
String name;//姓名
int age;//年龄
@Override
public String toString() {
return "Student [name=" + name + ", age=" + age + "]";
}
}
注意: 输出一个对象就默认输出这个对象的toString()方法
- boolean equals(Object obj):用来比较两个对象是否相同,使用两个对象的内存地址在比较,在实际开发中,经常会根据对象中的属性值进行比较,因此需要子类重写equals方法。
1、查看源码:return (this ==obj);
2、在MyEclipse中,在类里右键resource,选择Generate hashCode() and equals(),即可重写这两个方法,
public class Student {
String name;//姓名
int age;//年龄
@Override//重写equals
public boolean equals(Object obj) {
if (this == obj)//如果这两个对象的地址值一样,就不比较成员了
return true;
if (obj == null)//传递进来的对象为空
return false;
if (getClass() != obj.getClass())//创建的对象的类class一样,比较字节码文件是否相同
return false;
//向下转型,父类型看不见子类的成员
Student other = (Student) 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;
}
public Student(String name, int age) {
this.name = name;
this.age = age;
}
}
public static void main(String[] args) {
Student s1 =new Student("张三",18);
Student s2 =new Student("张三",19);
Student s3 =new Student("张三",18);
System.out.println(s1.equals(s1));
System.out.println(s1.equals(s2));
System.out.println(s1.equals(s3));
System.out.println(s1.equals(new ArrayList()));
}
输出结果:
true
false
true
false
System类
System类是java.lang包下的,包含了一些有用的类字段和方法,不能被实例化,方法都是静态修饰的。
- static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length) : 从src源数组的srcPos(起始索引位置)索引开始,复制length个元素,从destPost(目标数组的起始索引数组)位置开始将这些元素放至到dest数组中,索引不能越界
public static void main(String[] args) {
int[] src = {1,2,3,4,5};
int[] dest = new int[5];
System.arraycopy(src, 1, dest, 2, 3);
for(int i=0;i<dest.length;i++){
System.out.print(dest[i]);
}
}
输出结果:
00234
- static long currentTimeMillis() : 返回以毫秒为单位的当前系统时间,想对于1970-1-1 00:00:00时间,1970-1-1 00:00:00(相当于0)
1970-1-1 00:00:01对应1000(1000毫秒=1秒)
查看for循环的效率:
public static void main(String[] args) {
long start =System.currentTimeMillis();
for(int i=0;i<1000;i++){
System.out.println(i);
}
long end =System.currentTimeMillis();
System.out.println(end-start);
}
输出结果:用了45毫秒
- static void exit(int status) : 终止当前正在运行的 Java 虚拟机,0表示正常终止,非零表示异常
public static void main(String[] args) {
for(int i=0;i<1000;i++){
System.out.println(i);
if(i==5){
System.exit(0);
}
}
}
输出结果:
0
1
2
3
4
5
- static void gc() : 运行垃圾回收器,如果我们不调用,虚拟机会自动调用。
Date类
Date:表示特定的瞬间,精确到毫秒,可以通过方法来设定自己所表示的时间,可以表示任意的时间。在java.util包下
- 构造方法:
Date() :创建的是一个表示当前系统时间的Date对象
Date(long date) :根据"指定时间(是一个毫秒值,0加上毫秒值到哪天就是哪天)"创建Date对象 - Date的常用方法:
由毫秒值转成Date
1、void setTime(Long time)
2、Date(Long date)
由Date 转成毫秒值(Date对象获取到它对应的毫秒值):
long getTime( )
toLocaleString()方法已经过时,不再多看。
public static void main(String[] args) {
Date d=new Date();
System.out.println("d="+d.toLocaleString());//返回2018-10-31 23:45:49
Date d2 = new Date(1000*60*60);
System.out.println("d2="+d2.toLocaleString());//返回1970-1-1 9:00:00
System.out.println(d.getTime());//返回的1541000749213(毫秒值)
d.setTime(172800000L);//毫秒值转Date
System.out.println("d=="+d.toLocaleString());//返回的1970-1-3 8:00:00
}
DateFormat类和SimpleDateFormat
DateFormat是日期/时间格式化子类的抽象类,在java.text包下,抽象类不能创建对象,只能看它的静态方法或创建子类对象。SimpleDateFormat是一个子类,允许进行格式化和标准化,通过这个类,帮助我们完成日期和文本之间的转换。
- 构造方法:
SimpleDateFormat() :使用默认的模式进行对象的构建 SimpleDateFormat(String pattern) :使用的指定的模式进行对象的构建 - Date与String之间的转换:
1、Date 转换成String:String format(Date date)
2、String转换成date :Date parse(String source)
public static void main(String[] args) throws ParseException {
SimpleDateFormat sdf = new SimpleDateFormat();
Date d =new Date();
String s =sdf.format(d);
System.out.println("s="+s);
Date date =sdf.parse(s);
System.out.println("date="+date);
SimpleDateFormat sdf1 =new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
Date d1=new Date();
String s1 = sdf1.format(d1);
System.out.println("s1="+s1);
Date date1 =sdf1.parse(s1);
System.out.println("date1="+date1);
}
输出结果:
s=18-11-1 上午12:00
date=Thu Nov 01 00:00:00 CST 2018
s1=2018年11月01日 00:00:26
date1=Thu Nov 01 00:00:26 CST 2018
注意 :解析的字符串,模式必须和构造对象的模式一样
Calendar类
Calendar是日历类,该类将所有可能用到的时间信息封装为静态成员变量,方便获取。
- calendar是抽象类,在创建对象时并非直接创建,而是通过静态方法创建,返回子类对象。
- 创建对象:static Calendar getInstance();返回当前时间。(Calendar c =Calendar.getInstance();)
- void set(int field, int value) :把指定的字段修改成指定的值
- void add(int field, int amount): 在指定的字段上加上指定的值
- int get(int field) // 返回给定日历字段的值
public static void main(String[] args) throws ParseException {
Calendar c =Calendar.getInstance();
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 + "日");
c.set(Calendar.YEAR, 2017);
c.add(Calendar.MONTH, -1);
int year1 = c.get(Calendar.YEAR);
int month1 = c.get(Calendar.MONTH) + 1;
int day1 = c.get(Calendar.DAY_OF_MONTH);
System.out.println(year1 + "年" + month1 + "月" + day1 + "日");
}
输出结果:
2018年11月1日
2017年10月1日