为了账号安全,请及时绑定邮箱和手机立即绑定

java 中的class.forName()是什么意思?

java 中的class.forName()是什么意思?

牧羊人nacy 2019-05-28 10:06:18
java 中的class.forName()是什么意思
查看完整描述

4 回答

?
jeck猫

TA贡献1909条经验 获得超7个赞

Class.forName:返回与给定的字符串名称相关联类或接口的Class对象。

Class.forName是一个静态方法,同样可以用来加载类。该方法有两种形式:Class.forName(String name, boolean initialize, ClassLoader loader)和 Class.forName(String className)。第一种形式的参数 name表示的是类的全名;initialize表示是否初始化类;loader表示加载时使用的类加载器。第二种形式则相当于设置了参数 initialize的值为 true,loader的值为当前类的类加载器。

如下图所示,java类型的属性名称叫name,可以通过forName的方法获取到这个类的实例,从而获取到类里面的属性。

扩展资料:

注意:

在指定类给 class.forName() 方法后,如果找不到指定的类,会抛出ClassNotFoundException 异常。Class 的静态 forName() 方法有两个版本,上面的代码是只指定类名称的版本,而另一个版本可以让你指定类名称、加载时是否运行静态区块、指定类加载器:

Static Class forName(String name, boolean initialize, ClassLoader loader)

默认在加载类的时候,如果类中有定义静态区块则会运行它。你可以使用 class.forName() 的第二个版本,将 initialize 设定为 false,这样在加载类时并不会立即运行静态区块,而会在使用类建立对象时才运行静态区块。为了印证,可以先设计一个测试类:

package cn.sunzn.demo;public class TestClass {    static {System.out.println("[运行静态区块]");}}


查看完整回答
反对 回复 2019-06-01
?
阿波罗的战车

TA贡献1862条经验 获得超6个赞

class.forName是用到了java.lang.Class.forName包的方法,他是通过类的全称来返回一个类,全称是指包名称加类名称,他是通过jvm来加载的。这样你就可以获取到这个类了,你可以通过反射来操作这个类,例如获取属性,获取方法等等。这种方式在框架中比较常见。

如下图所示,App类里面有个String类型的属性名称叫name,我们可以通过forName的方法获取到这个类的实例,从而获取到类里面的属性。

扩展资料:

什么时候用Class.forName()?
先来个热身,给你一个字符串变量,它代表一个类的包名和类名,你怎么实例化它?你第一想到的肯定是new,但是注意一点:
A a = (A)Class.forName(“pacage.A”).newInstance();
这和你 A a = new A(); 是一样的效果。

现在言归正传。
动态加载和创建Class 对象,比如想根据用户输入的字符串来创建对象时需要用到:
String str = “用户输入的字符串” ;
Class t = Class.forName(str);
t.newInstance();

在初始化一个类,生成一个实例的时候,newInstance()方法和new关键字除了一个是方法,一个是关键字外,最主要有什么区别?

它们的区别在于创建对象的方式不一样,前者是使用类加载机制,后者是创建一个新类。

那么为什么会有两种创建对象方式?这主要考虑到软件的可伸缩、可扩展和可重用等软件设计思想。



查看完整回答
反对 回复 2019-06-01
  • 4 回答
  • 0 关注
  • 636 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信