/**
* 1.非继承类的实例化顺序: 静态块-->静态字段-->实例块-->实例字段-->构造器
* 2.当静态field赋值当前类的实例,实例初始化,但这个field下面的静态field不会在这个实例化过程中实例化,为甚?
* 可能是这此实例化相当于第二次,所以静态块不执行
* 3.静态field和静态块在jvm只会被初始化一次,而实例field和实力块每次新对象创建都会被实例化
* @author wb-zhangye
*
*/
public class Children {
static {
System.out.println("Children static block");
}
// instance block
{
System.out.println("Children instance block");
}
// constructor
public Children(){
System.out.println("Children Constructor");
System.out.println(CHILDSTATICNUM + ":" + childInstanceNum);
}
// static field
public static final Children CHILD = new Children();
public static final int CHILDSTATICNUM = getNum();
private static int getNum() {
System.out.println("Children static field initialing");
return 911;
}
// instance field
public final int childInstanceNum = getInstanceNum();
private int getInstanceNum() {
System.out.println("Children instance field initialing");
return 110;
}
}
当我们使用一个类时,会有两种使用方式。实例化此类和直接调用此类的静态字段或者静态方法
首先在此声明一点:block和field的优先级相同,他们执行的顺序跟他们的位置相关
@First 直接实例化
1.非继承类的实例化顺序: 静态块||静态字段-->实例块||实例字段-->构造器
2.当静态field赋值当前类的实例,实例初始化,但这个field下面的静态field
不会在这个实 例化过程中实例化,为甚?
可能是这此实例化相当于第二次,所以静态块不执行
3.静态field和静态块在jvm只会被初始化一次,而实例field和实力块每次新对象创建都会被实例化
@Second 使用此类的静态字段
按照静态块||静态field的方式初始化
@Third 使用此类的静态方法
按照静态块||静态field的方式初始化,然后调用静态方法
对于继承体系的类,则是同样的规则,不过静态总是优于非静态。
因为静态方法和field(不管是不是静态)都是编译期确定的,所以不会受到runtime时期的影响。但对于可以被overide非静态方法,如果父类的field或者构造器引用了此方法,此时子类复写的方法万万不能引用子类的非静态field,因为此时子类的非静态field没有初始化,只是默认值。虽然语法上可以这么用,但不是作者的本意
分享到:
相关推荐
在Java编程语言中,实例化对象是创建类的实例,使其具有特定状态和行为的过程。这个过程涉及到几个关键步骤,让我们深入探讨一下。 首先,我们需要一个类,它是创建对象的蓝图。在Java中,我们使用`class`关键字来...
总的来说,虽然Java中的抽象类不能直接实例化,但我们可以通过继承并实现其抽象方法,或者利用字节码工具和注解处理器在运行时或编译时动态生成新的类来间接达到实例化抽象类的目的。这样的设计允许我们创建更加灵活...
Java泛型的用法及T.class的获取过程解析 Java泛型是Java编程语言中的一种重要特性,它允许开发者在编写代码时指定类型参数,从而提高代码的灵活性和可读性。本文将详细介绍Java泛型的用法 及T.class的获取过程解析...
在Java编程语言中,了解如何计算内存中实例化对象的数量是一项重要的技能,这对于优化程序性能、理解和管理资源分配至关重要。本篇文章将详细讲解如何利用静态成员变量来追踪和计算一个类在运行时创建的实例数量。 ...
然而,在 Java 中使用泛型时,会出现一个问题:如何实例化泛型对象?在 Java 中,泛型擦除机制使得编译器无法确定泛型所对应的真实类型,因此无法直接实例化泛型对象。下面将详细介绍 Java 让泛型实例化的方法。 ...
在这篇文章中,我们将详细介绍Java子类对象的实例化过程,包括实例化的步骤、原理、实现方法等。 一、子类对象的实例化过程 在Java中,子类对象的实例化过程可以分为以下几个步骤: 1. 父类的无参构造函数调用:...
"Java中类的定义与实例化详解" Java 中类的定义与实例化是面向对象编程的基础知识。类是用户自定义的数据类型,可以用于描述真实世界中的对象。类的定义和实例化是 Java 编程的核心部分,本文将详细介绍类的定义和...
Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、输出错误信息等Java编程小技巧。 Java数组倒置...
这种实现方式是在类被首次请求时才创建单例对象,延迟了初始化过程,从而提高了程序的启动性能。但这种方式有一个问题,即线程不安全。在多线程环境下,可能会创建多个实例。例如: ```java public class Singleton...
在Java编程语言中,类的实例化是创建对象的过程,它为程序中的数据和行为提供了一种封装机制。本文将详细探讨四种常用的Java类实例化方法,并通过示例代码加深理解。 #### 1. 使用`new`操作符 这是最常见也是最...
在本“Java反射经典实例”中,我们将深入探讨这个主题,了解如何利用反射来访问和修改私有属性以及调用私有方法。 1. **反射的概念与用途** - 反射机制是在运行时分析类的能力,它允许我们获取类的信息(如类名、...
`Class`对象是Java反射机制的基础,它代表着运行时的类信息,可以通过此类对象实例化对象、获取类的属性、方法等信息。 在上述的JDBC示例中,我们看到`Class.forName("com.mysql.jdbc.Driver")`这行代码,其作用是...
Java解析Class文件是Java开发中的一个重要环节,它涉及到对字节码的理解和处理。Class文件是Java编译器将源代码编译后的结果,包含了类的结构信息、方法定义、常量池等关键数据。理解并能解析Class文件,对于进行JVM...
在Java中,对象的实例化涉及到栈内存和堆内存的使用。栈内存主要用于存储基本数据类型和对象引用,而堆内存则用于存储对象的实际数据。理解这两种内存的区别以及它们如何协同工作对于编写高效和可靠的Java程序至关...
总结,Java中的Class类是Java反射机制的核心,它代表了运行时的类信息。通过Class对象,我们可以动态加载类、创建对象、访问类的成员,实现运行时的灵活性和动态性。了解并熟练掌握Class类及其相关方法,对于理解和...
本篇文章将深入探讨Spring项目中Bean的实例化过程,包括三种主要的bean实例化方式:构造方法、静态工厂和实例工厂。 首先,让我们了解什么是Bean。在Spring中,Bean是应用程序中的业务对象,它们由Spring容器负责...
4. **实例化过程**:一旦`Class`对象生成完成,就可以通过反射等方式创建类的实例。创建实例时会触发非静态初始化块和构造函数的调用。 #### 四、小结 通过以上介绍可以看出,`Class`对象在Java中扮演着极其重要的...
Java动态代理是Java编程中一个非常重要的特性,它在实际开发中被广泛应用于面向切面编程(Aspect-Oriented Programming,简称AOP)领域。AOP是一种编程范式,旨在提高代码的可重用性和模块化,通过将关注点分离,...
在Java编程语言中,动态地使用字符串来实例化类并调用其方法是一种高级特性,主要依赖于`java.lang.Class`类和`java.lang.reflect`包中的反射机制。这一技术在许多场景下都非常有用,例如在插件架构、动态加载类、...
Java中的对象是通过类的实例化来创建的。当你使用new关键字时,实际上是在内存中为这个新对象分配了一块空间,并根据类的定义来初始化这块空间,创建了一个新的对象实例。这个过程包括了为对象的成员变量赋初值,并...