类中可以存在的成员:

class A{
静态成员变量;
非静态成员变量;
静态函数;
非静态函数;
构造函数 A(..){...}
静态代码块 static{...}
构造代码块 {...}
}

类加载过程:

1、JVM会先去方法区中找有没有类对应的.class存在,如果有,就直接使用;如果没有,就把对应类的.class加载到方法区;

2、将.class加载到方法区的时候,分为两部分,首先将非静态内容加载到方法区的非静态区域内;

3、再将静态内容加载到方法区的静态区域内,加载完成后,对所有的静态成员变量进行默认初始化;

4、所有静态成员变量默认初始化后,进行显示赋值;再执行静态代码块;(执行静态代码块和静态成员变量显示赋值无先后顺序,与代码顺序有关,谁在前面先执行谁)

5、如果有继承关系,加载子类的时候会先加载父类,在加载子类。

对象创建过程:

1、对象创建首先会在堆内存中开辟一块空间,并分配一个地址;

2、将对象的所有非静态成员加载到开辟的空间下,并为所有非静态成员变量进行默认初始化;

3、调用构造函数进栈执行,在执行构造函数的时候,首先会执行构造函数中的隐式三步,再执行构造函数中的代码;

  隐式三步:

  1、执行super语句,调用父类的构造函数;

  2、对所有非静态成员变量进行显示赋值;

  3、执行构造代码块;(非静态成员变量显示赋值和执行构造代码块无先后顺序,由代码顺序决定,谁在前先执行谁);

4、执行完隐式三步后,再执行构造函数中的代码,代码执行完后弹栈;

5、将堆内存中开辟的空间地址赋值给一个引用对象,对象创建完成。

下面用一段代码来验证一下类加载和对象创建过程(转载自某位大牛):

 //父类
public class Insect {
private int i = printInit("Insect:i");
protected int j; protected static int x1 = printInit("static Insect.x1 initialized");
static{
System.out.println("Insect静态代码块");
x1=80;
}
Insect() {
System.out.println("基类构造函数阶段: i = " + i + ", j = " + j);
j = 39;
System.out.println(x1);
} static int printInit(String s) {
System.out.println(s);
return 47;
} }
//子类
public class Beetle extends Insect{
{
k=90;
}
private int k = printInit("Beetle.k initialized"); protected static int x2 = printInit("static Beetle.x2 initialized"); public Beetle() {
System.out.println(k);
} public static void main(String[] args) {
Beetle b = new Beetle();
} }

运行结果:

java基础---类加载和对象创建过程的更多相关文章

  1. java类加载、对象创建过程

    类加载过程: 1, JVM会先去方法区中找有没有相应类的.class存在.如果有,就直接使用:如果没有,则把相关类的.class加载到方法区 2, 在.class加载到方法区时,会分为两部分加载:先加 ...

  2. Java内存区域与对象创建过程

    一.java内存区域 Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域.这些区域都有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而存在,有的区域则 ...

  3. Java中类加载过程和对象创建过程

    类加载过程: 1, JVM会先去方法区中找有没有相应类的.class存在.如果有,就直接使用:如果没有,则把相关类的.class加载到方法区 2, 在.class加载到方法区时,会分为两部分加载:先加 ...

  4. Java中对象创建过程

    本文介绍的对象创建过程仅限于普通Java对象,不包括数组和Class对象. 1.类加载检查 虚拟机遇到一条new指令时,首先去检查该指令的参数能否在常量池中定位到一个类的符号引用,并且检查这个符号引用 ...

  5. Java基础-类加载机制与自定义类Java类加载器(ClassLoader)

    Java基础-类加载机制与自定义类Java类加载器(ClassLoader) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 关于类加载器的概念和分类我就不再废话了,因为我在之前的笔 ...

  6. Java基础4-面向对象概述;super();this()

    昨日内容回顾 java基本数据类型: byte : 一个字节,-128 ~ 127 = 256 short : 两个字节, -32768 ~ 32767 int : 四个字节, long : 八个字节 ...

  7. Java基础-IO流对象之序列化(ObjectOutputStream)与反序列化(ObjectInputStream)

    Java基础-IO流对象之序列化(ObjectOutputStream)与反序列化(ObjectInputStream) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.对象的序 ...

  8. Java基础-IO流对象之字节流(Stream)

    Java基础-IO流对象之字节流(Stream) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在前面我分享的笔记中,我们一直都是在操作文件或者文件夹,并没有给文件中写任何数据.现 ...

  9. 深入理解Java虚拟机(二)——HotSpot对象创建、内存、访问

    对象的创建 虚拟机遇到一条字节码new指令时,开始对象创建过程. 首先去检查这个指令的参数是否能在常量池定位到一个类的符号引用: 检查这个符号引用代表的类是否已被加载.解析和初始化,如果没有就必须执行 ...

随机推荐

  1. mybatis中使用in查询时的注意事项

    1. 当查询的参数只有一个时 findByIds(List<Long> ids)  1.a 如果参数的类型是List, 则在使用时,collection属性要必须指定为 list < ...

  2. BZOJ1434:[ZJOI2009]染色游戏(博弈论)

    Description 一共n×m个硬币,摆成n×m的长方形.dongdong和xixi玩一个游戏,每次可以选择一个连通块,并把其中的硬币全部翻转,但是需要满足存在一个硬币属于这个连通块并且所有其他硬 ...

  3. Linux环境更改Jenkins的主目录

    Linux环境更改Jenkins的主目录 Linux环境中,Jenkins主目录默认在/root/.jenkins Jenkins储存所有的数据文件在这个目录下. 你可以通过以下几种方式更改: 1.使 ...

  4. 20145203盖泽双 《Java程序设计》第9周学习总结

    20145203盖泽双 <Java程序设计>第9周学习总结 教材学习内容总结 1.撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的增删查找. 2.JDBC目的:让Java程序设 ...

  5. smtp ssl模式邮件发送与附件添加

    #!/usr/bin/python3 import os import smtplib from email.mime.text import MIMEText from email.mime.mul ...

  6. atom / vscode (配置c++环境流程)

    最初主要是被这个炫酷的插件吸引了,这么打代码太特么有激情了 还有跳舞的初音姐姐哦!! 现附上一篇文章,这篇文章步骤讲得很详细了 http://blog.csdn.net/qq_36731677/art ...

  7. STM32F103 ucLinux开发BOOT

    STM32F103 ucLinux开发BOOT STM3210E-EVAL官方开发板主芯片STM32F103ZET6: 片内512K Flash,地址0x0800 0000 ~ 0x0807 FFFF ...

  8. 初学node.js-MongoDB安装和环境服务配置(4)

    一.mongoDB安装: (1)官网下载,我的是windows64位系统,目前最新版mongodb-win32-x86_64-2008plus-ssl-4.0.9-signed.msi 安装步骤不说了 ...

  9. Redis全方位讲解--主从复制

    前言 前面介绍了redis持久化和容灾备份,这篇会介绍redis主从复制和redis持久化在主从复制中的一些应用.因为本人没有那么多服务器或机器,所以这里主要介绍下如何在docker容器中搭建主从复制 ...

  10. 基于Verilog的奇数偶数小数分频器设计

    今天呢,由泡泡鱼工作室发布的微信公共号“硬件为王”(微信号:king_hardware)正式上线啦,关注有惊喜哦.在这个普天同庆的美好日子里,小编脑洞大开,决定写一首诗赞美一下我们背后伟大的团队,虽然 ...