IT辅导娱乐网| 蜘蛛地图| 所有文章|
java反射机制-高级特性详解 - IT辅导
  • 首页
  • IT技术 IT辅导资源网设计图
    • DVWA靶场
    • sqli-lab靶场
  • 源码基地
  • 软件分享 IT辅导资源网设计图
    • 辅助软件
  • emlog教程
  • 白嫖活动
  • 网络技巧 IT辅导资源网设计图
    • seo教程
  • 编程教程
  • 值得看一看 IT辅导资源网设计图
    • 值得听一听
    • 读懂世界
    • 活动线报
  • 更多功能 IT辅导资源网设计图
    • 在线投稿
    • 公告动态
    • 广告合作
    • 匿名投稿


登录后,享受更多优质服务哦
IT辅导资源网站长qq头像
欢迎回来,可爱的会员!个人中心退出登录
导航菜单
  • 首页
  • IT技术
    • DVWA靶场
    • sqli-lab靶场
  • 源码基地
  • 软件分享
    • 辅助软件
  • emlog教程
  • 白嫖活动
  • 网络技巧
    • seo教程
  • 编程教程
  • 值得看一看
    • 值得听一听
    • 读懂世界
    • 活动线报
  • 更多功能
    • 在线投稿
    • 公告动态
    • 广告合作
    • 匿名投稿

java反射机制-高级特性详解

2020/9/7 五年级扛把子 

一.   介绍

    Java的反射机制是指在程序的运行状态中,可以动态的构造任意一个类的对象,可以了解任意一个对象所属的类,可以了解任意一个类的成员变量和方法,可以调用任意一个对象的属性和方法,这就是JAVA反射的特性。

Java反射机制提供了那些功能:

1.     在运行时判断任意一个对象所属的类;

2.      在运行时构造任意一个类的对象;

3.      在运行时判断任意一个类所具有的成员变量和方法;

4.      在运行时调用任意一个对象的方法;

二.JAVA反射的使用

    1.获取class类对象的方式

              a.通过Object类的getClass()方法获取

                     例如:

                            Person person=new Person();

                            Class<?> cls=person.getClass();

                            Person person2=( Person) cls.newInstance();

                b.通过静态属性Class方式获取

                      例如:

                             Class<?> cls=Person.Class();

                             Person person=( Person) cls.newInstance();

               c.通过Class类中静态方法forName()方法获取

                       例如:

                             Class<?> cls= Class.forName(“包名.类全名”);//如:com.cn. Person

                             Person person=( Person) cls.newInstance();

    2.反射获取构造器方法

           a. 获取所有构造器

                public Constructor[] getConstructors()

                public Constructor[] getDeclaredConstructors()

           b.获取单个指定构造器

                 public Constructor getConstructor(Class... parameterTypes)

                 public Constructor getDeclaredConstructor(Class... parameterTypes)

    3.反射获取方法

          a.获取所有方法

                  getDeclareMethods()

          b.获取方法的返回值类型

                  getReturnType()

          c. 获取方法的传入参数类型

                  getParameterTypes();

           d.获取指定的方法

                  getDeclareMethod("方法名,参数类型.class,....")

1.  成员变量

a. 获取所有成员变量

getDeclaredFields 

b. 获取特定的成员变量

getDeclaredField(参数类型.class,....) 

2.  父类和父接口

a.获取某类的父类

getSuperclass()

b. 获取某类实现的接口

getInterfaces()

三.   反射使用例子

1.  定义一个Car类,该类拥有两个构造函数、一个方法及3个属性,如下所示:

public class Car {
private String brand;
private String color;
private int maxSpeed;

public Car() {
System.out.println("init car!!");
}

public Car(String brand, String color, int maxSpeed) {
this.brand = brand;
this.color = color;
this.maxSpeed = maxSpeed;
}

public void introduce() {
System.out.println("brand:" + brand + ";color:" + color + ";maxSpeed:" + maxSpeed);
}

public String getBrand() {
return brand;
}

public void setBrand(String brand) {
this.brand = brand;
}

public String getColor() {
return color;
}

public void setColor(String color) {
this.color = color;
}

public int getMaxSpeed() {
return maxSpeed;
}

public void setMaxSpeed(int maxSpeed) {
this.maxSpeed = maxSpeed;
}
}

2. 通过反射机制操作如下:

import java.lang.reflect.Constructor;
import java.lang.reflect.Method;

public class ReflectTest {

public static Car initByDefaultConst() throws Throwable {

//①通过类装载器获取Car类对象
ClassLoader loader = Thread.currentThread().getContextClassLoader();
Class clazz = loader.loadClass("com.smart.reflect.Car");

//②获取类的默认构造器对象并通过它实例化Car
Constructor cons = clazz.getDeclaredConstructor((Class[]) null);
Car car = (Car) cons.newInstance();

//③通过反射方法设置属性
Method setBrand = clazz.getMethod("setBrand", String.class);
setBrand.invoke(car, "红旗CA72");
Method setColor = clazz.getMethod("setColor", String.class);
setColor.invoke(car, "黑色");
Method setMaxSpeed = clazz.getMethod("setMaxSpeed", int.class);
setMaxSpeed.invoke(car, 200);
return car;
}

public static void main(String[] args) throws Throwable {
Car car = initByDefaultConst();
car.introduce();
}
}



 点赞:0  打赏  分享  海报

  • 打赏支付宝扫一扫
  • 打赏微信扫一扫
  • 打赏企鹅扫一扫
结束语
温馨提醒:如有技术问题以及资源失效请联系站长 QQ89549822 进行反馈!!!
 您阅读本文耗时: 0小时02分35秒
热度:323° 发布时间:2020年9月7日

推荐:

标题:java反射机制-高级特性详解

链接: https://www.itfd.cn/post-1263.html

版权:转载请注明来源于【IT辅导娱乐网】为原创

上一篇: springBoot注解的使用详解

下一篇: java list常用方法简介

作者头像 作者名称 作者性别
五年级扛把子
联系作者 作者主页

热门推荐

1 看了这还敢经常吃外卖吗?
2 windos nodejs安装及npm和cnpm的安装
3 量子互联网要来了?美国政府投入巨资,大力发展量子互联网
4 Shell运维需掌握的常用技能
5 快速了解掌握html5新特性
6 百度副总裁韦方涉嫌贪腐已凉

评论列表

取消回复

  • 存档

    • 2020年10月(15)
    • 2020年9月(248)
    • 2020年8月(92)
    • 2020年7月(5)
    • 2020年6月(224)
    • 2020年5月(392)
    • 2020年4月(267)
    • 2020年3月(76)
    • 2019年3月(1)
    • 1970年1月(29)
  • 搜索

  • 热门文章

    • 神佑之路手游源码-附视频教程
    • 最新可用老王VPN2.22.15谷歌市场版,免费使用
    • 私藏的十个网站,不看后悔系列
    • 虚拟商品自动发货商城源码
    • 不吃苦、不奋斗,你要青春做什么?
  • 随机文章

      • 视频转换器【一款支持格式众多的视频格式转换工具】
        • wordpress添加CDN后获取真实用户ip教程
          • 一言不合!乌克兰女子当众脱掉内裤当口罩
            • 5月31日新闻早讯,每天60秒读懂世界
              • 中国移动查网龄揭晓网龄勋章 领取五大专属权益
    提示信息

    SQL语句执行错误: SELECT COUNT(*) AS total FROM emlog_twitter
    Table 'itfd.emlog_twitter' doesn't exist

    «点击返回