Java新手:Object类、System类、Date类、SimpleDateFormat类和Calendar类

Object类

Object类是java语言中的根类,是所有类的父类,Object中描述的方法,子类都可以使用。

  1. 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()方法

  1. 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包下

  1. 构造方法:
    Date() :创建的是一个表示当前系统时间的Date对象
    Date(long date) :根据"指定时间(是一个毫秒值,0加上毫秒值到哪天就是哪天)"创建Date对象
  2. 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是一个子类,允许进行格式化和标准化,通过这个类,帮助我们完成日期和文本之间的转换。

  1. 构造方法:
    SimpleDateFormat() :使用默认的模式进行对象的构建 SimpleDateFormat(String pattern) :使用的指定的模式进行对象的构建
  2. 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是日历类,该类将所有可能用到的时间信息封装为静态成员变量,方便获取。

  1. calendar是抽象类,在创建对象时并非直接创建,而是通过静态方法创建,返回子类对象。
  2. 创建对象:static Calendar getInstance();返回当前时间。(Calendar c =Calendar.getInstance();)
  3. void set(int field, int value) :把指定的字段修改成指定的值
  4. void add(int field, int amount): 在指定的字段上加上指定的值
  5. 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日

猜你喜欢

转载自blog.csdn.net/w_e_i_1201/article/details/83582297