精华内容
下载资源
问答
  • Java对象实例化过程

    千次阅读 2018-03-13 11:25:39
    Java对象初始化过程 参考自 http://blog.csdn.net/wang_1997/article/details/52266954 先声明对象: class Student { String name = "Alice";//显示初始化 int age = 18; //显示初始化 public ...

    Java对象初始化过程

    参考自 http://blog.csdn.net/wang_1997/article/details/52266954

    先声明对象:

    class Student {
        String name = "Alice";//显示初始化
        int age = 18; //显示初始化
        public Student() {
            name = "Bob"; //构造方法初始化
            age = 24 ;  //构造方法初始化
        }
    }
    

    调用时:

    Student s = new Student();
    

    编译期间,会生成Student.class字节码文件。

    初始化时:

    1、类加载器ClassLoader,加载Student.class字节码到内存;

    2、在栈里面为变量s申请一个空间,用来声明s;

    3、new的时候,在堆内开辟空间。然后,开始进行默认初始化,String类型默认给null,int类型默认给0等。默认初始化后,开始进行显示初始化,比如成员变量里name默认值为Alice,所以这时会初始化name为Alice。

    3、执行Student()构造方法,构造方法进栈,进行构造方法初始化

    4、执行构造方法初始化,构造方法执行完毕后出栈,把堆内的对象物理地址,复制给栈内的s,也就是s存放的是对象的引用(物理地址)。

    5、执行Student里面的方法时,方法进栈,方法里隐式的this指向堆内存空间

    展开全文
  • 对象实例化过程 final关键字

    千次阅读 2013-01-16 11:07:55
    一个对象实例化过程: Person p = new Person(); 1,JVM会读取指定的路径下的Person.class文件,并加载进内存,  并会先加载Person的父类(如果有直接的父类的情况下). 2,在堆内存中的开辟空间,分配地址。 3...

    一个对象实例化过程:
    Person p = new Person();
    1,JVM会读取指定的路径下的Person.class文件,并加载进内存,
             并会先加载Person的父类(如果有直接的父类的情况下).
    2,在堆内存中的开辟空间,分配地址。
    3,并在对象空间中,对对象中的属性进行默认初始化。
    4,调用对应的构造函数进行初始化。
    5,在构造函数中,第一行会先到调用父类中构造函数进行初始化。
    6,父类初始化完毕后,在对子类的属性进行显示初始化。
    7,在进行子类构造函数的特定初始化。
    8,初始化完毕后,将地址值赋值给引用变量.


    1.final变量就是常量,不能改变;final函数是最终函数,不能被子函数覆盖;final类为最终类,不能有子类。final变量初始化后不能再被赋新的值。
    final固定的是显示初始化的值,
    final  int x; 会报错的,
     成员一般为final修饰前面一般会加上static变量
    public static final int x=0; 全局常量
    为什么要用final修饰变量?
    其实在程序中,如果一个数据是固定的,那么直接使用这个数据可以了,但是这样阅读性差,所以给该数据起一个名字,而且这个变量的名称不能变化,所以加上final固定.
    展开全文
  • java对象实例化过程分析

    千次阅读 2016-02-29 00:23:17
    在一个对象可以使用之前,需要经过类加载和实例化,也就是我们今天的主题“new一个java对象过程”。那虚拟机在什么时机进行类加载呢?Java 虚拟机规范并没有对其做严格的定义,不同的JVM有不同的实现。而初始化的...

    我们平时经常随手就new一个对象出来,但是找对象真的这么简单吗?看看下面的分析~
    首先看一下类的生命周期
    这里写图片描述
    图中从2到4的过程统称为连接,而1-5这5个过程合起来称为类加载。在一个对象可以使用之前,需要经过类加载和实例化,也就是我们今天的主题“new一个java对象的过程”。

    那虚拟机在什么时机进行类加载呢?Java 虚拟机规范并没有对其做严格的定义,不同的JVM有不同的实现。而初始化的时机JVM明确规定为”initialize on first active use”–” 在首次主动使用时初始化”。
    “主动使用”的定义:

    • 创建某个类的新实例时–new、反射、克隆或反序列化;
    • 调用某个类的静态方法时;
    • 使用某个类或接口的静态字段或对该字段赋值时(final字段除外);
    • 调用Java的某些反射方法时
    • 初始化某个类的子类时
    • 在虚拟机启动时某个含有main()方法的那个启动类。

    下面说明类加载各个过程进行的操作:
    (1)装载:使用类加载器对class文件进行加载。

    1. 通过类全限定名来获取二进制字节流
    2. 将静态存储结构调到方法区
    3. 在java堆上生成这个类的class对象,作为方法区数据入口

    (2)验证:

    1. 文件格式验证
    2. 元数据验证
    3. 字节码验证
    4. 符号引用验证

    (3)准备:为类变量(也就是静态变量)分配内存,设置初始值(这里的初始值是规定的,比如一般对象的初始值为null,int类型为0,boolean类型为false,等等)

    (4)解析:将常量池的符号引用替换为直接引用。

    (5)初始化:为类变量赋初始值,执行static语句。这里JVM会将这些语句全部放到<clinit>()方法中执行,并且<clinit>()方法是线程安全的。

    (6)实例化:为新建对象分配内存,初始化实例变量,执行构造函数。JVM会将实例变量,构造语句等非静态语句按顺序添加到每一个构造方法里面。所以语句的执行顺序是先按顺序执行类中的非静态语句,再执行构造方法中的语句。

    这就是我们平时new一个对象时jvm所进行的操作了,是不是还挺麻烦的,不过这里只是大致的分析了一下,主要参考了《深入理解java虚拟机》这本书,但是并没有深入的分析,想要详细了解到字节码的程度,还是推荐直接看书吧。

    展开全文
  • Java 一个对象实例化过程

    千次阅读 2016-01-15 01:14:28
    package day09; class Fu{ Fu(){ super(); show(); return; } void show(){ System.out.println("fu show"); } } class Zi extends Fu{ ...//-->通过super初始父类内容时,子
    package day09;


    class Fu{
    Fu(){
    super();
    show();
    return;
    }
    void show(){
    System.out.println("fu show");
    }
    }


    class Zi extends Fu{
    int num = 8;
    Zi(){
    super();
    //-->通过super初始化父类内容时,子类的成员变量 并未显示初始化。等super()父类初始化完毕后,才进行子类的成员变量显示初始化。
    System.out.println("zi cons run ..." + num);
    return;
    }
    void show(){
    System.out.println("zi show ..." + num);
    }
    }

    /**
     *一个对象实例化过程:
     *Person p = new Person();
     *1、JVM会读取指定路径下的Person.class文件,并加载进内存,并会先加载Person的父类(如果有直接的父类的情况下)。
     *2、在堆内存中的开辟空间,分配地址。
     *3、并在对象空间中,对对象中的属性进行默认初始化。
     *4、调用对应的构造函数进行初始化。
     *5、 在构造函数中,第一行会先到调用父类中构造函数进行初始化。
     *6、 父类初始化完毕后,在对子类的属性进行显示初始化。
     *7、在进行子类构造函数的特定初始化。
     *8、初始化完毕后,将地址值赋值给引用变量。
     */
     
    public class ExtendsDemo5 {


    /**
    * @param args
    */
    public static void main(String[] args) {
    // TODO Auto-generated method stub
    Zi z = new Zi();
    z.show();
    }

    }







    展开全文
  • 一个对象实例化过程(细节)

    千次阅读 2019-07-11 17:34:30
    一个对象实例化过程: Person p = new Person(); 1.JVM 会读取指定的路径下的 Person.class 文件,并加载进内存,并会先加载 Person 的父类(如果有直接的父类的情况下)。 2.在堆内存中的开辟空间,分配地址。 3.并...
  • Java对象实例化过程

    千次阅读 2018-08-02 20:42:57
    JAVA new流程(实例化过程) java对象实例化过程
  • 一个对象实例化过程

    千次阅读 2015-10-30 21:35:48
    一个对象实例化过程: 1、JVM会读取指定的路径下的Person.class文件,并加载到内存, 并会先加载Person的父类(如果有直接父类的情况下) 2、在堆内存中的开辟空间,分配地址 3、并在对象空间中,对对象的属性...
  • NO.5 Spring IOC 对象实例化过程

    千次阅读 2017-12-12 17:36:21
    NO.5 Spring IOC 对象实例化过程 这里,我们需要知道一个名词——DI(依赖注入)。 需要一个对象,就让工厂注入进去一个对象,需要一个service,就让IOC注入一个service。 IOC就是一个大工厂,专门用来生产对象...
  • 深入理解Java对象的创建过程:类的初始化与实例化

    万次阅读 多人点赞 2017-05-18 14:17:45
    在类初始化过程中或初始化完毕后,根据具体情况才会去对类进行实例化。本文试图对JVM执行类初始化和实例化的过程做一个详细深入地介绍,以便从Java虚拟机的角度清晰解剖一个Java对象的创建过程。
  • Java中对象实例化过程

    千次阅读 2013-11-30 23:30:54
    Java中对象实例化过程: 1.递归地在堆中首先创建其父类对象,调用父类构造方法。 2.然后才创建对象自己,执行构造方法实例化。 3.Java 中类的构造方法默认第一行都是super(),即调用父类构造方法。 4.在对象实例...
  • 子类对象实例化过程

    千次阅读 2014-01-26 13:39:03
    子类对象实例化过程: 1.JVM先找指定的类字节码并加载进内存,并会先加载父类的字节码进内存; 2.在堆内开辟内存空间,分配内存地址; 3.在对象的内存空间中对对象的属性进行默认初始化; 4.调用对应的构造...
  • java对象实例化过程

    千次阅读 2012-07-15 21:05:33
    关于对象实例化过程: 1.检查类是否加载,如果没有加载就加载这个类,要加载所有父类; 懒式加载(按需加载):如果第一次用到加载,只加载一下.通过ClassPath制定的路径寻找类文件(.class) 加载以后是一个对象,类型是...
  • Java中子类对象实例化过程

    千次阅读 2019-06-07 16:07:53
    子类对象实例化时,子类对象会默认先调用父类中的无参构造函数,然后再调用子类构造构造方法。 二实战 1代码 class Person { String name ; int age ; public Person() // 父类的构造方法 { System.out....
  • JAVA中一个对象实例化过程

    千次阅读 2017-07-19 13:20:07
    3.并在对象空间中,对对象中的属性进行默认初始 4。调用对应的构造函数进行初始 5.在构造函数中,第一行会先调用父类中构造函数进行初始 6.父类初始完毕后,再对子类的属性进行显示初始 7.在进行子类...
  • Java类加载过程对象实例化详解

    千次阅读 2017-11-19 17:21:28
    Java虚拟机类加载过程 类加载时机 类加载过程 –加载 –验证 –准备 –解析 –初始 1、类加载时机  类从被加载虚拟机内存中开始,到卸载出内存为止,他的整个生命周期包括:加载、验证、准备、解析、初始...
  • 子类的实例化过程

    千次阅读 2015-08-02 14:43:53
    一个对象实例化过程: Person p = new Person(); 1,JVM会读取指定的路径下的Person.class文件,并加载进内存, 并会先加载Person的父类(如果有直接的父类的情况下). 2,在堆内存中的开辟空间,分配地址。 3,并在...
  • Java对象在内存中实例化过程

    千次阅读 多人点赞 2020-07-27 15:08:52
    在讲 Java 对象在内存中的实例化过程前,先来说下在类的实例化过程中,内存会使用到的三个区域:栈区、堆区、方法区。 堆区: 存储的全部都是对象,每个对象包含了一个与之对应的 class 类的信息。 jvm 只有一个堆...
  • 类从加载到对象实例化过程顺序

    千次阅读 2016-03-06 15:06:58
    类字节码文件从硬盘读入到内存中类加载器(BootStrapClassLoader,ExtensionClassLoader,SystemClassLoader)加载字节码文件 在方法区存放生成类对应的Class对象 --------- 2.连接 这个过程又包括了:验证、准备、...
  • java之面向对象:子类对象实例化过程详解

    千次阅读 多人点赞 2016-11-26 18:38:11
    对象实例化图解: 通过super初始化父类内容时,子类的成员变量并未显示初始化,等super()父类初始化完毕后,才进行子类的成员变量显式初始化。 对象的实例化过程步骤总结: Person p = ...
  • 声明对象实例化对象的区别

    千次阅读 2015-11-04 11:17:20
    声明对象实例化对象的区别
  • java实例化对象过程

    万次阅读 2010-09-16 12:58:00
    下面我们通过两个例题来说明对象实例化过程。 <br /> <br />    编译并运行该程序会有以下输出 Static Block Employee Company:china soft Non-Static Block Employee phon
  • Bean的实例化过程

    千次阅读 2018-08-21 09:27:14
    一、Spring容器的容器启动阶段和Bean实例化阶段   1.1 容器启动阶段    容器启动阶段,主要是将利用某种工具(如XmlBeanDefinitionReader),将XML配置信息,映射为BeanDefinition,并将其注册到相应的...
  • java中一个实例化过程

    千次阅读 2017-04-15 15:08:17
    一个对象实例化过程: eg:Person person = new Person(); 1.JVM会读取指定路径下的Person.class文件并加载进内存,如果 并会先加载Person的父类(如果有直接父类的情况下)。 2、在堆内存中开辟空间分配内存...
  • Mybatis深入之DataSource实例化过程

    万次阅读 多人点赞 2015-06-21 22:17:38
    Mybatis深入之DataSource实例化过程简介主要介绍Mybatis启动过程中DataSource实例化的过程、为后面解析一个完整SQL执行过程做个前章。
  • 通过序列化和反序列化实现对象实例化 实体类序列化方法
  • js中new实例化对象内部过程

    千次阅读 2019-12-01 16:23:50
    使用关键字new创建新实例对象经过了以下几步: 1、创建一个新对象,如:var person = {}; 2、新对象的_proto_属性指向构造函数的原型对象prototype。 3、将构造函数的作用域赋值给新对象。(也所以this对象...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 826,630
精华内容 330,652
关键字:

对象的实例化过程