Object类 老祖宗类
- toString方法
源代码:
public String toString() {
return this.getClass().getName() + "@" + Integer.toHexString(hashCode());
}
原有方法不够用 只能输出对象内存地址
2. equals方法
源代码:
public boolean equals(Object obj) {
return (this == obj);
}
- 在Object类中的equals方法当中,默认采用的是 “== ” 判断两个java对象是否相等。而 “ == ” 判断的是两个java对象的内存地址,我们应该判断两个java对象的内容是否相等。
public boolean equals(Object obj){
return obj == this;
}//不够用需重写
public boolean equals(Object obj){
//重写方法要求修饰符、名称、返回值类型、形式参数列表一致
if(obj == null||!(obj instanceof Student)) return false;
if(obj == this) return ture;
Student s = (Student) obj;//向下转型 判断具体内容一致不一致
return name == s.name && school.equals(s.student);
}
- 判断基本数据类型是否相等使用 “== ”就行,引用数据类型必须使用equals方法(需要重写)
- finalize 方法 (已过时)
该方法 由 protected修饰 该方法没有方法体
protected void finalize() throws Throwable { }
JVM垃圾回收器调用
finalize()方法实际上为程序员准备了一个时机,垃圾销毁时机,如果想在这个时机执行一些代码,可以写进finalize() 方法体中。
- clone()
深克隆和浅克隆
内部类
- 在类的内部又定义了一个新的类,被称为内部类。
内部类包括:
- 静态内部类
- 动态内部类
- 局部内部类 包括匿名内部类(通过接口直接new个对象 只能调用一次)
数组
-
是一种引用数据类型
-
数组可以储存基本数据类型和引用数据类型
其中引用数据类型是吧内存地址储存在数组当中 -
一旦创建完成,数组的长度不可以变
-
数组中元素类型统一,苹果类型数组只能装苹果
-
数组中元素在数组中储存的内存地址是连续的(这是数组储存元素的一个特点 (优势)),因此整个数组的内存地址以第一个元素的内存地址作为地址是讲得通的。
-
优点:数组元素检索效率高 原因如下:
- 每一个元素的内存地址在空间存储上是连续的。
- 每一个元素类型相同,所以占用空间大小一样。
- 知道第一个元素内存地址,知道每一个元素占用空间的大小,又知道下标,所以
通过一个数学表达式就可以计算出某个下标上元素的内存地址。直接通过内存地址定位元素,所以数组的检索效率是最高的。
-
缺点:不能储存大量数据,内存中很难找到一块大的连续的内存空间。
-
初始化的方式:
- 静态初始化:
int[] array = {1,2,3,4,5};
- 动态初始化:
int[] array = new int[5];
五个元素的默认值为0;若为引用数据类型则元素默认值为null。<
- 静态初始化: