首页 > 其他分享 >1.6-反射

1.6-反射

时间:2023-07-18 21:22:51浏览次数:25  
标签:返回 反射 1.6 getClass Parent Son son class

看这个网站

Q: 调用类对象.class 和 forName(类名)的区别?

Class<A> classA = A.class;
Class<A> classA = Class.forName("A");
A: 仅使用.class不能进行第一次静态初始化, forname函数则可以

例如B是A的基类,下面这段代码如何?
假设有父子2个类,如下:

static class Parent { }
static class Son extends Parent{}


Q: 用instanceof 可以和父类比较吗,且会返回true吗?

        Son son = new Son();
        if (son instanceof  Parent) {
            System.out.println("a instanof B");
        }
A: 可以比较,且返回true。


Q: 用getClass并用== 可以和父类比较吗,且会返回true吗,下面这样:
注意A是B的子类。       

Son son = new Son();
        if (son.getClass() == Parent.class){
            System.out.println("son class == Parent.class");
        }
A: 不可以,编译就会报错了。和Class<泛型>的 ==号比较有关。
image.png
因为getClass返回的是<? extends Son>, .class返回的是Class<Parent>


Q: 用getClass并用.equals可以和父类比较吗,且会返回true吗,下面这样:

Son son = new Son();
        if (son.getClass().equals(Parent.class)){
            System.out.println("son class.equals(Parent.class)");
        }
A: 可以比较,正常编译, 但是会返回false,即不相等!


Q: getDeclaredXXX 有哪几种?
A: 5种:注解Annotation
内部类Classed
构造方法Construcotor
字段Field
方法Method

Q:getMethods()返回哪些方法, getDeclaredMethods()会返回哪些方法?

A:
getMethods()返回 本类、父类、父接口 的public方法
getDeclaredMethods()只 返回本类的 所有 方法

其他getXXX和getDeclaredXXX的区别同理。

 

拿到Filed、Method、Constructor之后咋用

Method可以invoke(object, args)
Constructor可以newInstance(Object…)来做构造调用。
Filed可以用get(object)、set(object)来设置属性值。

 

Q: 反射拿到Method对象后, 该对象.getModifiers() 是干嘛的?
A: 返回该方法的修饰符,并且是1个整数。

 

标签:返回,反射,1.6,getClass,Parent,Son,son,class
From: https://www.cnblogs.com/yuanbaobao/p/17564173.html

相关文章

  • 反射 hasattr 判断属性是否存在和getattr 赋值给f,f()
    #反射classWebsite:defregister(self):print("欢迎进入注册页面")deflogin(self):print("欢迎进入登录界面")defhome(self):print("欢迎进入主页")defabout(self):print("关于我们")#将类做实例化......
  • 反射与动态导入
    1.创建如下结构目录以及python文件 2.现在在app.py就可以import 通过字符串导入模块 通过字符串导入模块,再通过getattr拿到成员 通过注册的底层源码分析 最后返回的就是(app里的url,None,None) 最终形态 ......
  • 对 Golang 中 reflect 反射包的示例
    引子//由于反射是基于类型系统(typesystem)的,所以先简单了解下类型系统typeMyIntintREADMEvariintvarjMyInt//上面的i是int类型,j是MyInt类型,i和j是不同的静态类型,尽管他们都有相同的相关类型(这里是int)//它们不能互相赋值,除非通过强制的类型转换......
  • 反射
    反射反射机制:将类的各个组成部分封装为其他对象。Java的类经过javac编译,生成class文件,在class文件中,一个类分为成员变量、构造方法、成员方法三类,再经过类加载器加载进内存,到内存中为class类对象,class类对象中成员变量为FieldField[]、构造方法为Constructor[]]、成员方法为M......
  • 解决支持vscode 1.62 的python插件版本的具体操作步骤
    如何实现支持VSCode1.62的Python插件版本作为一名经验丰富的开发者,我将指导你如何实现支持VSCode1.62的Python插件版本。下面是实现这个目标的步骤:步骤操作1安装VSCode最新版本2创建一个Python插件3更新插件依赖和Python版本4更新插件功能以适应VSCode1......
  • .NET通过反射实现依赖注入
    设计通过反射实现依赖注入classProgram{//获取到当前程序的程序集,并且获取元数据信息publicstaticAssemblyassembly=Assembly.GetCallingAssembly();staticvoidMain(string[]args){vartypes=assembly.G......
  • 通过反射访问类中的成员
    1、访问属性a.根据属性名获取Field对象Fieldf=clazz对象.getDeclaredField(属性名);b.暴破:f.setAccessible(true);//f是Fieldc.访问f.set(o,值);//o表示对象d.注意:如果是静态属性,则set和get中的参数o,可以写成null。packagecom.test;classStudent{publicintage;......
  • 反射操作泛型
    1、Java采用泛型擦除的机制来引入泛型。Java中的泛型仅仅是给编译器javac使用的,确保数据的安全性和免去强制类型转换的麻烦。但是,一旦编译完成,所有的和泛型有关的类型将全部擦除。2、为了通过反射操作这些类型以迎合实际开发的需要,Java新增ParameterizedType,GenericArrayType、Type......
  • java通过注解和反射优雅的实现数据脱敏
     数据脱敏是对分为数据库数据脱敏与接口脱敏。其中数据库入库数据脱敏方式我们一般采用对称加密来实现数据脱敏,接口脱敏我们一般用遮罩方式实现数据脱敏比如用“*”占位。本文章主要介绍接口脱敏方式。 1.定义一个自定义注解类importjava.lang.annotation.*;@Target(Elem......
  • 1.6.07 有趣的跳跃
    1.题目描述一个长度为n(n>0)的序列中存在“有趣的跳跃”当前仅当相邻元素的差的绝对值经过排序后正好是从1到(n-1)。例如,1423存在“有趣的跳跃”,因为差的绝对值分别为3,2,1。当然,任何只包含单个元素的序列一定存在“有趣的跳跃”。你需要写一个程序判定给定序列是否存在“有趣......