day12【Object类、常用API】

day12【Object类、常用API】

一. Object类

1. Object类的特点

  • Object是所有类的父类, 每一个类都直接或者简介的继承自Object.
  • 所有对象(包括数组), 都可以使用Object类中的方法

2. toString()

// 如何查看源代码
// 	找到具体的类:  ctrl + n
//  在类中找到具体的方法:  ctrl + F12

/*
	getClass().getName(): 获取类的全限定类名(包名+类名)
	"@" :  at, 在
	Integer.toHexString(hashCode()) : 十六进制的地址值
*/

public String toString() {
    return this.getClass().getName() + "@" + Integer.toHexString(this.hashCode());
}

总结: Object类中的toString()方法, 就是用来打印地址值.但是打印地址值没有意义. 所以我们一般会重写toString方法(只需要自动生成)

3. 输出语句打印

疑问:

  1. 数组打印是地址值

  2. 集合打印是元素

  3. 打印时调用toString和不调用toString效果是一样的

  4. 字符数组打印的是元素

解答

  • println()方法的源代码

    
    public void println(Object x) {
        String s = String.valueOf(x);
        synchronized (this) {
            print(s);	// 打印s
            newLine();	// 换行
        }
    }
    
    //  ↓
    // String中的valueOf()方法
    public static String valueOf(Object obj) { // obj就是我们传入的p
        // 先判断obj是否为null
        // 如果是null, 就直接返回"null"
        // 如果不是null, 调用了toString()方法
        return (obj == null) ? "null" : obj.toString();
        // 输出语句默认调用toString().
    }
    

4. equals()

== :

​ 比较基本数据类型时, 比较的是值

​ 比较引用数据类型时, 比较的是地址值

	p1.equals(p2)
// =================================
public boolean equals(Object obj) {
    // this: 谁来调用我(我所在的方法), 我就代表谁
    // this: p1
    // obj: p2
    return (this == obj);
}

总结: Object类中的equals方法是用来比较地址值, 没有意义. 所以我们会重写Object类中的equals()方法, 重写之后要比较的是属性值(只需要自动生成).

二. 日期时间相关的类

1. Date

构造方法

Date() : 创建Date对象, 用来代表当前时间
Date(long millis) : 创建Date对象, 表示从1970年1月1日 00:00:00加上参数中的毫秒数

成员方法

getTime(): 获取该Date对象代表的毫秒值

2. SimpleDateFormat(重点)

作用

  • 格式化(日期Date >> 文本String)
  • 解析(文本String >> 日期Date)

构造方法

SimpleDateFormat(String): 创建SimpleDateFormat对象, 并指定转换时使用的模式
模式:
	"yyyy/MM/dd HH:mm:ss"

成员方法

String format(Date) : 格式化, 将Date格式化成字符串
Date parse(String) : 解析: 将字符串解析成Date对象

3. Calendar

  • 日历

创建对象

Calendar.getInstance();

成员方法

get(字段): 获取指定字段对应的值
set(字段, 值): 修改指定字段的值
set(年, 月, 日, 时, 分, 秒)
  
了解:
add(字段, 加上的值)
getTime() : 将Calendar对象, 转换成Date

三. System类

工具类中的成员都是使用static修饰的, 所以会多做一步将构造方法使用private修饰.

静态方法

  • currentTimeMillis
public static long currentTimeMillis() : 获取当前时间的毫秒值
  • arrayCopy
public static void arrayCopy(
							Object src,  // 原数组
    						int srcPos,  // 从原数组的哪个索引开始拷贝 
    						Object dest, // 目标数组
    						int destPos, // 从目标数组的哪个索引开始拷贝
    						int len		 // 拷贝的长度(元素的个数)
)
  • exit
public static void exit(int status) : 退出Java虚拟机

四. StringBuilder(重点)

  • StringBuilder: 字符串缓冲区

构造方法

StringBuilder() : 创建字符串缓冲区, 表示的是 ""
StringBuilder(String) : 创建字符串缓冲区, 表示的是与参数相同的字符序列

成员方法

append(Object) : 字符串缓冲区的拼接功能
toString() : 将StringBuilder转换成String字符串

需求

  • 将数组{1,2,3,4,5}转换成字符串, 指定格式"[1, 2, 3, 4, 5]"
	/**
     * 此方法用于将数组转换成指定格式的字符串
     */
    public static String array2String(int[] arr) {
        // 创建字符串缓冲区
        StringBuilder sb = new StringBuilder("[");

        // 遍历数组
        for (int i = 0; i < arr.length; i++) {
            // 通过索引, 获取指定索引位置的元素,  获取到每一个元素
            int a = arr[i];
            // 判断是否是最后一个元素
            if (i == arr.length - 1) {
                sb.append(a).append("]");
            }else {
                sb.append(a).append(", ");
            }
        }

        return sb.toString();
    }

五. 包装类

1. 回顾包装类

基本数据类型 包装类
byte Byte
short Short
int Integer
long Long
float Float
double Double
char Character
boolean Boolean

2. 自动装箱和自动拆箱

  • 自动装箱: 自动将基本数据类型, 转换成对应的包装类
  • 自动拆箱: 自动将包装类, 转换成对应的基本数据类型

3. 将指定格式的字符串, 转换成基本数据类型

// "123"(String)   --->   123(int)
// "23.4"(String)  --->   23.4(duoble)
// "false"   --->  false(boolean)
// 每一个包装类中都有一个(除了Character), parseXxx(String), Xxx是基本数据类型
// Integer : parseInt()
// Double : parseDouble()
// Boolean : parseboolean()
// ...
// Integer
String s1 = "123";
int i = Integer.parseInt(s1);
System.out.println(i);

// Double
String s2 = "23.4";
double d = Double.parseDouble(s2);
System.out.println(d);

// Boolean
String s3 = "false";
boolean b = Boolean.parseBoolean(s3);
System.out.println(b);

4. 扩展: 面试题

 		// 比较地址值
        Integer i1 = 127;
        Integer i2 = 127;
        System.out.println(i1 == i2); // true

        Integer i5 = 128;
        Integer i6 = 128;
        System.out.println(i5 == i6); // true

// 自动装箱, 底层会使用Integer.valueOf()
// Integer中valueOf()方法的源代码
public static Integer valueOf(int i) {
    // low=-128, high=127
    if (i >= IntegerCache.low && i <= IntegerCache.high) {
        // cache: 数组中的元素是Integer类型, 内容从-128 ~ 127
        return IntegerCache.cache[i + (-IntegerCache.low)]; // i + 128
    }
    return new Integer(i);
}
上一篇:2019-05-31Linux就该这么学【day12】


下一篇:day12 文件处理1