资讯专栏INFORMATION COLUMN

3.java类和对象

liuhh / 2264人阅读

摘要:析构函数对象也有类似析构函数的功能,如果想要在垃圾回收的时候对某个对象进行一些收尾工作,可以重写类的方法。示例对象构造函数对象析构函数会产生垃圾手工处理垃圾收集输出结果对象构造函数对象析构函数可以看到异常信息并未输出。

关于类和对象的详解可以参考:https://blog.csdn.net/wei_zhi...

本文主要记录下类对象的初始化顺序、finalize函数以及对象克隆。

类对象初始化顺序

父类静态属性变量初始化

父类静态代码块

子类静态属性变量初始化

子类静态代码块

父类普通属性变量初始化

父类构造代码块

父类构造函数

子类普通属性变量初始化

子类构造代码块

子类构造函数

通过结论我们可以很明显的看出:static字段、代码块的执行顺序优先于非static字段、代码块。这是因为在静态域是属于类的,在类加载后就一直存在;而普通域需要创建对象才能访问。而在创建对象时,需要先加载父类,然后再加载子类,因此父类的静态字段初始化和静态代码块执行先于子类。

finalize 析构函数

java对象也有类似析构函数的功能,如果想要在垃圾回收的时候对某个对象进行一些收尾工作,可以重写Object类的finalize()方法。
定义如下:

protected void finalize() throws Throwable

在对象回收时,即使抛出了异常,也不会影响程序的正常运行。

示例:

class Demo {
    public Demo(){
        System.out.println("对象构造函数");
    }
    @Override
    protected void finalize() throws Throwable{
        System.out.println("对象析构函数");
    }
}
public class testDemo {
    public static void main(String[] args) throws Exception {
        Demo demo = new Demo();
        demo = null; //会产生垃圾
        System.gc(); //手工处理垃圾收集
    }
}
输出结果:
对象构造函数
对象析构函数

可以看到异常信息并未输出。

final、finally、finalize的区别

final:关键字,其修饰的类不能被继承,方法不能被重写、常量;

finally: 关键字,异常的统一出口;

finalize:Object类的方法,析构函数;

对象克隆

对象克隆指的是对象的复制操作,在Object类里提供有一个专门的克隆方法:

protected Object clone() throws CloneNotSupportedException

如果要使用的对象不支持Cloneable接口,调用该方法就会抛出异常。

示例:

class Book implements Cloneable { //此类的对象可以被克隆
    private String title;
    private double price;
    
    public Book(String title, double price){
        this.title = title;
        this.price = price;
    }
    @Override
    public String toString(){
        return "书名:" + this.title + "价格:" + this.price;
    }

    //由于此类需要对象克隆操作,需要进行对象方法的重写
    @Override
    public Object clone() throws CloneNotSupportedException{
        return super.clone();
    }
    
}
public class testDemo {
    public static void main(String[] args) throws Exception {
      Book bookA = new Book("java开发", 79.8);
      Book bookB = (Book)bookA.clone();

      System.out.println(bookA);
      System.out.println(bookB);

      System.out.println(System.identityHashCode(bookA));
      System.out.println(System.identityHashCode(bookB));
    }
}
输出结果:
书名:java开发价格:79.8
书名:java开发价格:79.8
*****
366712642
1829164700

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/73443.html

相关文章

  • JavaOOP:类和对象

    摘要:中类的概念及类与对象的关系什么是类从语义上理解,类就是用于创建对象的模版,是一个抽象的概念从语法上理解,类就是我们指定的一种数据类型类和对象的关系语义上,类是创建对象的模版,对象是类的实例语法上,类是自定义数据类型,对象是这种类型的变量创建 1、Java中类的概念及类与对象的关系 什么是类? 从语义上理解,类就是用于创建对象的模版,是一个抽象的概念;从语法上理解,类就是我们指定的一...

    whatsns 评论0 收藏0
  • Java问题汇总,持续更新到GitHub

    摘要:目录介绍问题汇总具体问题好消息博客笔记大汇总年月到至今,包括基础及深入知识点,技术博客,学习笔记等等,还包括平时开发中遇到的汇总,当然也在工作之余收集了大量的面试题,长期更新维护并且修正,持续完善开源的文件是格式的同时也开源了生活博客,从年 目录介绍 00.Java问题汇总 01.具体问题 好消息 博客笔记大汇总【16年3月到至今】,包括Java基础及深入知识点,Android技...

    beita 评论0 收藏0
  • 假如我是面试官,我会这样虐你

    摘要:又是金三银四的时候,我希望这份面试题能够祝你一臂之力自我和项目相关自我介绍你觉得自己的优点是你觉得自己有啥缺点你有哪些你为什么要离开上家公司你上家公司在,我们公司在,离这么远为什么要选择我们这里上家公司的同事和领导是怎么评价你的介绍下你的上 又是金三银四的时候,我希望这份面试题能够祝你一臂之力! 自我和项目相关 1、自我介绍 2、你觉得自己的优点是?你觉得自己有啥缺点? 3、你有哪些 ...

    Benedict Evans 评论0 收藏0
  • “大话”设计模式

    摘要:抽象工厂模式是为了处理对象具有等级结构以及对象族的问题。单例设计模式单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,这个类成为单例类。 导语:设计模式是无数码农前人在实际的生产项目中经过不断的踩坑、爬坑、修坑的经历总结出来的经验教训,经过抽象之后表达成的概念。能够帮助后来的设计者避免重复同样的错误或者弯路。我也抽空整理了一下设计模式,用自己的话总结了一下,自认...

    coordinate35 评论0 收藏0
  • 3-文件组织

    摘要:文件组织一个文件由应以空行分隔的部分和标识每个部分的可选注释组成。一个文件超过行的代码会显得很麻烦,应该避免出现这样情况。源代码文件每个源文件包含一个单独的公开类或者接口。构造函数方法这些方法应该按照功能而不是范围或可访问性进行分组。 3-文件组织 一个文件由应以空行分隔的部分和标识每个部分的可选注释组成。 一个文件超过2000行的代码会显得很麻烦,应该避免出现这样情况。 3.1 ja...

    Miracle_lihb 评论0 收藏0

发表评论

0条评论

liuhh

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<