//本人觉得重点的部分会用彩色标出
//写了好久还没人看,难受呀:-(
第一章 Object类
回顾:方法的重写
a.定义: 子类和父类中,出现一模一样的方法,这时候子类中这个方法被称为重写后的方法
b.结论: 子类对象调用方法时,优先调用子类重写后的方法(Java遵循就近原则)
如果子类没有重写,还是调用父类继承而来的方法
1.Object类的概述
Object类是所有类的根类(所有的类都会直接或者间接继承Object,包括数组)
2.Object类的toString方法
方法原型: public String toString(); 获取对象的字符串表示
默认的表示形式: 包名.类名@地址值
该方法打印出来地址值,是没有意思,从地址中我们看不出任何有用的信息
在实际开发中,我们通常会重写toString方法,打印出属性值而不是地址值
注意事项:
System.out.println(对象名);//实际上并不是直接打印的地址
而是先 对象名.toString() 获取到返回值,然后打印该返回值
即:
String 返回值 = 对象名.toString();
System.out.println(返回值);
和下面的是等价
System.out.println(对象名);
3.Object类的equals方法
方法原型: public boolean equals(Object obj); 判断当前对象和参数对象是否"相等"
在Object类中 equals方法比较就是两个对象的地址值,地址相等返回true,地址不相等返回false
在实际开发中,我们也会重写equals方法,比较两个对象的属性值,而不是地址值
总结:************************************
快捷键生成toString: ALT+INS 选择toString
快捷键生成equals: ALT+INS 选择equals and hashCode,把生成hashcode暂时删除
4. Objects类
它是一个工具类,特点是方法都是静态的,直接通过类名调用即可
public static boolean equals(Object obj1,Object obj2);//该方法内部调用obj1.equals(obj2);
该方法本质上直接调用equals比较两个对象,区别不大,但是添加一些合法性判断的代码(空指针容忍代码)
注意:以后如果你需要判断两个对象是否相等,直接调用Objects中equals方法把对象传入即可
第二章 System类
1.System类的描述
API说了: System类不能创建对象.原因是构造方法私有化
System类中的所有方法都是静态的
2.System类中常用方法
public static long currentTimeMillis();//返回当前时间距离标准时间(1970-01-01 00:00:00)的毫秒值
//返回时间戳
public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length);
源数组 源数组起始下标 目标数组 目标数组的起始下标 复制的长度
//该方法比您的写的任何代码都快,因为他是系统级(是底层c/c++编写)
第三章 StringBuilder类
1.StringBuilder的概述
String是一种不可变字符串,每次拼接时,不会在原有字符串后面拼接,都会产生新的字符串对象,性能低
StringBuilder也是一种可变字符串,每次拼接时,直接在原有字符串后面拼接,性能高
总结: 以后在开发中,String一般用于展示,StringBuilder字符串拼接
2.StringBuilder的构造方法
public StringBuilder(); 创建一个空的StringBuilder对象
public StringBuilder(String str);//创建一个指定内存的StringBuilder对象
3.StringBuilder的成员方法
public StringBuilder append(任意类型); 追加内容,返回StringBuilder本身对象
支持链式编程
public String toString();//这是StringBuilder重写后的toString,返回值StringBuilder中的内容
开发的原则:
拼接时,使用StringBuilder,拼接后先转成String,然后再传递给别人或者打印
扩展的一个:
public StringBuilder reverse();反转StringBuilder中的内容,返回StringBuilder本身对象
第四章 包装类
1.什么是包装类
基本类型 对应的 引用类型
byte Byte
short Short
int Integer
long Long
float Float
double Double
char Character
boolean Boolean
2.基本类型和包装类之间转换
在JDK1.5之前,基本类型和对应引用类型 不会自动转换(了解)
赋值
Integer i = 10; 在JDK1.5之前是报错的!!!!
Integer i = new Integer(10);
Integer i = Integer.valueof(10);
取值:
Integer i = Integer.valueof(10);
System.out.println(i*2);//JDK1.5之前是错误!!!
int v = i.intValue();
System.out.println(v*2);
在JDK1.5之后,基本类型和对应引用类型 会自动转换
自动装箱:
Integer i = 10;//底层实际上就是 Integer.valueof(10);
自动拆箱:
Integer i = 10;
System.out.println(i+10);// i.intValue() + 10
总结:在开发中如果遇到基本类型和包装类进行计算时,我们就当做基本类型进行计算即可
3.包装类有啥作用????
a.由于集合的泛型只能使用引用类型(包装类)
比如:
ArrayList<int> arr = new ArrayList<int>();//报错的!!!!
ArrayList<Integer> arr = new ArrayList<Integer>();
b.解析字符串*****
int value = Integer.parseInt("222");
double value = Double.parseDouble("171.3");
8种包装类只有Character没有parseXxx方法,因为字符串可以有多个字符,字符只能有一个字母
Integer有一个坑
Integer.valueof(数字)的底层是怎么样???
如果数字 范围是 -128到+127之间的,那么从缓冲区取出
如果数字 范围不是以上范围,那么重新创建一个新的对象
所以Integer a = 200;
Integer b = 200;
a !=b;
因为a和b均超过了127,需要重新new一个对象,因此地址值不同,所以不相等