最新反射阶段学习及结合案例,Java岗面试必问

总结

面试建议是,一定要自信,敢于表达,面试的时候我们对知识的掌握有时候很难面面俱到,把自己的思路说出来,而不是直接告诉面试官自己不懂,这也是可以加分的。

以上就是蚂蚁技术四面和HR面试题目,以下最新总结的最全,范围包含最全MySQL、Spring、Redis、JVM等最全面试题和答案,仅用于参考

一份还热乎的蚂蚁金服面经(已拿Offer)面试流程4轮技术面+1轮HR

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

System.out.println(clazz2);

//3.利用对象的getClass方法来获取class对象

//getClass方法是定义在Object类中.

Student s = new Student();

Class clazz3 = s.getClass();

System.out.println(clazz3);

System.out.println(clazz == clazz2);//true

System.out.println(clazz2 == clazz3);//true

//字节码对象就一份,所以都为true

}

}

三、反射操作构造方法

============================================================================

获取构造方法后:可以进行创建对象

1、获取构造方法


//返回所有公共构造方法对象的数组

Constructor<?>[] getConstructors()Constructor<?>[]

//返回所有构造方法对象的数组

getDeclaredConstructors()

//返回单个公共构造方法对象Constructor

getConstructor(Class<?>…parameterTypes)

//返回单个构造方法对象

getDeclaredConstructor(Class<?>… parameterTypes)

2、通过构造方法创建对象


//根据指定的构造方法创建对象

T newInstance(Object…initargs)

//设置为true,表示取消访问检查,主要当通暴力反射获取属性名称对象时候,

//为该属性赋值之前需要取消权限

setAccessible(boolean flag)

示例代码:

package com.ligong.test;

import java.lang.reflect.Constructor;

public class ReflectTest1 {

/*

需求: 通过反射技术, 创建Student类的对象, 通过带参构造方法创建

*/

public static void main(String[] args) throws Exception {

// 1. 获取Student类的字节码对象

Class clazz = Class.forName(“com.itheima.domain.Student”);

// 2. 获取内部构造方法对象(带参构造方法)

Constructor con = clazz.getConstructor(String.class, int.class);

// 3. 根据构造方法对象, 创建实例(Student对象)

Object o = con.newInstance(“张三”, 23);

System.out.println(o);

}

}

四、反射操作成员变量

============================================================================

成员变量可以进行赋值/获取操作

1、获取成员变量


返回所有公共成员变量对象的数组

Field[] getFields()

返回所有成员变量对象的数组

getDeclaredFields()

返回单个公共成员变量对象

Field getField(String name)

返回单个成员变量对象

Field getDeclaredField(String name)

2、通过属性名称对象调用以下方法


// 第一个参数,是要在哪个对象中设置,第二给该属性对象实参

void set(Object obj, Object value)赋值

Object get(Object obj)获取值

暴力反射
  • 暴力反射需要调用 setAccessible , 权限设置为 true, 才可以操作

  • 不建议的使用方式

五、反射操作成员方法

============================================================================

1、获取成员方法


//返回所有公共成员方法对象的数组,包括继承的

Method[] getMethods()

//返回所有成员方法对象的数组,不包括继承的

Method[] getDeclaredMethods()

//返回单个公共成员方法对象

Method getMethod(String name, Class<?>… parameterTypes)

//返回单个成员方法对象

Method getDeclaredMethod(String name, Class<?>…parameterTypes)

2、运行方法:方法对象调用


Object invoke(Object obj, Object… args)运行方法

_**参数一: 用obj对象调用该方法

参数二: 调用方法的传递的参数(如果没有就不写)

返回值: 方法的返回值(如果没有就不写)**_

3、案例:


_**需求 : 请向一个泛型为 Integer 的集合, 添加一个 String 字符串

思路 : Java 中的泛型是假的, 只在编译的时候有效**_

package com.ligong.test;

import java.lang.reflect.Method;

import java.util.ArrayList;

public class ReflectTest4 {

/*

需求: 请向一个泛型为 Integer 的集合, 添加一个 String 字符串

普及: Java中的泛型是假的, 只在编译期间有效, 运行的时候, 就没有泛型了.

运行的时候: 肯定过了编译阶段, 肯定有字节码对象.

结论 : Java中的泛型, 到运行期间, 就会被擦除掉.

*/

public static void main(String[] args) throws Exception {

ArrayList list = new ArrayList<>();

Class listClass = list.getClass();

// 集合中, add方法的, 成员方法对象

Method addMethod = listClass.getMethod(“add”, Object.class);

// 调用成员方法

addMethod.invoke(list, “abc”);

System.out.println(list);

}

}

六、反射使用场景:

===========================================================================

_**1、制作框架

2、什么是框架?,通过框架可以快速开发**_

案例:


_**需求:

设计一个定时器框架, 用户只需要传入配置文件位置, 就可以开启定时任务。**_

任务一类

public class MondayTask implements Runnable {

@Override

public void run() {

System.out.println(“星期一, 加油! 在学习java o(╥﹏╥)o”);

}

}

任务二类

public class TuesdayTask implements Runnable{

@Override

public void run() {

System.out.println(“星期二, 学习计算机网络~~”);

}

}

任务三类

最后

2020年在匆匆忙忙慌慌乱乱中就这么度过了,我们迎来了新一年,互联网的发展如此之快,技术日新月异,更新迭代成为了这个时代的代名词,坚持下来的技术体系会越来越健壮,JVM作为如今是跳槽大厂必备的技能,如果你还没掌握,更别提之后更新的新技术了。

更多JVM面试整理:

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

任务三类_

最后

2020年在匆匆忙忙慌慌乱乱中就这么度过了,我们迎来了新一年,互联网的发展如此之快,技术日新月异,更新迭代成为了这个时代的代名词,坚持下来的技术体系会越来越健壮,JVM作为如今是跳槽大厂必备的技能,如果你还没掌握,更别提之后更新的新技术了。

[外链图片转存中…(img-C9QX8WzD-1715664865774)]

更多JVM面试整理:

[外链图片转存中…(img-OufZv2re-1715664865774)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

  • 16
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值