************************
首先我创建一个类:
package wcd.test.classforname;
public class TestClass_forName {
String i = "";
//静态代码块
static{
System.out.println("静态代码块执行了");
}
public static void go(){
System.out.println("static方法执行了");
}
public void hello(){
System.out.println("普通方法执行了");
}
public TestClass_forName(){
System.out.println("无参构造执行了");
}
public TestClass_forName(String i){
this.i=i;
}
}
***********************
然后在另一个类里调用
1.Class c = Class.forName("wcd.test.classforname.TestClass_forName");
2.Class c2 = TestClass_forName.class;
3.TestClass_forName t1 = new TestClass_forName();
4.TestClass_forName.class.newInstance();
5.Class.forName("wcd.test.classforname.TestClass_forName").newInstance();
1与2的执行效果一样,只执行静态代码块
3与4与5先执行静态代码块,后执行无参构造。
分享到:
相关推荐
`Class.forName(String className)`方法接收一个字符串参数,这个字符串代表了类的全限定名(包括包名和类名)。当调用此方法时,JVM会执行以下操作: 1. **类加载**:JVM会尝试找到对应的.class文件,并将其加载到...
在Java编程语言中,"class literal"、"instance.getClass()" 和 "Class.forName(String className)" 是三个与类加载和类型查询紧密相关的概念。了解这些概念对于深入理解Java运行时的类加载机制至关重要。 首先,让...
在Java的反射机制中,`Class.forName`和`ClassLoader`都是关键组件,它们在程序运行时动态加载类和实现类的实例化方面扮演着重要角色。理解这两个概念及其区别是深入掌握Java反射的重要一步。 首先,`Class.forName...
Java 中类名.class, class.forName(), getClass() 的区别 Java 中有三种方式可以获取 Class 对象,即类名.class、class.forName() 和 getClass()。这些方法都可以获取 Class 对象,但是在获取 Class 对象的过程中,...
下面我们将深入探讨`Class.forName()`的用途、工作原理以及与`new`关键字的区别。 一、`Class.forName()`的用途 1. **动态加载类**:当需要在程序运行时根据某些条件或用户输入来决定加载哪个类时,`Class.forName...
此时可以使用 `Class.getDeclaredConstructor` 和 `Constructor.newInstance` 方法来解决。 #### 五、Class.forName 与 类加载器 在 Java 中,类是由类加载器负责加载到 JVM 中的。`Class.forName` 方法可以通过...
通过Class类可以获取Class对象,获取Class对象有三种方式:通过Object类的getClass()方法、通过类名.class获取Class对象、通过Class类中的forName()方法。每种方式都有其特点和应用场景,掌握这些方式可以帮助开发者...
总之,通过`Class.forName()`方法,我们可以实现在工程内部的反射机制,动态地访问和操作任何已知类,不论它们位于哪个包中。这为我们的代码提供了更高的灵活性和扩展性,但也需要注意反射可能会带来的安全风险和...
本文将深入探讨Java中动态加载类的基础知识,特别是`Class.forName`方法的使用,以及在扩展区(extensions)内调用`Class.forName`可能遇到的问题。 #### `Class.forName`:动态加载的核心 `Class.forName`方法是...
首先,我们从`Class.forName()`方法开始。这是Java反射机制的一个关键入口点,它用于根据全限定类名(包括包名)加载类。例如,如果我们有一个名为`Robot`的类,我们可以使用以下代码加载它: ```java Class<?> ...
当我们不知道具体的类名,只能通过字符串形式传递时,可以使用`Class.forName`方法。 ```java try { Class<?> clazz = Class.forName("org.whatisjava.reflect.Foo"); Object obj = clazz.newInstance(); ...
- 使用`Class.forName("类的全限定名")`,例如`Class.forName("java.lang.String")`。 #### 二、Class类的特性 `Class`类自身并没有公共的构造方法,它是由JVM自动创建的。这意味着我们无法直接实例化`Class`对象...
Class.forName("oracle.jdbc.driver.OracleDriver").newInstance(); String url = "jdbc:oracle:thin:@localhost:1521:orcl"; String user = "test"; String password = "test"; Connection conn = ...
Class<?> clazz = Class.forName("fully.qualified.className"); ``` - **示例**: ```java Class<?> testTypeForName = Class.forName("TestClassType"); ``` - **注意事项**: - 使用此方法时需要捕获`...
3. **通过全限定类名**:通过`Class.forName()`方法,传入类的全限定名(包名+类名)获取。 ```java Class clazz = Class.forName("com.java.reflection.Person"); ``` #### 四、利用`newInstance`创建对象 `...
`Class.forName()`是配置文件和注解配置反射操作的主要手段,大多数开发框架如Spring依赖这种方式。 接下来是反射实例化对象。一旦有了`Class`对象,我们就可以创建类的实例。`Class`类提供了`newInstance()`方法,...
通过`Class.forName()`方法,可以加载指定名称的类。如果需要在运行时创建类,可能需要使用`java.lang.reflect.Proxy`或字节码操作库如ASM或ByteBuddy。例如,使用Proxy创建一个动态代理类: ```java interface ...
Class.forName("oracle.jdbc.driver.OracleDriver").newInstance(); String url = "jdbc:oracle:thin:@localhost:1521:orcl"; Connection conn = DriverManager.getConnection(url, user, password); ``` 这里,`...
return Class.forName(className).newInstance(); } } ``` 在上述代码中,`createInstance`方法接收一个类名字符串,然后通过反射动态创建并返回该类的实例。 **反射与简单工厂模式的结合** 将反射与简单工厂...