三默网为您带来有关“Note_12 Object 类、常用API、包装类”的文章内容,供您阅读参考。

Note_12 Object 类、常用API、包装类

2023-01-21 19:17:27
一、Object 类
1.Object 类介绍
	* Object 类是所有类的父类,若一个类没有指定继承的类则继承Object。任一类都直接或间接继承于Object

2.Object 类的方法
	① toString()
		* 源码
			public String toString() {
				return getClass().getName() + '@' + Integer.toHexString(hashCode())
			}
		* 若不重写 toString() 则返回 对象类型 + @ + 地址的哈希值
		* 重写 toString()
			@Override
			public String toString() {
				return "Student{" +
						"name='" + name + '\'' +
						", age=" + age +
						'}';
			}
	② equals()
		* 源码
			public boolean equals(Object obj) {
				return (this == obj);
			}
		* 若不重写 equals() 则比较两个对象的地址值
		* 重写 equals()
			@Override
			public boolean equals(Object o) {
				//判断是否为同一个对象
				if (this == o) 
					return true;
				//判断是否为空,是否为同一引用类型
				if (o == null || getClass() != o.getClass()) 
					return false;
				//向下转型
				Student_equals that = (Student_equals) o;
				//返回内容的比较结果
				return age == that.age && Objects.equals(name, that.name);
			}
			
3.Objects 工具类
	* Objects.equals()
		public static boolean equals(Object a, Object b) {  
			return (a == b) || (a != null && a.equals(b));  
		}
	* Objects.equals()容忍空指针
		
二、常用API
1.Date 类
	① 时间原点
		格林威治:1970-01-01 00:00:00
		北京:1970-01-01 08:00:00
	② Date 类
		Date 类的大部分方法都已经过时,在 jdk1.1 以后由 Carendar 类取代
	③ 构造方法
		* public Date()
			分配Date对象并初始化此对象,以表示分配它的时间(精确到毫秒)。
		* public Date(long date)
			分配Date对象并初始化此对象,以表示自从原点以来经过的毫秒数。
	④ getTime()
		* 把日期对象转换成对应的时间毫秒值。
	⑤ 示例
		import java.util.Date;

		public class DemoDate {
			public static void main(String[] args) {
				Date date1 = new Date(1000 * 60 * 2);       //Thu Jan 01 08:02:00 CST 1970
				Date date2 = new Date(0);                     //Thu Jan 01 08:00:00 CST 1970

				//无参构造。表示当前时间L
				Date date3 = new Date();        //Wed May 29 13:41:42 CST 2019

				//将日期对象转为毫秒值
				long m = date3.getTime();       //1559108502853

				System.out.println(date1);
				System.out.println(date2);
				System.out.println(date3);
			}
		}
		
4.DateFormat 类
	① DateFormat 介绍
		* DateFormat 是一个抽象类,不能直接 new 对象,需要使用子类
	② SimpleDateFormat
		* 格式
			//用给定的模式和默认语言环境的日期格式符号创建SimpleDateFormat对象
			SimpleDateFormat sdf = new SimpleDateFormat(pattern);
		* 规则
			y ---> 年
			M ---> 月
			d ---> 日
			H ---> 时
			m ---> 分
			s ---> 秒
		* 方法
			format()
				格式化,按照指定的格式,从Date对象转换为String对象。
			parse()
				解析,按照指定的格式,从String对象转换为Date对象。
	③ 示例	
		import java.text.ParseException;
		import java.text.SimpleDateFormat;
		import java.util.Date;
		import java.util.Scanner;

		public class DemoDateFormat {
			public static void main(String[] args) throws ParseException {
				Scanner sc = new Scanner(System.in);
				System.out.println("请输入出生日期(格式:xxxx-xx-xx xx:xx:xx)");
				String s = sc.nextLine();
				//日期对象
				Date date = new Date();
				//格式化对象
				SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
				//格式化当前日期
				String format = sdf.format(date);
				System.out.println(format);

				//解析传入日期
				Date parse = sdf.parse(s);
				//计算出生毫秒数
				long l = date.getTime() - parse.getTime();


				//输出毫秒
				System.out.println(l);
				//输出年龄
				System.out.println(l / 1000 / 60 / 60 / 24 / 30 / 12);
			}
		}
	
5.Calendar 类
	① Calendar 类为抽象类,提供了 getIntence() 获取 Calendar 类的子类对象。
	② 常用方法
		* get(int field)
			返回给定日历字段的值。
		* set(int field, int value)
			将给定的日历字段设置为给定值。
		* add(int field, int amount)
			根据日历的规则,为给定的日历字段添加或减去指定的时间量。
		* getTime()
			返回一个表示此Calendar时间值(从历元到现在的毫秒偏移量)的Date对象。
	③ 成员常量
		YEAR				年
		MONTH				月(从0开始,可以+1使用)
		DAY_OF_MONTH		月中的天(几号)
		HOUR				时(12小时制)
		HOUR_OF_DAY			时(24小时制)
		MINUTE				分
		SECOND				秒
		DAY_OF_WEEK			周中的天(周几,周日为1,可以-1使用)
	④ 示例
		import java.util.Calendar;

		public class DemoCalendar {
			public static void main(String[] args) {
				//创建日历对象
				Calendar c = Calendar.getInstance();
				//这是时间
				c.set(2019,5,20);
				//西方月份是:0 - 11 , 每周第一天是周日
				c.add(Calendar.MONTH,1);
				//获取当前时间月份并打印
				System.out.println(c.get(Calendar.MONTH));
			}
		}

6.System 类
	① currentTimeMillis()
		获取系统时间与时间原点之间的毫秒插值。
	② arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
		将数组中指定的数据拷贝到另一个数组中。
		
		* 参数 
			src 		源数组
			srcPos 		源数组起始位置
			dest		目标数组
			destPos		目标数组起始位置
			length		拷贝长度

7.StringBuilder 类
	① 它的内部拥有一个数组用来存放字符串内容,进行字符串拼接时,直接在数组中加入新内容。StringBuilder会自动维护数组的扩容。(默认16字符空间,超过自动扩充)
	② 构造方法
		* public StringBuilder()
			构造一个空的StringBuilder容器。
		* public StringBuilder(String str)
			构造一个StringBuilder容器,并将字符串添加进去。
	③ 常用方法
		* append(String str)
			添加任意类型数据的字符串形式,并返回当前对象自身。
		* toString()
			将当前StringBuilder对象转换为String对象。
	④ 示例
		public class DemoStringBuilder {
			public static void main(String[] args) {
				//使用有参构造创建 StringBuilder 对象
				StringBuilder sb = new StringBuilder("中国");
				//将字符追加到sb后
				sb.append("©");
				sb.append(2019);

				//将StringBuilder转为字符串
				String s = sb.toString();

				System.out.println(s);

			}
		}
		
三、包装类
1.装箱与拆箱
	* 【装箱】基本数值 ---> 包装对象
		//使用构造函数函数
		Integer i1 = new Integer(int i);
		//使用包装类中的valueOf方法
		Integer i2 = Integer.valueOf(int i);
	* 【拆箱】包装对象 ---> 基本数值
		int num = i.intValue();
	* 从 JDK 1.5 开始,基本类型与包装类的装箱、拆箱动作可以自动完成。
		Integer i = 1;//自动装箱 相当于 Integer i = Integer.valueOf(1);
		int a = i + 2;//自动拆箱 相当于 i.intValue() + 2;
		
2.基本类型与字符串之间的转换
	# 除了Character类之外,其他所有包装类都具有parseXxx静态方法可以将字符串参数转换为对应的基本类型
	* 【Byte】 parseByte(String s)
		将字符串参数转换为对应的 byte 基本类型。
	* 【Short】parseShort(String s)
		将字符串参数转换为对应的 short 基本类型。
	* 【Integer】parseInt(String s)
		将字符串参数转换为对应的 int 基本类型。
	* 【Long】parseLong(String s)
		将字符串参数转换为对应的 long 基本类型。
	* 【Float】parseFloat(String s)
		将字符串参数转换为对应的 float 基本类型。
	* 【Double】parseDouble(String s)
		将字符串参数转换为对应的 double 基本类型。
	* 【Boolean】parseBoolean(String s)
		将字符串参数转换为对应的 boolean 基本类型。
		
3.示例
	public class DemoParse {
		public static void main(String[] args) {
			int num = Integer.parseInt("100");
		}
	}