java的反射机制

4、获取类的Constructor

通过反射机制得到某个类的构造器,然后调用该构造器创建该类的一个实例

Class<T>类提供了几个方法获取类的构造器。

public Constructor<T> getConstructor(Class<?>... parameterTypes)

返回一个 Constructor 对象,它反映此 Class 对象所表示的类的指定公共构造方法

public Constructor<?>[] getConstructors()

返回一个包含某些 Constructor 对象的数组,这些对象反映此 Class 对象所表示的类的所有公共构造方法

public Constructor<T> getDeclaredConstructor(Class<?>... parameterTypes)

返回一个 Constructor 对象,该对象反映此 Class 对象所表示的类或接口的指定构造方法

public Constructor<?>[] getDeclaredConstructors()

返回 Constructor 对象的一个数组,这些对象反映此 Class 对象表示的类声明的所有构造方法。它们是公共、保护、默认(包)访问和私有构造方法

 

View Code?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

// 使用getConstructors获取构造器  

Constructor<?>[] constructors = classType.getConstructors();

for(Constructor<?> m : constructors)

{

    System.out.println(m);

}

              

System.out.println();

              

// 使用getDeclaredConstructors获取构造器   

constructors = classType.getDeclaredConstructors();

for(Constructor<?> m : constructors)

{

    System.out.println(m);

}

  

输出:

publiccom.quincy.ExtendType()

  

publiccom.quincy.ExtendType()

com.quincy.ExtendType(int,java.lang.String)

 

 

5、新建类的实例

通过反射机制创建新类的实例,有几种方法可以创建

调用无自变量ctor

1、调用类的Class对象的newInstance方法,该方法会调用对象的默认构造器,如果没有默认构造器,会调用失败.

Class<?> classType = ExtendType.class;

Object inst = classType.newInstance();

System.out.println(inst);

输出:

Type:Default Constructor

ExtendType:Default Constructor

com.quincy.ExtendType@d80be3

 

2、调用默认Constructor对象的newInstance方法

Class<?> classType = ExtendType.class;

Constructor<?> constructor1 = classType.getConstructor();

Object inst = constructor1.newInstance();

System.out.println(inst);

输出:

Type:Default Constructor

ExtendType:Default Constructor

com.quincy.ExtendType@1006d75

调用带参数ctor

3、调用带参数Constructor对象的newInstance方法

Constructor<?> constructor2 =

classType.getDeclaredConstructor(int.class, String.class);

Object inst = constructor2.newInstance(1, "123");

System.out.println(inst);

输出:

Type:Default Constructor

ExtendType:Constructor with parameters

com.quincy.ExtendType@15e83f9

 

6、调用类的函数

通过反射获取类Method对象,调用Field的Invoke方法调用函数。

View Code?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

Class<?> classType = ExtendType.class;

Object inst = classType.newInstance();

Method logMethod = classType.<STRONG>getDeclaredMethod</STRONG>("Log", String.class);

logMethod.invoke(inst,"test");

  

输出:

Type:Default Constructor

ExtendType:Default Constructor

<FONT color=#ff0000>Class com.quincy.ClassT can not access a member ofclasscom.quincy.ExtendType with modifiers"private"</FONT>

  

<FONT color=#ff0000>上面失败是由于没有权限调用private函数,这里需要设置Accessible为true;</FONT>

Class<?> classType = ExtendType.class;

Object inst = classType.newInstance();

Method logMethod = classType.getDeclaredMethod("Log", String.class);

<FONT color=#ff0000>logMethod.setAccessible(true);</FONT>

logMethod.invoke(inst,"test");

 

7、设置/获取类的属性值

通过反射获取类的Field对象,调用Field方法设置或获取值

View Code?

1

2

3

4

5

Class<?> classType = ExtendType.class;

Object inst = classType.newInstance();

Field intField = classType.getField("pubIntExtendField");

intField.<STRONG>setInt</STRONG>(inst,100);

    intvalue = intField.<STRONG>getInt</STRONG>(inst);

 

View Code?

1

  

 

 

 

本教程由尚硅谷教育大数据研究院出品,如需转载请注明来源。

资源下载链接为: https://pan.quark.cn/s/22ca96b7bd39 在当今的软件开发领域,自动化构建与发布是提升开发效率和项目质量的关键环节。Jenkins Pipeline作为一种强大的自动化工具,能够有效助力Java项目的快速构建、测试及部署。本文将详细介绍如何利用Jenkins Pipeline实现Java项目的自动化构建与发布。 Jenkins Pipeline简介 Jenkins Pipeline是运行在Jenkins上的一套工作流框架,它将原本分散在单个或多个节点上独立运行的任务串联起来,实现复杂流程的编排与可视化。它是Jenkins 2.X的核心特性之一,推动了Jenkins从持续集成(CI)向持续交付(CD)及DevOps的转变。 创建Pipeline项目 要使用Jenkins Pipeline自动化构建发布Java项目,首先需要创建Pipeline项目。具体步骤如下: 登录Jenkins,点击“新建项”,选择“Pipeline”。 输入项目名称和描述,点击“确定”。 在Pipeline脚本中定义项目字典、发版脚本和预发布脚本。 编写Pipeline脚本 Pipeline脚本是Jenkins Pipeline的核心,用于定义自动化构建和发布的流程。以下是一个简单的Pipeline脚本示例: 在上述脚本中,定义了四个阶段:Checkout、Build、Push package和Deploy/Rollback。每个阶段都可以根据实际需求进行配置和调整。 通过Jenkins Pipeline自动化构建发布Java项目,可以显著提升开发效率和项目质量。借助Pipeline,我们能够轻松实现自动化构建、测试和部署,从而提高项目的整体质量和可靠性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值