一、hashCode 方法
1) 能提高具有哈希结构的容器的效率。
2) 两个引用,如果指向的是同一个对象,则哈希值肯定是一样的。
3) 两个引用,如果指向的是不同对象,则哈希值是不一样的。
4) 哈希值主要根据地址号来的!不能完全将哈希值等价于地址。
代码举例:
public class HashCode_ { public static void main(String[] args) { Student Leo = new Student(); Student Leo2 = new Student(); Student Leo3 = Leo; System.out.println("Leo.hashCode()=" + Leo.hashCode()); System.out.println("Leo2.hashCode()=" + Leo2.hashCode()); System.out.println("Leo3.hashCode()=" + Leo3.hashCode()); } } class Student {}
二、toString 方法
1) 基本介绍
默认返回:全类名+@+哈希值的十六进制,【查看 Object 的 toString 方法】
子类往往重写 toString 方法,用于返回对象的属性信息
2) 重写 toString 方法,打印对象或拼接对象时,都会自动调用该对象的 toString 形式.
3) 当直接输出一个对象时,toString 方法会被默认的调用, 如System.out.println(monster);
就会默认调用 monster.toString()
代码举例:
public class ToString_ { public static void main(String[] args) { Monster monster = new Monster("小妖怪", "巡山的", 1000); System.out.println(monster.toString() + " hashcode=" + monster.hashCode()); System.out.println("==当直接输出一个对象时,toString 方法会被默认的调用=="); System.out.println(monster); //等价 monster.toString() } } class Monster { private String name; private String job; private double sal; public Monster(String name, String job, double sal) { this.name = name; this.job = job; this.sal = sal; } //重写 toString 方法, 输出对象的属性 //使用快捷键即可 alt+insert -> toString @Override public String toString() { //重写后,一般是把对象的属性值输出,当然程序员也可以自己定制 return "Monster{" + "name='" + name + '\'' + ", job='" + job + '\'' + ", sal=" + sal + '}'; } @Override protected void finalize() throws Throwable { System.out.println("fin.."); } }
三、finalize 方法
1) 当对象被回收时,系统自动调用该对象的 finalize 方法。子类可以重写该方法,做一些释放资源的操作
2) 什么时候被回收:当某个对象没有任何引用时,则 jvm 就认为这个对象是一个垃圾对象,就会使用垃圾回收机制来销毁该对象,在销毁该对象前,会先调用 finalize 方法。
3) 垃圾回收机制的调用,是由系统来决定(即有自己的 GC 算法), 也可以通过 System.gc() 主动触发垃圾回收机制,测 试:Car [name]
4) 我们在实际开发中,几乎不会运用 finalize , 所以更多就是为了应付面试
public class Finalize_ { public static void main(String[] args) { Car bmw = new Car("宝马"); //这时 car 对象就是一个垃圾,垃圾回收器就会回收(销毁)对象, 在销毁对象前,会调用该对象的 finalize 方法 //程序员就可以在 finalize 中,写自己的业务逻辑代码(比如释放资源:数据库连接,或者打开文件..) //如果程序员不重写 finalize,那么就会调用 Object 类的 finalize, 即默认处理 //如果程序员重写了 finalize, 就可以实现自己的逻辑 bmw = null; System.gc(); //主动调用垃圾回收器 System.out.println("程序退出了...."); } } class Car { private String name; //属性, 资源。。 public Car(String name) { this.name = name; } //重写 finalize @Override protected void finalize() throws Throwable { System.out.println("我们销毁 汽车" + name); System.out.println("释放了某些资源..."); } }
四、IDEA短点调试(debug)
1、快捷键
F7(跳入) F8(跳过) shift+F8(跳出) F9(resume,执行到下一个断点)
F7:跳入方法内 F8: 逐行执行代码 shift+F8: 跳出方法
2、其实也没啥好说的了,看界面就会操作了
我是吕同学,祝自己也祝您变强了~