Class对象是用来创建类的常规对象的,当我们编译一个Java类就会同时产生一个与该类相对应的Class对象(保存在.class文件中)。该Class对象中保存了创建对象所需的所有信息。
共有三种产生Class对象的方法下面分别说明之:
1.public static Class Class.forName("完整的类名") throws ClassNotFoundException;
public static Class forName(String name, boolean initialize,
ClassLoader loader) throws ClassNotFoundException
假若我们用Class.forName("");的方式获取Class对象,其实就相当于Class.forName("完整类名", true, this.getClass().getClassLoader())也就是说在默认情况下在产生Class对象的同时会对该Class对象进行初始化(若以前没有初始化过)。
2.public final Class getClass()
可以通过任何实例对象来引用该方法来获取相应的Class对象。使用此种方式的前提是我们需要产生相应的实例对象。
3.类名.class 此种方式产生Class对象较前两种简单,无需第一种还要进行异常处理(在编译期就进行错误的检查了)。此种方式不会自动初始化该Class对象。初始化被延迟到对静态方法(包括构造方法)或非常数静态域进行首次引用时才进行。
import java.util.*;
class Initable{
static final int staticFinal = 47;
static final int staticFinal2 = ClassInitialization.rand.nextInt(100);
static{
System.out.println("Initialization Initable");
}
}
class Initable2{
static int staticNoFinal = 147;
static{
System.out.println("Initialization Initable2");
}
}
class Initable3{
static int staticNoFinal = 74;
static{
System.out.println("Initialization Initable3");
}
}
public class ClassInitialization
{
public static Random rand = new Randdom(47);
public static void main(String[] args){
Class initable = Initable.class; //不会引起初始化
System.out.println("after creating Initable reference");
System.out.println(Initable.staticFinal); //引用编译器常量不会引起初始化
System.out.println(Initable.staticFinal2); //引起初始化
System.out.println(Initable2.staticNoFinal); //引用非编译期常量会引起初始化
Class initable3 = Class.forName("Initable3"); //默认会引起初始化
System.out.println("after creating Initable3 reference");
System.out.println(Initable3.staticNoFinal);//前面已经初始化此处不用再初始化
}
}
|
相关推荐
Java作为一种主流的面向对象编程语言,其对象的创建与管理是程序运行的基础。本文将详细探讨Java对象在JVM中的创建过程以及其内存布局,帮助读者更深入地理解Java对象是如何在内存中产生的。 #### 二、对象的创建 ...
在Java中,每个类都有一个与之对应的Class对象,该对象包含了类的所有信息,包括构造函数、方法、字段等。通过获取Class对象,我们可以使用newInstance()方法创建一个新的对象实例。 在示例代码中,我们首先获取了...
### 根据标签名字和标签的class属性得到对象 在Web开发中,经常需要通过JavaScript来操作DOM(Document Object Model)元素。一个常见的需求就是根据指定的标签名和类名来获取页面中的DOM元素。本篇文章将详细介绍...
Class对象包含了与类相关的信息。事实上,Class对象就是用来创建类的所有的“普通”对象的。 类是程序的一部分,每个类都有一个Class对象。换言之,每当编写并且编译了一个新类,就会产生一个Class对象(恰当地说,...
在Java编程中,动态代理是一种强大的技术,它允许我们在运行时创建对象的代理,以便在调用实际方法之前或之后执行额外的操作。本压缩包文件提供了两个示例项目,分别展示了JDK动态代理和CGLib动态代理的实现,帮助...
每当成员函数被调用时,C++ 都会自动产生一个 this 指针,指向当前对象。例如: ```cpp class exth { int i; public: void load(int val) { i = val; } void show() { cout ; } }; void main() { exth ob; ...
多态是指同一操作作用于不同对象,可以有不同的解释,产生不同的执行效果。C++支持两种多态形式:静态多态(编译时多态,通过函数重载和运算符重载实现)和动态多态(运行时多态,通过虚函数和抽象类实现)。例如:...
4. **多态**:多态是指同一种操作作用于不同的对象,可以有不同的解释,产生不同的执行效果。C++通过虚函数(virtual)和纯虚函数(pure virtual)实现多态,允许子类重写父类的函数,实现动态绑定。 5. **模板**:...
换言之,每当编写并且编译了一个新类,就会产生一个Class对象(恰当地说,是被保存在一个同名的.class文件中)。在运行时,当我们想生成这个类的对象时,运行这个程序的Java虚拟机(JVM)首先检查这个类的Class对象...
一个类按同种方法产生出来的多个对象,其初始状态都是一样的,但是修改其中一个对象的时候,其他的对象是不会受到影响的。 类的声明和定义在使用类之前,必须先声明它,然后才可以声明变量,并创建对象。类声明的...
3. 多态:多态是指同一种操作作用于不同的对象,可以有不同的解释,产生不同的执行效果。多态性使得程序在运行时能自动选择合适的操作,增强了代码的灵活性和可扩展性。 深入学习面向对象分析与设计,还包括以下几...
4. **多态**:多态性是指同一种操作作用于不同的对象,可以有不同的解释,产生不同的执行效果。它通过接口或虚函数实现,使得代码更具通用性和灵活性。 5. **封装**:封装是隐藏对象的属性和实现细节,只对外提供...
4. **多态**:多态是指同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果。C++通过虚函数(virtual)实现多态,允许基类指针或引用调用派生类的重写方法。 5. **模板与泛型编程**:虽然不是面向对象...
5. **多态**:多态是指同一种操作可以作用于不同的对象,产生不同的效果。这使得代码更具通用性,可以处理不同类型的对象而无需知道其具体类型。 6. **抽象**:抽象是将复杂问题简化的过程,通过创建抽象类或接口来...
面向对象编程方法在20世纪80年代末得到了迅猛的发展,它不仅限于程序设计语言的设计,而且被广泛应用于各种复杂的计算机工程项目中,产生了深远的影响。 #### 核心概念与特点 面向对象编程的核心概念包括:类、...
本手册不仅提供了关于One-class分类的基础知识,还深入探讨了如何创建和检验One-class分类器,以及如何评估分类性能。 #### 2. One-class 分类简介 ##### 2.1 什么是One-class 分类? One-class 分类是一种监督...
多态是指同一种操作可以作用于不同类型的对象上,产生不同的效果。在Java中,多态通过接口、抽象类和方法的重写来实现,它可以增强代码的灵活性和扩展性。 通过学习面向对象编程,开发者可以编写出结构清晰、可维护...
5. **多态**:多态是指相同的操作可以作用于不同的对象,产生不同的效果。在C++中,通过虚函数(virtual)和纯虚函数(pure virtual)实现多态性。 6. **MFC库**:MFC是微软提供的C++类库,它简化了Windows应用程序...
### 产生式规则表示的C++面向对象描述 #### 概述 本文主要探讨了产生式规则知识表示在面向对象专家系统设计中的面向对象描述方法。面向对象技术因其强大的抽象能力、模块化特性以及易于扩展的优点,在软件工程领域...