黑马程序员 反射

本文深入讲解Java反射机制的核心概念及应用。包括Class类的作用、如何获取Class实例、反射中Constructor、Field和Method对象的使用方法,以及数组与Object的关系等内容。

  ——- android培训java培训、期待与您交流! ———-

1,反射概述

其实就是动态加载一个指定的类,并获取该类中的所有的内容。而且将字节码文件封装成对象,并将字节码文件中的内容都封装成对象,这样便于操作这些成员。
反射就是把Java类中的各种成分映射成相应的java类。

2,Class类描述的信息

类的名字,类的访问属性,类所属于的包名,字段名称的列表,方法名称列表等等。

String getName() 以 String 的形式返回此 Class 对象所表示的实体(类、接口、数组类等)名称

Method[] getMethods() 得到自己所有的方法列表

等等

3,获取Class文件对象三种方式

(a)类名.Class (Object类)

(b)对象.getClass() (数据类型)

(c)class.forName (“包名.类名”) (静态方法)

4,预定义Class实例对象

8个基本数据类型:基本数据类型.class

还有 void.class

5,Constructor

实例对象代表某个类中的一个构造方法

(a)得到某个类中所有的构造方法

Constructor< ? > []getConstructors()

(b)得到某个类中的一个构造方法.

Constructor< T > getConstructor(Class< ? >…parameter Types)

参数中传入要获取的构造方法的参数类型的字节码

(c)得到了构造函数的对象,现在要通过构造函数的对象,来创建类的实例对象。

通过Constructor类中的方法

T newInstance(Object… initargs)

使用此 Constructor 对象表示的构造方法来创建该构造方法的声明类的新实例,并用指定的初始化参数初始化该实例。

注意:

(a)得到构造方法时需要参数类型的字节码

(b)调用构造方法时需要参数类型的对象

/* 反射知识中Constructor类演示 */
public class ConstructorDemo {  
    public static void main(String[] args) throws Exception {  
        //1.获得一个类的字节码  
        Class class1 = Class.forName("java.lang.String");  
           //2.获得这个类的一个构造函数的对象,传入参数的字节码  
        Constructor constructor = class1.getConstructor(StringBuffer.class);  
        //3.调用newInstance()方法创建类的对象。  
        String string = (String)constructor.newInstance(new StringBuffer("准备进黑马了"));  
        //结果
        System.out.println("字符串中的第三个字符:"+string.charAt(3));  
    }  
} 

6,Field

Field对象代表某个类中的一个成员变量

获得Fidld对象的方法

Field getField(String name) 返回一个 Field 对象,它反映此 Class对象所表示的类或接口的指定公共成员字段

Field[] getFields() 返回一个包含某些 Field 对象的数组,这些对象反映此 Class 对象所表示的类或接口的所有可访问公共字段

Field getDeclaredField(Stringname) 返回一个Field对象,用法和getField()方法一样,但它可以返回私有的成员变量

Field[] getDeclaredFields() 返回Class对象表示的类或接口的所有成员变量,公有私有都返回

暴力反射:

调用Field父类AccessibleObject中的方法:

void setAccessible(boolean flag) 传入true让私有的成员可以被反射

也就是使用setAccessible(true)使private类型的成员变量也可以被获取值

Filed中的方法

Object get(Object obj) 返回指定对象上此Field表示的字段的值

void set(Object obj, Objectvalue) 将指定对象变量上此 Field 对象表示的字段设置为指定的新值

7,Method

实例对象代表某个类中的某个方法

获取Method对象的方法

Method getMethod(String name , Class< ? > … prameterTypes)
name是方法名,prameterTypes是方法的参数的字节码

Method[] getMethods() 获取类中所有公有方法和父类中的方法的集合

Method[] getDeclaredMethods() 获本类中所有方法,不管是公有还是私有

通过Method类中的 方法

Object invoke(Object obj , Object… args)

对带有指定参数的指定对象调用由此 Method 对象表示的底层方法。

obj为使用这个方法的对象,args为要传入的参数

注意:

当invoke方法传入的第一个参数为null,说明这个方法是静态方法, 因为不需要对象来调用

/*  演示Method类中方法, Person类省略。  */  
public class MethodDemo {  
    public static void main(String[] args)throws Exception {  
        //创建Person类对象  
        Person person = new Person("赵六", 26);  
        //获取person对象的字节码,调用getMethod方法
        //由于toString方法不用传入参数,所以第二个参数为null  
        Method methodToString = person.getClass().getMethod("toString", null);  
        //使用invoke方法调用获取到的方法,person对象调用,不用传入参数  
        System.out.println(methodToString.invoke(person, null));  
    }  
}  

8,数组与Objcet的关系及其反射类型

具有相同维数和元素类型的数组属于同一个类型,即具有相同的Class实例对象

Class类中有一个方法Class< ? super T > getSuperclass() 返回这个方法的父类的字节码

通过数组的字节码调用此方法,得到的是Object的字节码。

数组的父类是Object,Array是Object的子类

注意:

基本类型的一维数组可以被当作Object类型使用,不能当作Object[]类型使用;非基本类型的一维数组,既可以当做Object类型使用,又可以当做Object[]类型使用

内容概要:本文系统阐述了企业新闻发稿在生成式引擎优化(GEO)时代下的全渠道策略与效果评估体系,涵盖当前企业传播面临的预算、资源、内容与效果评估四大挑战,并深入分析2025年新闻发稿行业五大趋势,包括AI驱动的智能化转型、精准化传播、首发内容价值提升、内容资产化及数据可视化。文章重点解析央媒、地方官媒、综合门户和自媒体四类媒体资源的特性、传播优势与发稿策略,提出基于内容适配性、时间节奏、话题设计的策略制定方法,并构建涵盖品牌价值、销售转化与GEO优化的多维评估框架。此外,结合“传声港”工具实操指南,提供AI智能投放、效果监测、自媒体管理与舆情应对的全流程解决方案,并针对科技、消费、B2B、区域品牌四大行业推出定制化发稿方案。; 适合人群:企业市场/公关负责人、品牌传播管理者、数字营销从业者及中小企业决策者,具备一定媒体传播经验并希望提升发稿效率与ROI的专业人士。; 使用场景及目标:①制定科学的新闻发稿策略,实现从“流量思维”向“价值思维”转型;②构建央媒定调、门户扩散、自媒体互动的立体化传播矩阵;③利用AI工具实现精准投放与GEO优化,提升品牌在AI搜索中的权威性与可见性;④通过数据驱动评估体系量化品牌影响力与销售转化效果。; 阅读建议:建议结合文中提供的实操清单、案例分析与工具指南进行系统学习,重点关注媒体适配性策略与GEO评估指标,在实际发稿中分阶段试点“AI+全渠道”组合策略,并定期复盘优化,以实现品牌传播的长期复利效应。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值