黑马程序员——个人对JAVA反射的一些理解

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

 

因为反射部分是转载的,没通过老师的审核,现在自己写下对反射的理解。纯手打哦!

先说概念:反射就是把JAVA类中的各种成分,映射成新的JAVA类“

举个例子:

class Student

{

        private String name;

        int age;

        Student(String name,int age)

        {

                this.name = name;

                this.age = age;

        }

        public void outInfo()

        {

                System.out.println(name+"::"+age);

        }

}

上面是简单地定义一个类,这个类中包含了,构造方法,成员变量,成员方法。

那么,构造方法可以提取出来,形成一个类,我暂且称之为“构造方法类”吧。用Constructor表示。

           成员变量可以提取出来,形成一个类,我暂且称之为“成员变量类”吧。用Field表示。

           成员方法可以提取出来,形成一个类,我暂且称之为“成员方法类”吧。用Method表示。

所有的JAVA类中都有构造方法,成员变量,成员方法。所以可以理解为:所有的构造方法是一个类,所有的成员变量是一个类,所有的成员方法是一个类。

这三个类就分别是:Constructor、Field、Method

这三个类中还封装了不同的方法,来方便我们操作,具体的可以查看API

——————————————————————————————————————————————————————————————

下面分别针对这三个类,举一个例子。这些例子在视频里都有讲过

(1)构造方法的反射:

Constructor c1 = String.class.getConstructor(StringBuffer.class);

String str2 = (String)c1.newInstance(new StringBuffer("abc"));

//或者是String obj = (String)Class.forName("java.lang.String").newInstance();

 

 

(2)成员变量的反射:

Student s1 = new Student("zhangsan",20);

Field f = s1.getClass().getField("age");

System.out.println(f.get(s1));

如果变量被private修饰,那么就要用到“暴力反射”

getDeclaredField("age");

f.setAccessible(true);

 

 

(3)成员方法的反射:

method methodCharAt = String.class.getMethod("charAt",int.class);

methodCharAt.invoke(str1,1);

//第一个参数是“你想invoke谁的方法”,第二个参数是“这个方法的参数”

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值