获取运行时类的其它结构、调用指定的属性和方法
来源:互联网 发布:linux服务器作用 编辑:程序博客网 时间:2024/06/03 21:31
环境准备:
包结构:
===========================
Person.java
package com.atguigu.java;import java.io.Serializable;public class Person extends Creature<String> implements Comparable,Serializable{ String name; private int age; public String id; public Person() { super(); System.out.println("Person()...."); } private Person(String name){ this.name = name; } public Person(String name, int age) { super(); this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "Person [name=" + name + ", age=" + age + "]"; } @MyAnnotation("atguigu") public static void show() throws RuntimeException{ System.out.println("我是一个人!"); } @Override public int compareTo(Object o) { // TODO Auto-generated method stub return 0; } private void info(){ System.out.println("君生我未生 我生君已老"); } public String getNation(String nation,int year){ System.out.println("nation : " + nation); return nation + "!!"; }}
=============================
Creature.java
package com.atguigu.java;public class Creature<T> {//生物 public double weight;//体重 public void breath(){ System.out.println("呼吸"); }}
==============================
获取运行时类的其它结构:
package com.atguigu.java;import java.lang.reflect.Constructor;import java.lang.reflect.Type;import org.junit.Test;public class OtherTest { //获取运行类所在的包 @Test public void getPackageTest(){ Class clazz = Person.class; Package pack = clazz.getPackage(); System.out.println(pack); } //获取运行时类实现的接口 @Test public void getInerfacesTest(){ Class clazz = Person.class; Class[] interfaces = clazz.getInterfaces(); for(int i = 0;i <interfaces.length;i++){ System.out.println(interfaces[i]); } } //获取运行时类带泛型的父类 @Test public void getSuperClassTest1(){ Class clazz = Person.class; Type superclass = clazz.getGenericSuperclass(); System.out.println(superclass); } //获取运行时类的父类 @Test public void getSuperClassTest(){ Class clazz = Person.class; Class superclass = clazz.getSuperclass(); System.out.println(superclass); } @Test public void getConstructorTest(){ Class clazz = Person.class; //getDeclaredConstructors():获取对应的运行时类中声明的所有的构造器 Constructor[] cons = clazz.getDeclaredConstructors(); for(int i = 0;i < cons.length;i++){ System.out.println(cons[i]); } }}
=================================
调用指定的属性和方法:
package com.atguigu.java;import java.lang.reflect.Field;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;import org.junit.Test;/* * 反射的应用三:如何调用运行时类中指定的结构:属性、方法、构造器(掌握) */public class ReflectionTest2 { @Test public void staticMethodTest() throws Exception{ Class clazz = Person.class; //public static void show() throws RuntimeException{} Method m = clazz.getDeclaredMethod("show"); m.setAccessible(true); Object returnValue = m.invoke(Person.class); System.out.println(returnValue); } // 调用指定的方法 @Test public void MethodTest() throws Exception { Class clazz = Person.class; //1.getDeclaredMethod(String methodName,Class ... paramTypes): Method method = clazz.getDeclaredMethod("getNation",String.class,int.class); //辅助的: Person p = (Person) clazz.newInstance(); //2.调用setAccessible(true),保证此方法是可访问的 method.setAccessible(true); //3.调用此方法:object invoke(Object obj,Object ... paramValues): //invoke()的返回值即为调用此方法对应的运行时类中的方法的返回值。 Object returnVal = method.invoke(p, "CHN",10); System.out.println(returnVal); } // 调用指定的属性 @Test public void FieldTest() throws Exception { Class clazz = Person.class; // 1.获取对应的运行时类中指定的属性 // getField(String fieldName):只能获取对应的运行时类中声明为public的属性 // 不建议使用此方法 Field field1 = clazz.getField("id"); // Field field1 = clazz.getField("name"); // System.out.println(field1); // 建议使用:1.getDeclaredField(String fieldName):获取运行时类指定属性名的方法。 // 任何权限修饰符修饰的都可以获取 Field field2 = clazz.getDeclaredField("age"); // System.out.println(field2); // 辅助操作:创建运行时类的对象 Person p = (Person) clazz.newInstance(); // 2.调用setAccessible(true),保证此属性是可访问的 field2.setAccessible(true); // 3.get(Object obj):获取指定运行时类的对象obj的当前属性的值 System.out.println(field2.get(p)); // set(Object obj,Object fieldValue):设置运行时类的对象obj的当前属性值为fieldValue field2.set(p, 23); System.out.println(field2.get(p)); }}
=========================
未完待续!
阅读全文
0 0
- 获取运行时类的其它结构、调用指定的属性和方法
- Java反射机制获取/调用类的属性和方法
- 反射获取类属性和方法的调用
- Request的RawUrl属性,和其它获取url信息的各种方法比较(转)
- REQUEST的RAWURL属性,和其它获取URL信息的各种方法比较
- Request的RawUrl属性,和其它获取url信息的各种方法比较
- 创建对应的运行时类的对象、获取运行时类的所有属性、方法
- 属性和方法的调用
- OC运行时获取对象的所有属性、所有方法
- 获取JVM默认编码以及获取其它JVM属性的方法
- 调用其它的模版文件输出和模版类的display方法使用
- Reflection--获取运行时类的指定信息
- 复制表结构,获取指定表的创建脚本,包括表和字段的属性、外键等
- 封装获取某个元素指定css属性值的方法
- CAKEPHP中调用其它类的方法【续】
- 获取其它apk的资源方法
- 获取运行时类的方法
- VC中调用和运行其它应用程序(比如使用cmd.exe的功能)
- 安卓Gradle编译失败问题分析及解决
- 《懒人Shell脚本》之十——统计多重路径下的不同扩展名文件及个数
- java内存区域-运行时数据区
- 第一个 Hibernate 程序(入门详解)
- Centos6.5 忘记root密码的解决办法
- 获取运行时类的其它结构、调用指定的属性和方法
- 进程内存布局
- 简单的例子:Java结合图灵机器人开发
- HDU 5988 2016青岛区域赛 (最小费用流)
- C语言实现atoi和itoa(字符串与数字之间的转化)
- gogs的windows安装
- codeforces 848C C. Goodbye Souvenir cdq分治
- jvm的简单了解及实现
- 什么是动态代理