一. 利用构造方法给对象初始化1. 构造方法的概念构造方法(也称为构造器)是一个特殊的成员方法,其名字必须与类名相同,在创建对象时,由编译器自动调用,并且在整个对象的生命周期内只调用一次。构造方法的作用就是给对象中的成员进行初始化,并不负责给对象开辟空间。public class Date {
public int year;
public int month;
publi
转载
2023-09-01 11:57:38
209阅读
Java类及其类成员的初始化(一)—类的初始化
1、类初始化的时机
首次通过下面6种方式使用某个类或者接口时,系统会初始化该类或接口。
创建类的实例(创建实例方式包括:使用new操作符创建实例,通过反射创建实例,通过反序列化创建实例)。调用某个类的类方法。访问某个类或接口的类变量,或为该类变量赋值。使用反射强制创建某个类或接口的java.lang.Cla
虚拟机规范严格规定了有且只有5种情况必须立即对类进行初始化。
1)遇到new、getstatic、putstatic或invokestatic这4条字节码指令时,如果类没有进行过初始化,则需要先触发其初始化。
2)使用java.lang.reflect包的方法对类进行反射调用的时候,如果类没有进行过初始化,则需要先触发其初始化。
3)当初始化一个类的时候,如果发
转载
2023-06-03 23:46:56
179阅读
之前整理了《JVM之类加载机制》的文章,对于一个类的初始化阶段介绍太过简略,这里再开一篇文章,着重介绍类的初始化流程。类初始化是类加载过程的最后一个阶段,到初始化阶段,才真正开始执行类中的Java程序代码。虚拟机规范严格规定了有且只有四种情况必须立即对类进行初始化:遇到new、getstatic、putstatic、invokestatic这四条字节码指令时,如果类还没有进行过初始化,则需要先触发
转载
2023-08-24 10:20:58
50阅读
1、在通过new创建对象时调用了类的构造函数进行类对象的初始化。在运行时刻可以调用方法或者执行某些动作来确定初始值,这种方式为编程带来了很大的灵活性。但是这种方式无法阻止自动初始化的进行,他将在够构造器之前进行初始化如下面的代码:public class test1 {
int i;
public test1(){
System.out.println(i);
i++;}}在上面的程序运行结果
转载
2023-08-29 20:01:23
170阅读
结论:1. 类的主动使用会导致类的初始化 主动使用有: new 一个类的实例, 调用类的反射,访问类的静态变量或将静态变量庙会,调用类的静态方法,初始化一个类的子类,启动类main 方法所有类, JDK 1.7以后动态语言的调用2. 创建对象时,先执行静态代码块,然后执行代码块,最后执行其构造方法3.类的静态代码只有在类的初始化被执行(对应类对象在jvm只有一个)
转载
2023-07-28 14:43:06
172阅读
对于Java字段的初始化来说,共有以下几种方法:1.类的构造函数(构造方法):当创建一个对象时,其构造函数就会自动调用。构造方法必须与类名相同,无返回值。如果程序员没有定义一个构造函数时,系统会自动定义一个不含参数的“默认构造函数”,在自定义构造函数后就不再产生默认的构造函数了。对于同一个类来说,可以有很多个构造函数,也就是所谓方法重载的运用。其之间可以相互调用。2.类的初始化块,指的是在类中用{
转载
2023-05-29 15:02:13
156阅读
类的初始化和对象初始化是 JVM 管理的类型生命周期中非常重要的两个环节,Google 了一遍网络,有关类装载机制的文章倒是不少,然而类初始化和对象初始化的文章并不多,特别是从字节码和 JVM 层次来分析的文章更是鲜有所见。 本文主要对类和对象初始化全过程进行分析,通过一个实际问题引入,将源代码转换成 JVM 字节码后,
Java有以下几种方式创建类对象:利用new关键字利用反射Class.newInstance利用Constructor.newIntance(相比Class.newInstance多了有参和私有构造函数)利用Cloneable/Object.clone()利用反序列化Constructor.newInstance不支持带原型入参的构造函数。调用Class.getConstructor()方法获取无
转载
2023-08-24 10:15:59
85阅读
静态代码块:用staitc声明,jvm加载类时执行,仅执行一次 构造代码块:类中直接用{}定义,每一次创建对象时执行。 执行顺序优先级:(静态块| 静态变量) , main(), (构造块|成员变量) , 构造方法。 括号内的内容根据声明的先后顺序进行执行。构造函数public HelloA(){//构造函数
}关于构造函数,要注意:执行HelloA helloA = new HelloA
转载
2023-08-22 22:00:21
250阅读
1.B默认初始化,基本类型是 0 ,布尔类型是 false ,引用类型为null所以这里为null2.AA选项中,抽象类不能实例化,这句是正确的。后面,抽象类不能申明为对象,是错误的。java中,接口和抽象类,都可以声明为对象,只需要在实例化的时候,用一个该接口/抽象类的实现类实例化就行了。即:interface / abstract class obj = new class();其
转载
2023-10-11 17:20:57
76阅读
Java类初始化顺序是一道典型的面试笔试题目,经常会遇到。由于记忆力不好,所以总是忘记刚学习的知识,简单验证一下增加印象。先说结论一个类被引入以及被创建实例,类内部执行的顺序是:父类静态变量、代码块——>子类静态变量、代码块——>父类成员变量、代码块——>父类构造方法——>子类成员变量、代码块——>子类构造方法。总结1.所有关于静态的数据、代码需要先被执行,包括父类和
转载
2023-05-24 09:59:29
268阅读
系统可能在第一次使用某个类时加载该类,也可能采用预加载机制来加载某个类。本节将会详细介绍类加载、连接和初始化过程中的每个细节。JVM 和类当调用 java 命令运行某个 Java 程序时,该命令将会启动一个 Java 虚拟机进程,不管该 Java 程序有多么复杂,该程序启动了多少个线程,它们都处于该 Java 虚拟机进程里。正如前面介绍的,同一个 JVM 的所有线程、所有变量都处于同一个进程里,它
1 类初始化时必须显式调用,用new进行显示调用进行初始化(前提条件)。
2 类初始化时其中的先后顺序:
2.1
static修饰的
2.1.1 先初始化类中的所有的static修饰的成员变量或者代码块。
2.1.2 初始化static
转载
2023-06-09 15:10:31
126阅读
1.构造函数任何一个类不管它是抽象的还是具体的,都拥有一个构造函数,即使程序员不键入它,Java也会提供一个默认的无参的构造函数。构造函数必须要与 类同名,构造函数一定不能够有返回类型,切记void也是一种返回类型! 如果在类中没有创建任何构造函数,那么系统将使用默认的构造函数,如果程序员定义了一个构造函数,那么默认的构造函数将不存在! public cl
转载
2023-09-11 17:19:38
68阅读
Java 数组的三种初始化静态初始化:创建 + 赋值//静态初始化语法:
int a = {1,2,3};动态初始化: 包含默认初始化//动态初始化语法:
int[] b = new int[2];
b[0]=1;
b[1]=2;数组的默认初始化
数组是引用类型,它的元素相当于类的实例变量,因此数组一经分配空间,其中的每个元素也被按照实例变量同样的方式被隐式初始化示例:package com.sh
原创
2023-05-18 13:42:36
220阅读
学习java,对于java类的初始化过程很迷惑,不是很了解其过程,所以在网上和书籍上整理了一下。 类初始化 类”初始化”阶段,它是一个类或接口被首次使用的前阶段中的最后一项工作,本阶段负责为类变量赋予正确的初始值。 Java 编译器把所有的类变量初始化语句和类型的静态初始化器通通收集到 方法内,该方法只能被 Jvm 调用,专门承担初始化工作。 除接口以外,初始化一个类之前必须保证其直接超类
阅读目录构造函数构造代码块静态代码块Java类初始化顺序 静态代码块:用staitc声明,jvm加载类时执行,仅执行一次 构造代码块:类中直接用{}定义,每一次创建对象时执行。 执行顺序优先级:静态块,main(),构造块,构造方法。 构造函数 public HelloA(){//构造函数
} 关于构造函数,以下几点要注意:1.对象一建立,就会调用与之相应的构造函数,也就是说,不建立对象,
转载
2023-09-12 14:34:21
136阅读
首先先看几个定义及结论:静态代码块:用staitc声明,jvm加载类时执行,仅执行一次构造代码块:类中直接用{}定义,每一次创建对象时执行。执行顺序优先级:静态块,main(),构造块,构造方法。构造函数对象一建立,就会调用与之相应的构造函数,也就是说,不建立对象,构造函数时不会运行的。构造函数的作用是用于给对象进行初始化。一个对象建立,构造函数只运行一次,而一般方法可以被该对象调用多次如果类中提
转载
2023-08-29 12:29:35
45阅读
Java虚拟机规范规定了有且只有5种情况必须立即对类进行初始化: 1. 使用new关键字实例化对象的时候、读取或设置一个类的静态字段(被final修饰、已在编译器吧结果放入常量池的静态字段除外)的时候,以及调用一个类的静态方法的时候。 2. 使用java.lang.reflect包的方法对类进行反射调用的时候,如果类没有进行过初始化,则需要先触发其初始化。3. 当初始化一个类的时候,如果发现其父类
转载
2023-06-05 21:40:28
5阅读