Day22
P10 Object概述
P11 getClass方法(object 类常用方法)
package com.changyonglei.getclass;
public class Student {
private String name;
private int age;
public Student() {
}
public Student(String name, int age){
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
package com.changyonglei.getclass;
public class TestStudent {
public static void main(String[] args) {
Student s1 = new Student("hflgkh" , 20);
Student s2 = new Student("sfgsg",22);
//判断对象s1和对象s2是不是同一个类型
Class class1=s1.getClass();
Class class2=s2.getClass();
if (class1==class2){
System.out.println("s1和s2属于同一个类型");
}else {
System.out.println("s1和s2不属于同一个类型");
}
}
}
//输出:s1和s2属于同一个类型
P12 hashCode方法(object 类常用方法)
-
public int hashCode() {}
-
返回该对象的哈希码值
-
哈希值根据对象的地址或字符串或数字使用hash算法计算出来的int类型的值
-
一般情况下相同对象返回相同哈希码
//TestStudent类 package com.changyonglei.getclass; public class TestStudent { public static void main(String[] args) { Student s1 = new Student("hflgkh" , 20); Student s2 = new Student("sfgsg",22); //getClass方法 //判断对象s1和对象s2是不是同一个类型 Class class1=s1.getClass(); Class class2=s2.getClass(); if (class1==class2){ System.out.println("s1和s2属于同一个类型"); }else { System.out.println("s1和s2不属于同一个类型"); } //hashCode方法 System.out.println(s1.hashCode());//输出:460141958 System.out.println(s2.hashCode());//输出:1163157884 Student s3=s1; System.out.println(s3.hashCode());//输出:460141958 (和s1的一样) } }
//Student类 package com.changyonglei.getclass; public class Student { private String name; private int age; public Student() { } public Student(String name, int age){ this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
P13 toString方法(object 类常用方法)
- public String toSring(){}
- 返回该对象的字符串表示(表现形式)
- 可以根据程序需求覆盖该方法,如:展示对象各个属性值
package com.changyonglei.getclass;
public class Student {
private String name;
private int age;
public Student() {
}
public Student(String name, int age){
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
//重写(覆盖)toString方法
//快捷键:alt+ins 选择重写toString
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
package com.changyonglei.getclass;
public class TestStudent {
public static void main(String[] args) {
Student s1 = new Student("hflgkh" , 20);
Student s2 = new Student("sfgsg",22);
//toString方法
System.out.println("----------toString-------------");
System.out.println(s1.toString());
//输出:com.changyonglei.getclass.Student@1b6d3586(重写之前的输出值)
System.out.println(s2.toString());
//输出:com.changyonglei.getclass.Student@4554617c(重写之前的输出值)
//注意:@后边的是哈希值(hashcode)
//重写toString后的输出值:
//Student{name='hflgkh', age=20}
//Student{name='sfgsg', age=22}
}
}
P14 equals方法(object 类常用方法)
- public boolean equals(Object obj){}
- 默认实现为(this == obj), 比较 两个对象地址 是否相同
- 可进行覆盖,比较 两个对象的内容 是否相同
可进行覆盖,比较两个对象的内容是否相同;
equals()方法覆盖步骤:
- 比较两个引用是否指向同一个对象
- 判断obj是否为null
- 判断两个引用指向的实际对象类型是否一致(可以用getClass判断)
- 强制类型转换
- 依次比较各个属性值是否相同
package com.changyonglei.getclass;
public class Student {
private String name;
private int age;
public Student() {
}
public Student(String name, int age){
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
//重写(覆盖)toString方法
//快捷键:alt+ins 选择重写toString
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
//重写(覆盖)equals方法
@Override
public boolean equals(Object obj) {
//1.判断两个对象是否是同一个引用,若为同一个那就内容相同就不用比了
if (this==obj){
return true;
}
//2.判断obj是否为null
if (obj==null){
return false;
}
//3.判断是否是同一个类型(用getClass或instanceof)
// if (this.getClass()==obj.getClass()){
//
// }
//instanceof 判断对象是否是某种类型
if (obj instanceof Student){
// 4.强制类型转换
Student s=(Student) obj;
// 5.比较属性
if (this.name.equals(s.getName()) && //字符串用equals比较
this.age==s.getAge()){ //数字用==比较
return true;
}
}
return false;
}
}
package com.changyonglei.getclass;
public class TestStudent {
public static void main(String[] args) {
Student s1 = new Student("hflgkh" , 20);
Student s2 = new Student("sfgsg",22);
//equals方法:判断两个对象是否相等
//默认实现为(this == obj), 比较 两个对象地址 是否相同
System.out.println("----------equals方法-------------");
System.out.println(s1.equals(s2));//输出false(重写前)
Student s4=new Student("小明",17);
Student s5=new Student("小明",17);
System.out.println(s4.equals(s5));//输出false(重写前)
//重写equals后输出为:false
// true //(因为重写后比较的是s4 s5对象的属性是否相同)
} //重写前equals方法比较的是对象地址是否相同
}
P15 finalize方法(object 类常用方法)
- 当对象被判定为垃圾对象时,由JVM自动调用此方法,用以标记垃圾对象,进入回收队列
- 垃圾对象:没有有效引用指向此对象时,为垃圾对象
- 垃圾回收:由gc销毁垃圾对象,释放数据存储空间
- 自动回收机制:JVM的内存耗尽,一次性回收所有垃圾对象
- 手动回收机制:使用
System.gc();
通知JVM执行垃圾回收
package com.changyonglei.getclass;
public class Student {
private String name;
private int age;
public Student() {
}
public Student(String name, int age){
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
//重写finalize()方法
@Override
protected void finalize() throws Throwable {
System.out.println(this.name+"对象被回收了");
}
}
package com.changyonglei.getclass;
public class TestStudent2 {
public static void main(String[] args) {
// Student s1 = new Student("aaa", 20);
// Student s2 = new Student("bbb", 20);
// Student s3 = new Student("ccc", 20);
// Student s4 = new Student("ddd", 20);
// Student s5 = new Student("eee", 20);
new Student("aaa", 20);
new Student("bbb", 20);
new Student("ccc", 20);
new Student("ddd", 20);
new Student("eee", 20);
//回收垃圾
System.gc();
System.out.println("回收垃圾");
/*
输出:
回收垃圾
eee对象被回收了
ddd对象被回收了
ccc对象被回收了
bbb对象被回收了
aaa对象被回收了
*/
}
}
P16 包装类概述
八个基本数据类型储存在 栈 里面,引用数据类型储存在 堆 里面
栈 里面存的是对象的地址
- 分别对八种数据类型设计了对应的引用类型,这个引用数据类型我们称为基本数据类型所对应的包装类,这样就有了属性和方法
什么是包装类?
- 基本数据类型所对应的引用数据类型
- Object 可统一所有数据,包装类的默认值是null
基本数据类型 | 包装类型 |
---|---|
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
boolean | Boolean |
char | Character |
如Byte类:
如Float类:
如 Integer 类: