反射阶段学习及结合案例,java高级面试题及答案 spring

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip1024b (备注Java)
img

正文

问题2:成员都包括什么?


包括成员变量、构造方法、成员方法(包含从父类继承的方法)

问题3:应用场景?


java框架底层原理

二、字节码对象的3种获取方式

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

1、类名.class属性


***.class是所有对象中的静态属性,作为锁对象使用比较多

每个对象都有对象锁,如果类中有方法是静态的且需要进行Synchronized修饰,那么该方法的锁对象就是该类的字节码文件***

2 、对象名.getClass()方法


对象创建好的情况下使用

3、Class.forName(参数:全名称限定类名)方法


public class Student {

private String name;

private int age;

public Student() {

}

public Student(String name, int age) {

this.name = name;

this.age = age;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

public void study(){

System.out.println(“学生在学习”);

}

@Override

public String toString() {

return “Student{” +

“name='” + name + ‘’’ +

“, age=” + age +

‘}’;

}

}

public class ReflectDemo1 {

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

//1.Class类中的静态方法forName(“全类名”)

//全类名:包名 + 类名

Class clazz = Class.forName(“com.liogng.myreflect.Student”);

System.out.println(clazz);

//2.通过class属性来获取

Class clazz2 = Student.class;

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对象调用该方法

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

最后

由于篇幅有限,这里就不一一罗列了,20道常见面试题(含答案)+21条MySQL性能调优经验小编已整理成Word文档或PDF文档

MySQL全家桶笔记

还有更多面试复习笔记分享如下

Java架构专题面试复习

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注Java)
img

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

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

最后

由于篇幅有限,这里就不一一罗列了,20道常见面试题(含答案)+21条MySQL性能调优经验小编已整理成Word文档或PDF文档

[外链图片转存中…(img-dUqemmwC-1713689225710)]

还有更多面试复习笔记分享如下

[外链图片转存中…(img-NTdWTdC9-1713689225710)]

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注Java)
[外链图片转存中…(img-pqCUg60f-1713689225711)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值