java初始化实例化_java类的初始化和实例化区别
结论:
参考https://blog.csdn.net/qq_43672627/article/details/86616624
类的初始化:是完成程序执行前的准备工作。在这个阶段,静态的(变量,方法,代码块)会被执行。同时在会开辟一块存储空间用来存放静态的数据。初始化只在类加载的时候执行一次。
类的实例化:是指创建一个对象的过程。这个过程中会在堆中开辟内存,将一些非静态的方法,变量存放在里面。在程序执行的过程中,可以创建多个对象,既多次实例化。每次实例化都会开辟一块新的内存。
1.主要区别
2.基础知识
2.1java类的生命周期:
指一个class文件从加载到卸载的全过程,类的完整生命周期包括7个部分:加载——验证——准备——解析——初始化——使用——卸载,如下图所示
其中,验证——准备——解析 称为连接阶段,除了解析外,其他阶段是顺序发生的,而解析可以与这些阶段交叉进行,因为Java支持动态绑定(晚期绑定),需要运行时才能确定具体类型;在使用阶段实例化对象
2.2类加载过程:
加载:通过类名获取类的二进制字节流是通过类加载器来完成的。其加载过程使用“双亲委派模型”
验证:当一个类被加载之后,必须要验证一下这个类是否合法,比如这个类是不是符合字节码的格式、变量与方法是不是有重复、数据类型是不是有效、继承与实现是否合乎标准等等。总之,这个阶段的目的就是保证加载的类是能够被jvm所运行。
准备:为类变量(静态变量)在方法区分配内存,并设置零值。注意:这里是类变量,不是实例变量,实例变量是对象分配到堆内存时根据运行时动态生成的。
解析:把常量池中的符号引用解析为直接引用:根据符号引用所作的描述,在内存中找到符合描述的目标并把目标指针指针返回。
初始化:类的初始化过程是这样的:按照顺序自上而下运行类中的变量赋值语句和静态语句,如果有父类,则首先按照顺序运行父类中的变量赋值语句和静态语句在类的初始化阶段,只会初始化与类相关的静态赋值语句和静态语句,也就是有static关键字修饰的信息,而没有static修饰的赋值语句和执行语句在实例化对象的时候才会运行。执行()方法(clinit是class initialize的简写)
实例化:在堆区分配内存空间,执行实例对象初始化,设置引用变量a指向刚分配的内存地址
2.3 运行时区内存分配
3.具体流程
类A
public classA {private int m=2;private String str1="youyou";public final static String MESS="world";static String ms="world";publicString getName(String input){
String temp=input;returntemp;
}public static int getId(){return 0;}
}
Test类
public classTest {public static voidmain(String[] args) {
Class clazz=A.class;
A a=newA();
A a1=newA();
}public void change(inti)
{
i=123;
}
}
以上面来举例
引用对象:A中成员B b,b即为引用对象,
常量三种:8种基本数据类型byte boolean,char short,float int,dobule long的具体的值,
受final修改的变量
“”双引号引起来的字符串
附:
java初始化实例化_java类的初始化和实例化区别相关推荐
- java类初始化顺序_Java 类的初始化顺序
静态代码块:用staitc声明,jvm加载类时执行,仅执行一次 构造代码块:类中直接用{}定义,每一次创建对象时执行 执行顺序优先级:静态块,main(),构造块,构造方法 1. 构造函数 publi ...
- java 初始化参数_JAVA类的初始化顺序与initialize参数
JAVA类的初始化顺序依次是:(静态变量.静态初始化块)->(变量.初始化块)->构造函数, 相同级别的以定义顺序为准, 且静态变量和静态初始化块只初始化一次.通过下面的代码来验证. p ...
- java类编来那个初始化顺序_java类的初始化顺序
对于静态变量.静态初始化块.变量.初始化块.构造器,它们的初始化顺序依次是(静态变量.静态初始化块)>(变量.初始化块)>构造器.我们也可以通过下面的测试代码来验证这一点: public ...
- java类怎么实例化_Java类的定义及其实例化
如果你不了解类和对象的概念,请看我往期文章. 类必须先定义才能使用.类是创建对象的模板,创建对象也叫类的实例化. 下面通过一个简单的例子来理解Java中类的定义: public class Dog{ ...
- Java创建对象过程:类的初始化和实例化
文章目录 前言 一.类的初始化 二.类的实例化 前言 Java对象的创建过程往往包括类初始化和类实例化两个阶段.类的初始化在前.类的实例化在后. 注意:这与spring的bean正好相反,spring ...
- java初始化实例化_Java 类初始化和实例化以及多态理解
前言 本篇主要讲解了类的初始化.实例化.静态代码块.构造器.getClass().super.this 等相关的知识点,做一个总结. demo 老规矩,看代码: Father.java public ...
- java中类和实例化_Java中类的初始化与实例化
一个Java对象的创建过程往往包括类初始化 和 类实例化 两个阶段. 一.Java对象创建时机 我们知道,一个对象在可以被使用之前必须要被正确地实例化.在Java代码中,有很多行为可以引起对象的创建, ...
- java类的静态成员初始化_Java类的初始化顺序 (静态变量、静态初始化块、变量、初始......
很有意思的一篇文章 1.没有继承 静态变量->静态初始化块->变量->变量初始化块->构造方法 2.有继承的情况 父类静态变量->父类静态初始化块->子类静态变量- ...
- java 接口初始化_Java类的初始化 | 学步园
类的初始化时机1.创建类的实例 2.访问类或接口的静态变量(static final常量除外,static final变量可以)3.调用类的静态方法 4.反射(Class.forName(packag ...
最新文章
- [Swift][OC]tableView去掉顶部空白
- cmake 成功后, make 出现 No such file or directory 问题解决
- linux nacos启动_nacos初体验-踩坑与填坑篇
- Input为number类型maxlength不好使,用js轻松解决
- [HAOI2015]树上操作
- jquery --- 全选、全不选、反选、提交
- c语言程序设计 doc,《C语言程序设计》.doc
- 【Java】保留X位有效数字
- 开启mongodb数据库命令行_【赵强老师】使用MongoDB的命令行工具:mongoshell
- 两个电脑如何切换以方便使用文件
- 用汇编的眼光看C++(之指针2)
- 服务器重置密码后无法启动不了怎么办,Windows Server 2008 R2 忘记密码的处理方法...
- Python3使用bencode库解析BT种子
- ASP.NET 路由实现页面静态化(附在线Demo和Source)
- 【matlab】iir滤波器
- 财务自由的日子,我抑郁了
- 如何解决 CAD 启动非常慢的问题
- 八皇后问题(回溯问题)
- GBASE 8a MPP EXplain extended
- numpy-repeat