「暴力反射java」暴力反射有什么不好的么
今天给各位分享暴力反射java的知识,其中也会对暴力反射有什么不好的么进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
- 1、java中反射的三种方法是?
- 2、java,反射里,关于反射机制下列说法错误的是( )
- 3、Java暴力反射练习为啥报错
- 4、java 反射非基本类型的成员?
- 5、Java反射 在只知道类名的情况下,怎样给其中的私有属性赋值
java中反射的三种方法是?
第一种:通过forName()方法;
第二种:类.class;
第三种:对象.getClass()。
举例如下:
package
test;
public class Demo{
public static void
main(){
Class? c1 = null;
Class? c2 =
null;
Class? c3 =
null;
//三种反射用实例化方式
try{
//最常用的一种形式
c1 =
Class.forName("test.X");
}catch(ClassNotFoundException
e){
e.printStackTrace();
}
//通过Object类中的方法实例化
c2
= new X().getClass();
//通过类.class实例化
c3 =
X.class;
System.out.println("类名:" + c1.getName());
//得到类名
System.out.println("类名:" + c2.getName());
//得到类名
System.out.println("类名:" + c3.getName());
//得到类名
}
}
java,反射里,关于反射机制下列说法错误的是( )
B、反射机制指的是在程序编译期间,通过“.class”文件加载并使用一个类的过程。
假如有两个程序员,一个程序员在写程序的时候,需要使用第二个程序员所写的类,但第二个程序员并没完成他所写的类。这是不能通过编译的。利用Java反射的机制,就可以让第一个程序员在没有得到第二个程序员所写的类的时候,来完成自身代码的编译。
Java中编译类型有两种:
静态编译:一次性编译。在编译的时候把你所有的模块都编译进去。
动态编译:按需编译。程序在运行的时候,用到那个模块就编译哪个模块。
如果不理解,那么给个业务场景帮助你理解:比如开发一个阅读器,支持txt,pdf,doc三种格式。我们把读txt,读pdf,读doc定义为三个功能模块。
Java暴力反射练习为啥报错
m.invoke(t,m);
这个调用出错了,应该改成m.invoke(t,null);
因为方法没有参数,你再试试
java 反射非基本类型的成员?
这样?
public class T {
public static void main(String[] args) throws
IllegalAccessException,
InstantiationException,
NoSuchFieldException {
B b = new B();
//先输出value的值 是20
System.out.println(b.getA().getValue());
//反射B的属性a
Field fieldA = b.getClass().getDeclaredField("a");
fieldA.setAccessible(true);//暴力反射,解除私有限制
//反射构造一个对象A
Object objectA = fieldA.getType().newInstance();
//反射A的属性value
Field fieldValue = fieldA.getType().getDeclaredField("value");
fieldValue.setAccessible(true);//暴力反射,解除私有限制
//设置value的值为30
fieldValue.set(objectA, 30);
//更新B的a
fieldA.set(b, objectA);
System.out.println(b.getA().getValue());
}
}
class A {
private int value = 20;
public int getValue() {
return value;
}
}
class B {
private A a = new A();
public A getA() {
return a;
}
}
运行结果:
Java反射 在只知道类名的情况下,怎样给其中的私有属性赋值
利用反射能
//假设类名为A
// 实例化类
A p = new A();
// 获取class
Class c = p.getClass();
// 获取该类所有的字段
Field[] fields = c.getDeclaredFields();
// 遍历赋值
for (int i = 0; i fields.length; i++) {
String filedName = fields[i].getName();
// AccessibleTest类中的成员变量为private,故必须进行此操作
fields[i].setAccessible(true);
// 判断类型
Class? type=fields[i].getType();
//获取字段类型
String typeName=type.getName();
System.out.println(type.getName());
// 对字段进行赋值 第一个参数为对象引用第二个参数为要附的值
//如果为字符串类型
if("java.lang.String".equals(typeName)){
fields[i].set(p, "1");
}
//如果为日期类型
else if("java.util.Date".equals(typeName)){
fields[i].set(p, new Date());
}
else{
fields[i].set(p, 1);
}
}
//楼主我只是简单的写了下。可能还需要判断字段名称以及其他类型什么的。
最后希望楼主多看看java 文档。
关于暴力反射java和暴力反射有什么不好的么的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。
发布于:2022-11-23,除非注明,否则均为
原创文章,转载请注明出处。