博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java基础22-反射reflect
阅读量:4101 次
发布时间:2019-05-25

本文共 3408 字,大约阅读时间需要 11 分钟。

反射reflect

创建一个类Animal,创建一个实体类Person继承Animal

class Animal {
String dd;}
package day12.reflect;public class Person extends Animal {
String name; String age; public Person() {
super(); // TODO Auto-generated constructor stub } public Person(String name, String age) {
super(); this.name = name; this.age = age; } public String getName() {
return name; } public void setName(String name) {
this.name = name; } public String getAge() {
return age; } public void setAge(String age) {
this.age = age; } public void hello() {
System.out.println("你好"); } public void hi(String name) {
System.out.println(name+",你好"); }}

Class实例

package day12.reflect;import java.util.ArrayList;public class Test {
public static void main(String[] args) {
// 所有类都是class实例 Person p = new Person(); Class c3 = p.getClass(); System.out.println(c3);// class day12.reflect.Person // 2对象 Class c4 = Person.class; System.out.println(c4);// class day12.reflect.Person // 3.给字符串 String类的class实例 try {
// class实例 Class c = Class.forName("day12.reflect.Person");// class day12.reflect.Person Class c1 = Class.forName("java.util.ArrayList");// class java.util.ArrayList Class c2 = Class.forName("java.lang.String");// class java.lang.String System.out.println(c); System.out.println(c1); System.out.println(c2); } catch (ClassNotFoundException e) {
// TODO Auto-generated catch block e.printStackTrace(); } }}

Class实例取出属性、方法和父类

package day12.reflect;import java.lang.reflect.Field;import java.lang.reflect.Method;import java.util.ArrayList;import java.util.HashMap;import javax.swing.JFrame;public class Test2 {
// 利用class实例取出属性和方法 public static void main(String[] args) {
Class c = Person.class; Field sx[] = c.getDeclaredFields(); //得到属性 for (Field f : sx) {
System.out.println(f); } /* * java.lang.String day12.reflect.Person.name java.lang.String * day12.reflect.Person.age */ Method sz[] = c.getDeclaredMethods();//得到方法 Method sz2[] = c.getMethods();//同时得到继承的方法 for (Method m : sz) {
System.out.println("方法:"+m); } /* * 方法:public java.lang.String day12.reflect.Person.getName() 方法:public void * day12.reflect.Person.setName(java.lang.String) 方法:public void * day12.reflect.Person.hello() 方法:public void * day12.reflect.Person.setAge(java.lang.String) 方法:public java.lang.String * day12.reflect.Person.getAge() 方法:public void * day12.reflect.Person.hi(java.lang.String) */ Class p=c.getSuperclass();//查父类 System.out.println("父类:"+p);//父类:class day12.reflect.Animal Class c2=JFrame.class;//一阶一阶的查父类 while(true) {
c2=c2.getSuperclass(); System.out.println(c2); if(c2==null) {
break; } } /* * class java.awt.Frame class java.awt.Window class java.awt.Container class * java.awt.Component class java.lang.Object null */ }}

反射调用方法

package day12.reflect;import java.lang.reflect.Method;public class Test3 {
public static void main(String[] args) {
//不用反射,如何调用方法 Person a=new Person(); a.hello(); a.hi("Aimee"); //反射如何调用方法 1对象 2方法 3参数 Class c=Person.class; try {
Object obj=c.newInstance();//对象 Method m=c.getDeclaredMethod("hello");//无参数方法 m.invoke(obj); Method m=c.getDeclaredMethod("hi", String.class);//有一个参数 m.invoke(obj, "Aimee"); } catch (Exception e) {
// TODO Auto-generated catch block e.printStackTrace(); } }}

转载地址:http://maksi.baihongyu.com/

你可能感兴趣的文章
Xshell 4 入门
查看>>
SoapUI-入门
查看>>
Oracle -常用命令
查看>>
JAVA技术简称
查看>>
ORACLE模糊查询优化浅谈
查看>>
2016——个人年度总结
查看>>
2017——新的开始,加油!
查看>>
【Python】学习笔记——-6.2、使用第三方模块
查看>>
【Python】学习笔记——-7.0、面向对象编程
查看>>
【Python】学习笔记——-7.1、类和实例
查看>>
【Python】学习笔记——-7.2、访问限制
查看>>
【Python】学习笔记——-7.3、继承和多态
查看>>
【Python】学习笔记——-7.4、获取对象信息
查看>>
【Python】学习笔记——-7.5、实例属性和类属性
查看>>
高通安卓调试LCD几方面总结(一)
查看>>
高通安卓调试LCD几方面总结(二)
查看>>
修改 EditText 中的光标位置
查看>>
Android中shape的使用
查看>>
i2c驱动调试经验
查看>>
我对linux理解之i2c
查看>>