猿问

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

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


牧羊人nacy
浏览 675回答 4
4回答

jeck猫

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("[运行静态区块]");}}

阿波罗的战车

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关键字除了一个是方法,一个是关键字外,最主要有什么区别?它们的区别在于创建对象的方式不一样,前者是使用类加载机制,后者是创建一个新类。那么为什么会有两种创建对象方式?这主要考虑到软件的可伸缩、可扩展和可重用等软件设计思想。
随时随地看视频慕课网APP

相关分类

Java
JavaScript
我要回答