java怎么非显示实例化一个类,希望大虾们给个实例来看看。谢谢了!

2024-12-15 09:03:17
推荐回答(3个)
回答1:

例子:访问被private 修饰的方法和属性

采用反射机制,访问下边的类:

Java代码 收藏代码

public class Private
{
private String name = "张三";

private String getName()
{
return name;
}
}

把该类中private修饰的 name 值改成“李四”,并且用反射机制调用 getName 方法,返回修改后的值。
Java代码 收藏代码

package com.wangzhuo.reflect;

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;

public class PrivateTest
{
public static void main(String[] args)throws Exception
{
//获取Private类的Class对象
Class classType = Class.forName("com.wangzhuo.reflect.Private");

//获取其构造方法对应的Constructor对象
Constructor con = classType.getDeclaredConstructor(new Class[]{});

//创建Private的对象
Object object =con.newInstance(new Object[]{});

//获取Private类中name属性对应的Field对象
Field field = classType.getDeclaredField("name");

//设置避开java访问控制检测
field.setAccessible(true);

//获取修改前的值
Object str = field.get(object);

System.out.println("修改之前name的值:"+(String)str);

//给name属性赋值
field.set(object, "李四");

//获取getName方法对应的Method对象
Method getNameMethod = classType.getDeclaredMethod("getName", new Class[]{});

//设置避开java访问控制检测
getNameMethod.setAccessible(true);

//调用方法,返回值
Object o = getNameMethod.invoke(object, new Object[]{});
System.out.println("修改之后name的值:"+(String)o);
}
}

以上,为java反射机制的使用例子。

回答2:

public class Demo {

public void demo(){
System.out.println("Demo is working");
}

public static void main(String[] args) throws IllegalAccessException, InstantiationException, ClassNotFoundException {

Demo demo = (Demo) Class.forName("Demo").newInstance();
demo.demo();

}

}

JDK 1.5下面一点问题都没有,检查你实际生成的.class文件是不是在你执行的路径里面?你的八成是class path问题

回答3:

Class clazz = Class.forName("java.lang.String");
String str = (String)clazz.newInstance();