Java的第十六章:反射与注解

		i=Integer.valueOf(strings[0]);
	if(1<strings.length)
		i2=Integer.valueOf(strings[1]);
	if(2<strings.length)
		i3=Integer.valueOf(strings[2]);
}
public void print() {
	System.out.println("s="+s);
	System.out.println("i="+i);
	System.out.println("i2="+i2);
	System.out.println("i3="+i3);
}

}



import java.lang.reflect.Constructor;
import java.lang.reflect.Executable;

import com.mr.Demo1;
public class Demo {
public static void main(String[] args) {
Demo1 d1=new Demo1(“10”,“20”,“30”);
Class<?extends Demo1>Demo1Class=d1.getClass(); Constructor[] declaredConstructors=Demo1Class.getDeclaredConstructors(); for(int i=0;i


运行结果:


![](https://img-blog.csdnimg.cn/c2f3a3d4a408446299cef1879c2d7a69.png)


#### 访问成员变量


        在通过下列一组方法去访问成员变量时,将返回 Field 类型的对象或数组。


![](https://img-blog.csdnimg.cn/72319dfe36754d06a500d3719746292c.jpeg)


代码案例如下:



package com.mr;
public class Demo1 {
int i;
public float f;
protected boolean b;
private String s;
}



import java.lang.reflect.Field;
import com.mr.Demo1;

public class Demo {
public static void main(String[] args) {
Demo1 example=new Demo1();
Class exampleC=example.getClass();
Field[]declaredFields=exampleC.getDeclaredFields();//获取所有成员变量
for(int i=0;i<declaredFields.length;i++) {//遍历成员变量
Field field=declaredFields[i];
System.out.println(“名称为:”+field.getName());
Class fieldType=field.getType();
System.out.println(“类型为:”+fieldType);
boolean isTurn=true;
while(isTurn) {
//如果该成员变量的访问权限为private或protect,则抛出异常,即不允许访问
try {
isTurn=false;
//获取成员变量值
System.out.println(“修改前的值为:”+field.get(example));
if(fieldType.equals(int.class)) {//判断成员变量的类型是否为int型
System.out.println(“利用方法setInt()修改成员变量的值”);
field.setInt(example,168);//为int型成员变量赋值
}else if(fieldType.equals(float.class)) {//判断成员变量的类型是否为float型
System.out.println(“利用方法setFloat()修改成员变量的值”);
field.setFloat(example,99.9F);//为float型成员变量赋值
}else if(fieldType.equals(boolean.class)){//判断成员变量的类型是否为boolean型
System.out.println(“利用方法setBoolean()修改成员变量的值”);
field.setBoolean(example,true);//为boolean型成员变量赋值
}else{
System.out.println(“利用方法set()修改成员变量的值”);
field.set(example,“MWQ”);//为不同类型的成员变量赋值
}
//获取成员变量值
System.out.println(“修改后的值:”+field.get(example));
}catch(Exception e) {
System.out.println(“在设置成员变量值时抛出异常,”+“下面执行setAccessible()方法”);
field.setAccessible(true);//设置为允许访问
isTurn=true;
}
}
System.out.println();
}
}
}


运行结果:


![](https://img-blog.csdnimg.cn/72bda2923ceb48b79e817d754bfa6e38.png)


#### 访问成员方法


        在通过下列一组方法访问成员方法时,将返回 Method 类型的对象或数组。


![](https://img-blog.csdnimg.cn/b912b44bde144ce9850d732c8519840b.jpeg)


## Annotation 注解功能


        Java提供了 Annotation 注解功能 ,该功能可用于类、构造方法、成员变量、成员方法、参数等的声明中。该功能不影响程序的运行,但是会对编译器警告等辅助工具产生影响。


#### 定义 Annotation 类型


        在定义  Annotation 类型时,也需要用到用来定义接口的 interface 关键字,但需要在 interface字前加一个 “@” 符合,即定义 Annotation 类型的关键字为 @interface,这个关键字的隐含意思是继承了 java.lang.annotation.Annotation 接口。


![](https://img-blog.csdnimg.cn/cffe7fde10464bd8a2e1a53fc4fead22.png)


 ![](https://img-blog.csdnimg.cn/d5d81718ab154b5f9c9aa36bd15d963b.jpeg)


![](https://img-blog.csdnimg.cn/f83123c2e75e4d38bc99a99b603eab4f.jpeg)




# 最后我们该如何学习?

**1、看视频进行系统学习**

这几年的Crud经历,让我明白自己真的算是菜鸡中的战斗机,也正因为Crud,导致自己技术比较零散,也不够深入不够系统,所以重新进行学习是很有必要的。我差的是系统知识,差的结构框架和思路,所以通过视频来学习,效果更好,也更全面。关于视频学习,个人可以推荐去B站进行学习,B站上有很多学习视频,唯一的缺点就是免费的容易过时。

另外,我自己也珍藏了好几套视频资料躺在网盘里,有需要的我也可以分享给你:

![1年半经验,2本学历,Curd背景,竟给30K,我的美团Offer终于来了](https://img-blog.csdnimg.cn/img_convert/e72d0b5b94239917101cb72feae9783a.webp?x-oss-process=image/format,png)

**2、读源码,看实战笔记,学习大神思路**

“编程语言是程序员的表达的方式,而架构是程序员对世界的认知”。所以,程序员要想快速认知并学习架构,读源码是必不可少的。阅读源码,是解决问题 + 理解事物,更重要的:看到源码背后的想法;程序员说:读万行源码,行万种实践。

Spring源码深度解析:

![1年半经验,2本学历,Curd背景,竟给30K,我的美团Offer终于来了](https://img-blog.csdnimg.cn/img_convert/cd00c35bd32fcba9fcfe52a7194dc139.webp?x-oss-process=image/format,png)

Mybatis 3源码深度解析:

![1年半经验,2本学历,Curd背景,竟给30K,我的美团Offer终于来了](https://img-blog.csdnimg.cn/img_convert/d408c3c75b2ace534fb99e905fd7821d.webp?x-oss-process=image/format,png)

Redis学习笔记:

![1年半经验,2本学历,Curd背景,竟给30K,我的美团Offer终于来了](https://img-blog.csdnimg.cn/img_convert/657e612f2ba29f086d0318aa56f33427.webp?x-oss-process=image/format,png)

Spring Boot核心技术-笔记:

![1年半经验,2本学历,Curd背景,竟给30K,我的美团Offer终于来了](https://img-blog.csdnimg.cn/img_convert/3b143e8c1ccc3e9b7763fdef1517e867.webp?x-oss-process=image/format,png)

**3、面试前夕,刷题冲刺**

面试的前一周时间内,就可以开始刷题冲刺了。请记住,刷题的时候,技术的优先,算法的看些基本的,比如排序等即可,而智力题,除非是校招,否则一般不怎么会问。

关于面试刷题,我个人也准备了一套系统的面试题,帮助你举一反三:

![1年半经验,2本学历,Curd背景,竟给30K,我的美团Offer终于来了](https://img-blog.csdnimg.cn/img_convert/5d77e8a64fec187578018b1e5920d757.webp?x-oss-process=image/format,png)

只有技术过硬,在哪儿都不愁就业,“万般带不去,唯有业随身”学习本来就不是在课堂那几年说了算,而是在人生的旅途中不间断的事情。

人生短暂,别稀里糊涂的活一辈子,不要将就。


刷题的时候,技术的优先,算法的看些基本的,比如排序等即可,而智力题,除非是校招,否则一般不怎么会问。

关于面试刷题,我个人也准备了一套系统的面试题,帮助你举一反三:

[外链图片转存中...(img-nQeSQEI8-1714380922435)]

只有技术过硬,在哪儿都不愁就业,“万般带不去,唯有业随身”学习本来就不是在课堂那几年说了算,而是在人生的旅途中不间断的事情。

人生短暂,别稀里糊涂的活一辈子,不要将就。


> **本文已被[CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】](https://bbs.csdn.net/topics/618154847)收录**
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值