hashcode
由Object类定义的hashcode会针对不同的对象返回不同的整数(通过将该对象的内部地址值转换成一个整数来实现)
但不能将hashcode等价于地址
package com.practice;
public class test {
public static void main(String[] args) {
HASH a = new HASH();
HASH b = new HASH();
HASH c = a;
System.out.println(a.hashCode());
System.out.println(b.hashCode());
System.out.println(c.hashCode());
}
}
class HASH{}
toString
重写
返回该对象的toString表示,返回值为全类名(加上包名,类名)+@+hashcode的十六进制
package com.practice;
public class test {
public static void main(String[] args) {
Monster monster = new Monster("小妖怪","巡山",150.2);
System.out.println(monster.toString());
}
}
class Monster{
private String name;
private String job;
private double salary;
public Monster(String name, String job, double salary) {
this.name = name;
this.job = job;
this.salary = salary;
}
//重写toString,用于输出对象的属性
//Object中存在,故alt+insert
//也可自己定制
@Override
public String toString() {
return "Monster{" +
"name='" + name + '\'' +
", job='" + job + '\'' +
", salary=" + salary +
'}';
}
}
当直接输出时,默认使用toString
finalize
1.回收一个对象时,系统自动调用
2.当某个对象没有被任何引用时,jvm就会认为这是个垃圾,就会使用垃圾回收机制销毁该对象,在销毁该对象前,会先调用finalize方法
3.垃圾回收机制的调用,由系统决定,为空不会立即出发该机制,但可以通过System.gc()主动触发垃圾回收机制
package com.practice;
public class Finalize_ {
public static void main(String[] args) {
Car car = new Car("玩具车");
//自空,变成垃圾,启动垃圾回收,销毁该对象
//程序员写自己的业务逻辑代码,如释放资源
//若不重写,启用Object的finalize
car = null;
System.gc();
System.out.println("程序结束");
}
}
class Car{
private String name;
public Car(String name) {
this.name = name;
}
@Override
protected void finalize() throws Throwable {
System.out.println("释放资源");
}
}
会先执行完该程序再进行垃圾回收
final
1.不希望类,属性,方法,变量,被继承或修改,可以用final修饰
2.final修饰的属性一般称为常量,必须要赋值,命名XX_XX
3.可以在定义时,或静态代码块中,进行赋值
能在构造器中赋值,但加了static后,不可以,因为类加载之后,不一定调用构造器,此时常量就没有值,而常量必须要赋值,所以不能在构造器中赋值
????????????????
4.若不是final类,但含有final方法,该方法不能被重写,但可以被继承
5.final类的方法,不需要用final修饰
6.不能修饰构造器
7.final,static,同时使用,调用属性时不会发生类加载
public class SingleTon02 {
public static void main(String[] args) {
System.out.println(A.num);
// System.out.println(A.Method());
}
}
class A{
public final static int num = 10000;
static {
System.out.println("A的静态代码块");
}
public final static String Method(){
return "1";
}
}
但若调用方法,还会进行类加载
8.包装类(Integer,Double,Float,Boolean等都是final),String也是final类
题
final可修饰形参
++x 错误,相当于 x=x+1,常量不能被修改
x+1代表另一个新的值,不影响x本身