用AI赚第一桶💰低成本搭建一套AI赚钱工具,源码可二开。 广告
``` import java.lang.reflect.*; public class ShowMethods { static final String usage = "usage: \n" + "ShowMethods qualified.class.name\n" + "To show all methods in class or: \n" + "ShowMethods qualified.class.name word\n" + "To search for methods involving 'word'"; public static void main(String[] args) { if(args.length < 1) { System.out.println(usage); System.exit(0); } try { Class c = Class.forName(args[0]); //获取类 Method[] m = c.getMethods(); //获取类的方法 Constructor[] ctor = c.getConstructors(); //获取类的构造器 if(args.length == 1) { for (int i = 0; i < m.length; i++) System.out.println(m[i].toString()); for (int i = 0; i < ctor.length; i++) System.out.println(ctor[i].toString()); } else { for (int i = 0; i < m.length; i++) if(m[i].toString() .indexOf(args[1])!= -1) System.out.println(m[i].toString()); for (int i = 0; i < ctor.length; i++) if(ctor[i].toString() .indexOf(args[1])!= -1) System.out.println(ctor[i].toString()); } } catch (ClassNotFoundException e) { System.out.println("No such class: " + e); } } } ///:~ ``` 在编译期,程序并不知道类的信息。类名是由用户输入的。 传统的编程环境中不太可能出现这种情况,但在更大规模的编程世界中,在许多重要情况下会发生。 1.读取了一段二进制数据,然后发现其是一个类。 2.RMI(remote method invoke),它允许一个java程序将对象分布到多台机器上。 3.等等之类 RTTI(Run-Time Type Identification),通过运行时类型信息程序能够使用基类的指针或引用来检查这些指针或引用所指的对象的实际派生类型。 RTTI和反射之间真正的区别在于:对RTTI来说,编译器在编译时打开和检查.class文件。(换句话说,我们可以用“普通”方式电泳对象的所有方法。)而对于反射机制来说,.class文件在编译时时不可获取的,所以实在运行时打开和检查.class文件。 总之,反射其实就是运行时的,类加载机制. 没啥特别的 ``` import java.lang.reflect.Field; class NodeTest1 { private int a = 13; private int b = 21; } public class Test001 { public static void main(String []args) { NodeTest1 node = new NodeTest1(); Field []fields = NodeTest1.class.getDeclaredFields(); for(Field field : fields) { field.setAccessible(true); try { int i = field.getInt(node); field.setInt(node, i * 2); System.out.println(field.getInt(node)); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } } } } ``` 代码最基本的意思就是:实例化一个NodeTest1这个类的实例,然后取出两个属性,分别乘以2,然后再输出,相信大家会认为这怎么可能,NodeTest1根本没有public方法,代码就在这里,将代码拷贝回去运行下就OK了,OK,现在不说这些了,运行结果为: 26 42