Java反射(8个)

来源:互联网 发布:c语言编写 玫瑰花 编辑:程序博客网 时间:2024/06/11 18:28
package cn.happy2.demo1;import java.io.Serializable;import java.util.Map;import javax.annotation.Resource;import javax.security.auth.callback.CallbackHandler;import javax.security.sasl.SaslClient;import javax.security.sasl.SaslClientFactory;import javax.security.sasl.SaslException;public class UserInfo implements Runnable,Serializable{@Resourceprivate int age;private String str;@Overridepublic void run() {}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getStr(String name) throws NullPointerException,ArithmeticException,Exception{return "你信佛么";}public void setStr(String str) {this.str = str;}public UserInfo(Integer age, String str) {System.out.println("hehe");this.age = age;this.str = str;}public UserInfo() {System.out.println("hhhhhhhhhhhh");}}

package cn.happy2.demo1;import java.lang.reflect.Constructor;import java.lang.reflect.Field;import java.lang.reflect.Method;import javax.annotation.Resource;public class Test {/** * @param args * @throws Exception */public static void main(String[] args) throws Exception {Class cl = Class.forName("cn.happy2.demo1.UserInfo");getPackName(cl);getPackNames(cl);getPackNamess(cl);getPackNamdess(cl);getPackNamdessss(cl);getNamddessss(cl);getNamdddessss(cl);getPackNamddessss(cl);}public static void getPackName(Class cl) {Package p = cl.getPackage();System.out.println("包名" + p.getName());System.out.println("类名" + cl.getSimpleName());}public static void getPackNames(Class cl) {System.out.println("此类父类的类名是:" + cl.getSuperclass().getName());Class[] in = cl.getInterfaces();StringBuffer sbb = new StringBuffer("此类实现的接口是:");for (Class cls : in) {sbb.append(cls.getSimpleName() + ",");}System.out.println(sbb.substring(0, sbb.length() - 1));}public static void getPackNamess(Class cl) throws Exception {StringBuffer sb = new StringBuffer("在类中的字段有:");Field[] fields = cl.getDeclaredFields();Field declared = cl.getDeclaredField("str");System.out.println("name字段:" + declared.getName());declared.setAccessible(true);Object obj = cl.newInstance();System.out.println("name字段的值为:" + declared.get(obj));for (Field item : fields) {item.setAccessible(true);sb.append(item.getName() + ",");}System.out.println(sb.substring(0, sb.length() - 1));}public static void getPackNamdess(Class cl) {StringBuffer sb = new StringBuffer("在类中的方法有:");Method[] methods = cl.getMethods();for (Method item : methods) {for (Class item1 : item.getParameterTypes()) {System.out.println(item.getName() + "方法的参数是:" + item1.getName());}sb.append(item.getName() + ",返回值类型为:"+ item.getReturnType().getSimpleName() + ",");}System.out.println(sb.substring(0, sb.length() - 1));}public static void getPackNamdessss(Class cl) throws Exception {Method method = cl.getMethod("getStr", String.class);Object obj = cl.newInstance();Object invoke = method.invoke(obj, "哈哈");System.out.println(invoke);}public static void getNamddessss(Class cl) throws Exception {Field field = cl.getDeclaredField("age");Resource ans = field.getAnnotation(Resource.class);System.out.println(ans);}public static void getNamdddessss(Class cl) throws Exception {Method method = cl.getMethod("getStr", String.class);Class[] exec = method.getExceptionTypes();StringBuffer sb = new StringBuffer("在方法中抛出异常");for (Class item : exec) {sb.append(item.getName() + ",");}System.out.println(sb.substring(0, sb.length() - 1));}public static void getPackNamddessss(Class cl) throws Exception {Constructor[] cs = cl.getConstructors();StringBuffer s = new StringBuffer("构造:");for (Constructor item : cs) {s.append(item.getName() + ",");}System.out.println(s);Constructor cs1 = cl.getConstructor(Integer.class, String.class);cs1.newInstance(18, "哈哈");}}
通过反射实现获取类的 接口,异常,方法。。。等等等
原创粉丝点击