博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
3.java类和对象
阅读量:6174 次
发布时间:2019-06-21

本文共 1953 字,大约阅读时间需要 6 分钟。

关于类和对象的详解可以参考:

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

类对象初始化顺序

  1. 父类静态属性变量初始化
  2. 父类静态代码块
  3. 子类静态属性变量初始化
  4. 子类静态代码块
  5. 父类普通属性变量初始化
  6. 父类构造代码块
  7. 父类构造函数
  8. 子类普通属性变量初始化
  9. 子类构造代码块
  10. 子类构造函数

通过结论我们可以很明显的看出: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*****3667126421829164700

转载地址:http://axqba.baihongyu.com/

你可能感兴趣的文章
浅谈js中的继承
查看>>
软件工程 之 画扇面
查看>>
zabbix mysql数据库迁移方案
查看>>
VirtualBox虚拟机网络设置(四种方式)
查看>>
[C# 基础知识系列]专题十六:Linq介绍
查看>>
Cisco 胖瘦AP转换
查看>>
jQuery学习
查看>>
MYSQL 锁:metadata lock
查看>>
3.5 数组
查看>>
XAlign:用于代码对齐的Xcode插件
查看>>
sqlserver表分区的相关总结
查看>>
exchange 2010 专题- 个人存档
查看>>
java
查看>>
Tomcat集群Cluster实现原理
查看>>
人人都应当控制的一些电脑操作技能
查看>>
百度echarts自定义主题使用
查看>>
ASP.NET MVC3中给DropDownList添加默认选项
查看>>
Mac OS开启关闭root用户,禁用“其他”登录
查看>>
SQL Server为啥使用了这么多内存?
查看>>
DNS服务器综合实验(包含view下主从+子域授权+转发域)
查看>>