黑马程序员_java的反射与内省

本文深入探讨了Java反射与内省的概念、使用方法及其在程序设计中的应用,包括如何通过反射操作类的构造方法、成员方法、属性等,以及内省如何专门用于操作JavaBean的属性。此外,文章还阐述了这两种机制如何提高程序的智能化和可扩展性,并以实际项目如BeanUtils、Struts为例加以说明。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

---------------------- <a href="http://www.itheima.com" target="blank">ASP.Net+Unity开发</a><a href="http://www.itheima.com" target="blank">.Net培训</a>、期待与您交流! ----------------------

一:反射


1.什么是反射
      反射就是在运行状态把Java 类中的各种成分映射成相应相应的Java 类,可以动态得获取所有的属性以及动态调用任意一个方法。
     1).一段java代码在程序的运行期间会经历三个阶段:source-->class-->runtime

     2).Class对象

        在java中用一个Class对象来表示一个java类的class阶段

        Class对象封装了一个java类定义的成员变量、成员方法、构造方法、包名、类名等。
2.反射怎么用

  1).获得java类的各个组成部分,首先需要获得代表java类的Class对象

       获得Class对象有以下三种方式:

        Class.forname(className)            用于做类加载

        obj.getClass()                              用于获得对象的类型

        类名.class                                    用于获得指定的类型,传参用

  2).反射类的构造方法,获得实例

       Class clazz = 类名.class;

       Constuctor con = clazz.getConstructor(new Class[]{paramClazz1,paramClazz2,.....});

       con.newInstance(params....);

  3).反射类的成员方法

       Method m = clazz.getMethod(methodName,new Class[]{paramClazz1,paramClazz2,.....});

       m.invoke();

  4).反射类的属性

       Field field = clazz.getField(fieldName);

       field.setAccessible(true);//设置为可访问

       filed.setObject(value);          //设置值

       Object value = field.get(clazz);      //获得值

       Object staticValue = filed.get(Class);     //获得静态值

    

二:内省

1.什么是内省

  通过反射的方式操作JavaBean的属性,jdk提供了PropertyDescription类来操作访问JavaBean的属性,Beantils工具基于此来实现。

2.内省怎么用

  1).操作一个属性

       Object obj = new Object();

       PropertyDescriptor pd = new PropertyDescriptor(propertyName,Class);     //声明属性描述对象,一次只可描述一个属性

       Method m = pd.getWriterMethod();//获取setter方法

       m.invoke(obj,value);

       Method m = pd.getReaderMethod();//获取getter方法

       Object value = m.invoke(obj);

     2).操作多个属性

       BeanInfo bi = Instospector.getBeanInfo(beanClass);//获取Bean描述对象

       PropertyDescriptor[] pds = bi.getPropertyDescriptors();//获取属性描述对象数组

       拿到属性描述对象数组之后再循环数组,剩余的操作就跟"操作一个属性"相同了。




三:两者区别

 反射可以操作各种不同的java类,那么内省只是通过反射来操作JavaBean的。



四:应用

  框架就是将开发中大量重复的代码其中起来写个通用的程序,框架是给将来的程序使用的,需要现在的类调用将来的,所以框架要运行是依赖于将来的类实现的。

  我们只需要针对接口进行调用,将来的类实现接口,那么方法就固定了。但是将来写的类的类名我们无从得知,这时就需要调用者通过配置文件告诉框架具体的类名。




  将java的反射以及内省机制应用到程序设计中可以大大提高程序的智能化和可扩展性。有很多项目都是使用这两种技术实现其核心功能的。例如BeanUtils,Struts等。


---------------------- <a href="http://www.itheima.com" target="blank">ASP.Net+Unity开发</a><a href="http://www.itheima.com" target="blank">.Net培训</a>、期待与您交流! ----------------------

资源下载链接为: https://pan.quark.cn/s/9648a1f24758 这个HTML文件是一个专门设计的网页,适合在告白或纪念日这样的特殊时刻送给女朋友,给她带来惊喜。它通过HTML技术,将普通文字转化为富有情感和创意的表达方式,让数字媒体也能传递深情。HTML(HyperText Markup Language)是构建网页的基础语言,通过标签描述网页结构和内容,让浏览器正确展示页面。在这个特效网页中,开发者可能使用了HTML5的新特性,比如音频、视频、Canvas画布或WebGL图形,来提升视觉效果和交互体验。 原本这个文件可能是基于ASP.NET技术构建的,其扩展名是“.aspx”。ASP.NET是微软开发的一个服务器端Web应用程序框架,支持多种编程语言(如C#或VB.NET)来编写动态网页。但为了在本地直接运行,不依赖服务器,开发者将其转换为纯静态的HTML格式,只需浏览器即可打开查看。 在使用这个HTML特效页时,建议使用Internet Explorer(IE)浏览器,因为一些老的或特定的网页特效可能只在IE上表现正常,尤其是那些依赖ActiveX控件或IE特有功能的页面。不过,由于IE逐渐被淘汰,现代网页可能不再对其进行优化,因此在其他现代浏览器上运行可能会出现问题。 压缩包内的文件“yangyisen0713-7561403-biaobai(html版本)_1598430618”是经过压缩的HTML文件,可能包含图片、CSS样式表和JavaScript脚本等资源。用户需要先解压,然后在浏览器中打开HTML文件,就能看到预设的告白或纪念日特效。 这个项目展示了HTML作为动态和互动内容载体的强大能力,也提醒我们,尽管技术在进步,但有时复古的方式(如使用IE浏览器)仍能唤起怀旧之情。在准备类似的个性化礼物时,掌握基本的HTML和网页制作技巧非常
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值