首页 > 试题广场 >

Java是一门支持反射的语言,基于反射为Java提供了丰富的

[不定项选择题]
Java是一门支持反射的语言,基于反射为Java提供了丰富的动态性支持,下面关于Java反射的描述,哪些是错误的:(    )
  • Java反射主要涉及的类如Class, Method, Filed,等,他们都在java.lang.reflet包下
  • 通过反射可以动态的实现一个接口,形成一个新的类,并可以用这个类创建对象,调用对象方法
  • 通过反射,可以突破Java语言提供的对象成员、类成员的保护机制,访问一般方式不能访问的成员
  • Java反射机制提供了字节码修改的技术,可以动态的修剪一个类
  • Java的反射机制会给内存带来额外的开销。例如对永生堆的要求比不通过反射要求的更多
  • Java反射机制一般会带来效率问题,效率问题主要发生在查找类的方法和字段对象,因此通过缓存需要反射类的字段和方法就能达到与之间调用类的方法和访问类的字段一样的效率
A Class类在java.lang包
B 动态代理技术可以动态创建一个代理对象,反射不行
C 反射访问私有成员时,Field调用setAccessible可解除访问符限制
D CGLIB实现了字节码修改,反射不行
E 反射会动态创建额外的对象,比如每个成员方法只有一个Method对象作为root,他不胡直接暴露给用户。调用时会返回一个Method的包装类
F 反射带来的效率问题主要是动态解析类,JVM没法对反射代码优化。
发表于 2020-04-20 08:44:16 回复(10)
A选项Class类位于lang包下面,D选项反射的本质就是从字节码中查找,动态获取类的整容结构,包括属性,构造器,动态调用对象的方法,而不是修剪类,F选项我觉得应该是,使用了反射的效率都会降低,就算加了缓存
发表于 2019-09-20 09:49:04 回复(5)
ABCD可以找到相关资料,说下F错在最后五个字:使用cache和禁止安全检查等都可以提升反射的效率,但即使再怎么优化也不可能达到和直接调用类一样的效率,因为无论是通过字符串获取Class、Method还是Field,都需要JVM的动态链接机制动态的进行解析和匹配(即告诉JVM该如何去找这个类),而直接调用则不必。
编辑于 2020-09-22 23:28:13 回复(1)
程序编译时,会生成一个字节码文件,后缀为.class,当我们new一个对象时,jvm会从本地加载相应的.class文件在内存中,同时产生一个Class对象,这个Class对象无论new 多少个本地对象,都只会生成一个,这个Class对象所属的位置为java.lang,排除A。反射时,运用的是内存中生成的Class对象,然后反推到字节码文件中,再获取相应对象的方法或者属性,但是并不会动态修剪字节码文件。关于F的效率问题,主要是寻找对应的字节码文件所需的时间。如有错请斧正。
发表于 2020-05-22 18:27:58 回复(1)
不是很懂,求大神解答。
查了一下API文档,
类Class在java.lang包下,
类Method、Filed在java.lang.reflet包下。
发表于 2019-09-08 11:49:39 回复(1)
成功的看错题,看成了选正确的,然后选了BCE
发表于 2019-10-12 11:54:30 回复(5)
Java的反射(reflection)机制是指在程序的运行状态中,可以构造任意一个类的对象,可以了解任意一个对象所属的类,可以了解任意一个类的成员变量和方法,可以调用任意一个对象的属性和方法。
这种动态获取程序信息以及动态调用对象的功能称为Java语言的反射机制。
反射被视为动态语言的关键。
发表于 2020-05-01 09:42:41 回复(0)
java.lang.reflect
发表于 2019-09-05 19:00:16 回复(0)
A Class类在java.lang包 B 动态代理技术可以动态创建一个代理对象,反射不行 C 反射访问私有成员时,Field调用setAccessible可解除访问符限制 D CGLIB实现了字节码修改,反射不行 E 反射会动态创建额外的对象,比如每个成员方法只有一个Method对象作为root,他不胡直接暴露给用户。调用时会返回一个Method的包装类 F 反射带来的效率问题主要是动态解析类,JVM没法对反射代码优化。
发表于 2021-10-15 19:20:31 回复(0)
解释一下最后一项,由于采用反射机制的Java程序要经过字节码解析过程,将内存中的对象进行解析,包括了一些动态类型,而JVM无法对这些代码进行优化,因此,反射操作的效率要比那些非反射操作低得多。
发表于 2020-09-14 12:12:58 回复(1)
wtf,车速太快。。。
发表于 2021-12-06 19:37:05 回复(0)
反射带来的效率问题主要是动态解析类,JVM没法对反射代码优化。
发表于 2021-09-22 00:12:41 回复(0)
A Class类在java.lang包
B 动态代理技术可以动态创建一个代理对象,反射不行
C 反射访问私有成员时,Field调用setAccessible可解除访问符限制
D CGLIB实现了字节码修改,反射不行
E 反射会动态创建额外的对象,比如每个成员方法只有一个Method对象作为root,他不胡直接暴露给用户。调用时会返回一个Method的包装类
F 反射带来的效率问题主要是动态解析类,JVM没法对反射代码优化。
发表于 2021-09-09 11:28:48 回复(0)
这些知识点都是从哪看的啊?我怎么啥都看不懂
发表于 2021-01-20 21:20:21 回复(0)

不是选错误的这给的答案是对的呀


发表于 2020-02-10 17:13:40 回复(0)
完美的避过了答案,选了BE
发表于 2019-12-29 18:11:40 回复(0)
我还能说什么
编辑于 2024-01-12 11:38:12 回复(0)
E:永生堆也就是永久代,永久代里包含类的信息,类方法的信息,常量信息,class对象,jvm创建的内部对象,也就是指反射要获取的信息就在永久代,反射自然就给永久代带来负担了
发表于 2023-03-16 15:46:05 回复(0)
mmp,我看成选正确的了

发表于 2022-05-25 10:41:10 回复(0)
我觉得F选项错的原因是:反射机制效率问题主要发生在查找类文件,而不是查找类的方法和字段对象,因为一旦类文件找到了,类的方法和字段对象查找起来就快多了。
发表于 2022-04-23 14:02:51 回复(0)