当前位置:首页 » 编程语言 » java反射实例

java反射实例

发布时间: 2022-04-07 13:58:33

java反射实例化方法的问题

少用null,换成空串

new一个

⑵ java反射的实际案例,java反射的作用

反射的一个最简单的应用就是可以通过类的全限定名来创建对象,可以获取类的私有属性等,从这个就可以看出反射的强大之处

⑶ java 怎么反射包名下指定实例

public static void main(String[] args){
try {
Class cla = Class.forName("com.ssm.test.Test");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
是这样子吗? 希望能帮到你!

⑷ java反射 实例化对象

public class Test2 {

@SuppressWarnings("unchecked")
public static void main(String[] args) {
List<String[]> list = new ArrayList<String[]>();
list.add(new String[] {"Test2", "test", "printTestString"});
for (String[] strs : list) {
if (strs != null && strs.length == 3) {
try {
Class clazz = Class.forName(strs[0]);
Method method = clazz.getDeclaredMethod(strs[1], String.class);
Object obj = method.invoke(clazz.newInstance(), strs[2]);
System.out.println("结果:" + obj);

} catch(Exception e) {
e.printStackTrace();
}
}
}
}

public String test(String str) {
System.out.println(str);
return str;
}

}

⑸ java如何用反射获取类实例

class类有newInstance() 这个方法就可以用来生成实例。

⑹ Java反射实现几种方式

1. 通过Object类的getClass方法来获取
java.lang.Object中定义有getClass方法:public final Class getClass()
所有Java对象都具备这个方法,该方法用于返回调用该方法的对象的所属类关联的Class对象,例如:
Date date1 = new Date();
Date date2 = new Date();
Class c1 = date1.getClass();
Class c2 = date2.getClass();
System.out.println(c1.getName());
// java.util.Date
System.out.println(c1 == c2);
// true
上面的代码中,调用Date对象date1的getClass方法将返回用于封装Date类信息的Class对象。
这里调用了Class类的getName方法:public String getName(),这个方法的含义很直观,即返回所封装的类的名称。
需要注意的是,代码中的date1和date2的getClass方法返回了相同的Class对象(c1==c2的值为true)。这是因为,对于相同的类,JVM只会载入一次,而与该类对应的Class对象也只会存在一个,无论该类实例化了多少对象。
另外,需要强调的是,当一个对象被其父类的引用或其实现的接口类型的引用所指向时,getClass方法返回的是与对象实际所属类关联的Class对象。例如:
List list = new ArrayList();
System.out.println(list.getClass().getName()); // java.util.ArrayList
上面的代码中,语句list.getClass()方法返回的是list所指向对象实际所属类java.util.ArrayList对应的 Class对象而并未java.util.List所对应的Class对象。有些时候可以通过这个方法了解一个对象的运行时类型,例如:
HashSet set = new HashSet();
Iterator it = set.iterator();
System.out.println(it.getClass().getName()); //java.util.HashMap$KeyIterator
从代码可以看出,HashSet的iterator方法返回的是实现了Iterator接口的HashMap内部类(KeyIterator)对象。
因为抽象类和接口不可能实例化对象,因此不能通过Object的getClass方法获得与抽象类和接口关联的Class对象。
2. 使用.class的方式
使用类名加“.class”的方式即会返回与该类对应的Class对象。例如:
Class clazz = String.class;
System.out.println(clazz.getName()); // java.lang.String
这个方法可以直接获得与指定类关联的Class对象,而并不需要有该类的对象存在。
3. 使用Class.forName方法
Class有一个着名的static方法forName:public static Class forName(String className) throws ClassNotFoundException
该方法可以根据字符串参数所指定的类名获取与该类关联的Class对象。如果该类还没有被装入,该方法会将该类装入JVM。
该方法声明抛出ClassNotFoundException异常。顾名思义,当该方法无法获取需要装入的类时(例如,在当前类路径中不存在这个类),就会抛出这个异常。
例如,如果当前类路径中存在Foo类:
package org.whatisjava.reflect;
public class Foo {
public Foo() {
System.out.println("Foo()");
}
static {
System.out.println("Foo is initialized");
}
}
运行下面的代码:
Class clazz = Class.forName("org.whatisjava.reflect.Foo");
控制台会有如下输出:
Foo is initialized
Class.forName("org.whatisjava.reflect.Foo")首先会将reflection.Foo类装入JVM,并返回与之关联的Class对象。JVM装入Foo类后对其进行初始化,调用了其static块中的代码。需要注意的是:forName方法的参数是类的完 整限定名(即包含包名)。
区别于前面两种获取Class对象的方法:使用Class.forName方法所要获取的与之对应的Class对象的类可以通过字符串的方式给定。该方法通常用于在程序运行时根据类名动态的载入该类并获得与之对应的Class对象。
通过上面的文章相信你对java的反射机制有了一定的认识,同时也对java中Class类的用法有了比较清晰的理解,在我们实际工作的过程中,我们不断的运用java知识来解决实际生活中的问题的时候我们就能对java反射机制有一个更深入的理解!

⑺ 如何使用JAVA反射/JAVA反射实例

Class<?>class1=null;
class1=Class.forName("com.demo.Person");
//由于这里不能带参数,所以你要实例化的这个类Person,一定要有无参构造函数哈~
Personperson=(Person)class1.newInstance();
person.setAge(20);
person.setName("LeeFeng");

⑻ 举一个java反射的例子,反射一般在java中什么时候用Interceptor是通过反射实现的吗

比如说自己定义了一个annotation,然后要自己写一个解析器,此时用反射。

还有一些MVC的例子,假如在xml文件中定义了action类与其对应的logic类,可以通过反射在action中获得logic的实例;如果在action的父类中定义了类似直接在action中调用logic方法的方法,我们可以通过给方法中传入logic的类名和方法名直接反射调用方法。

⑼ Java 通过绝对路径反射,创建类的实例

Class.forName参数需要传的是一个类名,而不是一个文件名。
这个类需要是在classpath范围中的

热点内容
安卓鸿蒙苹果哪个好用 发布:2025-01-19 10:32:33 浏览:264
正规物业保安怎么配置 发布:2025-01-19 10:27:30 浏览:518
断裂下载ftp 发布:2025-01-19 10:27:30 浏览:641
安卓导航怎么调对比度 发布:2025-01-19 10:26:52 浏览:25
服务器共享文件如何查看访问记录 发布:2025-01-19 10:08:55 浏览:400
datasourceSQL 发布:2025-01-19 10:01:25 浏览:838
aspnet网站的编译 发布:2025-01-19 10:00:49 浏览:334
路特仕A9工厂密码是多少 发布:2025-01-19 09:59:44 浏览:257
linux的命令find 发布:2025-01-19 09:42:55 浏览:174
简单的计算机编程 发布:2025-01-19 09:39:54 浏览:520