hashcode,toString,finalize,final

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本身

  • 7
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值