理解Java的Class.forName()方法

官方文档解释:通俗点说就是要求JVM查找并加载指定的类,也就是说JVM会执行该类的静态代码段,并返回与该类相关的Class对象。

例如:

Class t = Class.forName(“java.lang.Thread”);

需要理解:

♦静态代码块:

概念总结:随着类的加载而加载,并且只执行一次,常用来执行类的初始化
作用:用于给类初始化

♦区分 new关键字和newInstance() 、Class.forName()的区别:

new():从JVM的角度看,我们使用关键字new创建一个类的时候,这个类可以没有被加载。调用new() 进行实例化并分配内存空间。

newInstance():使用newInstance()必须保证:1、这个类已经加载;2、这个类已经连接了

Class.forName():完成上面 1、2 两个步骤的正是Class的静态方法forName()所完成的(即 要求JVM查找并加载指定的类,也就是说JVM会执行该类的静态代码段,并返回与该类相关的Class对象)

现在可以看出,newInstance()实际上是把new这个方式分解为两步,即首先调用Class加载方法加载某个类,然后实例化。

Class t = Class.forName(str); 
t.newInstance();

这样分步的好处是显而易见的。我们可以在调用class的静态加载方法forName时获得更好的灵活性,提供给了一种降耦的手段。

原文地址:https://www.cnblogs.com/jayus/p/11375949.html

时间: 2024-08-03 09:54:16

理解Java的Class.forName()方法的相关文章

java.lang.Class.forName(String name, boolean initialize, ClassLoader loader)方法

描述 Java.lang.Class.forName(String name, boolean initialize, ClassLoader loader) 方法返回与给定字符串名的类或接口的Class对象,使用给定的类加载器. 指定的类加载器加载的类或接口.如果该参数加载器loader 为空,通过引导类加载器加载类.当类被初始化的初始化initialize参数为true,如果它没有被初始化. 声明 以下是java.lang.Class.forName()方法的声明 [java] view p

理解JAVA - 面向对象(object) - 属性,方法

理解JAVA - 面向对象(object) - 属性,方法 多态的体现:    向上造型,父类接收子类对象:向上造型:    从父类角度看不到子类独有的方法: 面向对象,人类认知世界的方式:生活中每天都在多态:    这个人是谁,这是个人,多态来看待他了:    他是老师  把它向下造型来看待了,他是老师,知道他能讲课了,老师是人下面的子类型: 我们每天都已多态来接收事物,然后向下造型:    这是人,这人是老师:    这是车,这车是奥迪 小时候,不知到是什么,就问这是什么东西,世间万物都能成

深入理解Java 8 Lambda(语言篇——lambda,方法引用,目标类型和默认方法)

最近看了一下java 8的一些新特性,其中最重要的莫过于Lambda表达式了,通过一阵子的学习,原本准备自己写一篇博客的,后来阅读了一位学长翻译过来的博客(原文是Brain Goetz的State of Lambda,下面会给出原文链接),觉得写的十分完美,把我想要写的和我没想到的都罗列了出来,就把这个分享给大家了. 注:原译文见  http://lucida.me/blog/java-8-lambdas-insideout-language-features/ 英语原版见:http://cr.

[转]深入理解Java 8 Lambda(语言篇——lambda,方法引用,目标类型和默认方法)

以下内容转自: 作者:Lucida 微博:@peng_gong 豆瓣:@figure9 原文链接:http://zh.lucida.me/blog/java-8-lambdas-insideout-language-features 本文谢绝转载,如需转载需征得作者本人同意,谢谢. -------------------------------------内容分割线--------------------------------------------------------- 关于 本文是深入

深入理解Java中方法的参数传递机制

形参和实参 我们知道,在Java中定义方法时,是可以定义参数的,比如: public static void main(String[] args){ } 这里的args就是一个字符串数组类型的参数. 在程序设计语言中,参数有形式参数和实际参数之分,先来看下它们的定义: 形式参数:是在定义函数名和函数体的时候使用的参数,目的是用来接收调用该函数时传入的参数,简称"形参". 实际参数:在主调函数中调用一个函数时,函数名后面括号中的参数称为"实际参数",简称"

深入理解Java类加载器(1):Java类加载原理解析

1 基本信息 每个开发人员对Java.lang.ClassNotFoundExcetpion这个异常肯定都不陌生,这背后就涉及到了java技术体系中的类加载.Java的类加载机制是技术体系中比较核心的部分,虽然和大部分开发人员直接打交道不多,但是对其背后的机理有一定理解有助于排查程序中出现的类加载失败等技术问题,对理解java虚拟机的连接模型和java语言的动态性都有很大帮助. 2 Java虚拟机类加载器结构简述 2.1 JVM三种预定义类型类加载器 我们首先看一下JVM预定义的三种类型类加载器

java笔记--理解java类加载器以及ClassLoader类

类加载器概述: java类的加载是由虚拟机来完成的,虚拟机把描述类的Class文件加载到内存,并对数据进行校验,解析和初始化,最终形成能被java虚拟机直接使用的java类型,这就是虚拟机的类加载机制.JVM中用来完成上述功能的具体实现就是类加载器.类加载器读取.class字节码文件将其转换成java.lang.Class类的一个实例.每个实例用来表示一个java类.通过该实例的newInstance()方法可以创建出一个该类的对象. 类的生命周期: 类从加载到虚拟机内存到被从内存中释放,经历的

深入理解Java注解类型(@Annotation)

"-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 深入理解Java注解类型(@Annotation) - zejian的博客 - 博客频道 - CSDN.NET zejian的博客 目录视图 摘要视图 订阅 [活动]2017 CSDN博客专栏评选 &nbsp [5月书讯]流畅的Python,终于等到你!    &am

深入理解Java类型信息(Class对象)与反射机制

深入理解Class对象 RRTI的概念以及Class对象作用 认识Class对象之前,先来了解一个概念,RTTI(Run-Time Type Identification)运行时类型识别,对于这个词一直是 C++ 中的概念,至于Java中出现RRTI的说法则是源于<Thinking in Java>一书,其作用是在运行时识别一个对象的类型和类的信息,这里分两种:传统的"RRTI",它假定我们在编译期已知道了所有类型(在没有反射机制创建和使用类对象时,一般都是编译期已确定其类