博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
对象的初始化过程
阅读量:5062 次
发布时间:2019-06-12

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

class Test{    int num = 8;    static  //静态代码块    {        System.out.println("静态代码");    }    {   //构造代码块        System.out.println(num);    }    public Test(int num)  // 构造方法    {        this.num = num;    }}class TestDemo{    public static void main(String[] args)    {        Test t = new Test(3);        System.out.println(t.num);    }}

输出结果:

   静态代码
   8
   3

Test t = new Test(3);这句话都干了什么

1、new用到Test.class,先找到Test.class文件并加载到内存中 (若如上num在类中静态初始化,则num的值初始化为8,则下文的默认初始化就没了)

2、执行该类的静态代码块(静态的成员随类加载而执行)

3、在堆内存中开辟内存空间,分配内存地址,并在栈中创建变量p。

4、在堆内存中建立对象的特有属性,并进行默认初始化。

5、对属性进行显示初始化(即用语句对变量进行的初始化,这里指上句中的3)

6、对对象的构造代码段初始化。

7、对对象的对应构造函数初始化。

8、将内存地址赋给内存中的变量。

这也可以解释为什么静态方法不能调用非静态成员了

注意:静态的成员是按语句顺序进行执行的,若代码如下: 

1 static2 {3     System.out.println("静态代码"+num);4 }5 static int num = 8;

 

则会出现非法向上引用的错误

转载于:https://www.cnblogs.com/fantasy01/p/3572530.html

你可能感兴趣的文章
基于zuul 实现API 网关
查看>>
定义自己的布局RelativeLayout 绘制网格线
查看>>
redis
查看>>
Ubuntu13.04 安装 chrome
查看>>
WampServer phpadmin apache You don't have permission to access
查看>>
解决sonarQube 'Unknown': sonar.projectKey
查看>>
java基础的第二轮快速学习!day02
查看>>
功能测试用例编写
查看>>
【笔记】给自己的博客侧栏添加小时钟
查看>>
ASPX页面弹窗的方法---javascript
查看>>
JavaScript和快速响应的用户界面
查看>>
深入浅出的排序算法-选择排序
查看>>
delphi -----(去掉窗口最大化,最小化、关闭),主窗口,和子窗口之间的设置
查看>>
一个小的手机答题网页【1. 需求及数据库设计】
查看>>
IOS 音频的 使用说明
查看>>
SQL Prompt Snippet Manager 妙用
查看>>
c# 学习心得(函数方法类)
查看>>
linux 命令行下的作业管理
查看>>
PL/SQL Developer连接本地Oracle 11g 64位数据库
查看>>
GNU make manual 翻译(七十九)
查看>>