-
java反射机制面试_java反射机制面试题及答案整理,java反射面试题
2021-02-12 11:20:09java反射机制面试题:1、java反射机制的作用是什么?答案:在运行的时候构造任意一个类的对象;在运行的时候判断任意一个对象所属的类;在运行的时候任意调用一个对象的方法;在运行的时候判断任意一个类所具有的成员变量...大家对于java反射机制应该都是很了解的吧,那么下面要给大家分享的就是一组和java反射机制有关的java面试题,下面一起来看看java反射面试题都有哪些吧!
java反射机制面试题:
1、java反射机制的作用是什么?
答案:在运行的时候构造任意一个类的对象;在运行的时候判断任意一个对象所属的类;在运行的时候任意调用一个对象的方法;在运行的时候判断任意一个类所具有的成员变量以及方法。
2、反射机制的优点和缺点是什么?
3、反射机制是什么?
答案:反射是在运行状态当中,对于任意一个类,都可以知道这个类的所有属性和方法,对于任意一个对象,都可以调用它的任意一个方法和属性,这样的动态获取的信息以及动态调用对象的方法的功能被叫做java语言的反射机制。
4、哪里要用到反射机制?
答案:很多的框架都是需要用到反射机制的,例如hibernate、struts等等,都需要用到反射机制来实现。
5、java反射机制原理
6、怎样去使用使用java的反射?
答案:通过class对象获得一个属性对象,(1)Field
c=clz.getFields():获得某个类的所有的公共(public)的字段,包括父类中的字段;(2)Field
c=clz.getDeclaredFields():获得某个类的所有声明的字段,即包括public、private和proteced,但是不包括父类的申明字段
。
获取构造器对象,通过构造器new出一个对象,(1)Clazz.getConstructor([String.class]);(2)Con.newInstance([参数]);。
通过class对象获得一个方法对象,(1)Clazz.getMethod(“方法名”,class……parameaType);(只能获取公共的)(2)Clazz.getDeclareMethod(“方法名”);(获取任意修饰的方法,不能执行私有)(3)M.setAccessible(true);(让私有的方法可以执行)。
通过一个全限类名创建一个对象,(1)Class.forName(“全限类名”); 例如:com.mysql.jdbc.Driver
Driver类已经被加载到jvm当中,并且完成了类的初始化工作就成(2)类名.class; 获取Class clz
对象(3)对象.getClass();。
让方法执行,(1)Method.invoke(obj实例对象,obj可变参数);-----(是有返回值的)。
通过class对象创建一个实例对象(就相当与new类名()无参构造器)(1)Clazz.newInstance()。
具体体现:
通过.class// 第一种 获取到类对象
Class class1 = Person.class;
通过包名,调用class的forName方法Class class3 = Class.forName("day07.Person");
通过创建实例对象来获取类对象Person person = new Person();
Class class2 = person.getClass();
java反射机制面试题及答案就给大家整理这些内容了,你还想了解更多的java面试题吗?欢迎继续关注奇Q工具网来了解哦。
推荐阅读:
-
Java反射机制的大厂面试题
2020-04-15 00:53:39Java反射机制的大厂面试题 反射机制概念 Java 反射机制在程序运行时,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性。这种 动态的获取信息 以及 动态调用...Java反射机制的大厂面试题
反射机制概念
Java 反射机制在程序运行时,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性。这种 动态的获取信息 以及 动态调用对象的方法 的功能称为 java 的反射机制。
为什么引入反射概念
相信你看上面的概念,心中没有泛起任何的波澜,动态的获取信息、动态调用对象方法黑人问号。下面一段简单代码作为i出发点,从java虚拟机角度阐述
- 写下如下代码
public class Main{ public static int number = 1; public static void main(String args[]) { System.out.println("hello World"); } }
- 调用
javac Main.java
命令将Main.java
文件编译成Main.class
文件 - 之后执行
java Main
命令后,java虚拟机启动,进行类加载过程,方法区中存储类的静态存储结构,同时在内存中生成一个代表该类的java.lang.Class对象,作为方法区中该类的各种数据的访问入口
上述过程表明,编译阶段,就已经明确java虚拟机要加载的类(Main类),如果你的程序运行中,突然需要加载远程服务器的类(运行中加载),这时候反射机制就粉墨登场
有一个很经典的场景就是加载数据库驱动类,只有运行的时候通过参数,才能确定是加载
com.java.dbtest.myqlConnection
(mysql驱动类),还是加载com.java.dbtest.oracleConnection
此时只需要简单调用
Class.forName(com.java.dbtest.myqlConnection)
即可动态得完成加载类的过程。利用反射机制对类进行两次加载
import java.io.IOException; import java.io.InputStream; public class Main{ public static void main(String args[]) throws Exception{ //自定义类加载器 ClassLoader myLoader = new ClassLoader() { @Override public Class<?> loadClass(String name) throws ClassNotFoundException{ try{ String fileName = name.substring(name.lastIndexOf(".") + 1) + ".class"; InputStream is = getClass().getResourceAsStream(fileName); if(is == null) { return super.loadClass(name); } byte[] b = new byte[is.available()]; is.read(b); return defineClass(name, b, 0, b.length); }catch(IOException e) { throw new ClassNotFoundException(name); } } }; //使用反射机制加载并实例化 Object obj = myLoader.loadClass("Main").newInstance(); System.out.print(obj instanceof Main); } } //结果为false
由于开始阶段通过
双亲委派模型
,由系统应用程序类加载器已经加载过该类,运行阶段,使用自定义的类加载器,基于反射机制,又加载一遍类,分别由两个不同的类加载器,加载一遍,所以程序最后的结果是false. -
java中关于反射的面试题_总结Java反射面试题(附答案)
2021-03-08 05:48:55今天总结了java反射面试题10道,各位java程序员可以根据这篇java反射面试题,来回顾一下java反射的相关知识。1、java反射的作用是什么?答:反射机制是在运行时,对于任意一个类,都能够知道这个类的所有属性和方法...反射机制是程序在运行时能够获取自身的信息。在java中,只要给定类的名字,那么就可以通过反射机制来获得类的所有信息。今天总结了java反射面试题10道,各位java程序员可以根据这篇java反射面试题,来回顾一下java反射的相关知识。
1、java反射的作用是什么?
答:反射机制是在运行时,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意个对象,都能够调用它的任意一个方法。在java中,只要给定类的名字,就可以通过反射机制来获得类的所有信息。这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
2、Java反射创建对象效率高还是通过new创建对象的效率高?
答:通过new创建对象的效率比较高。通过反射时,先找查找类资源,使用类加载器创建,过程比较繁琐,所以效率较低。
3、除了使用new创建对象之外,还可以用什么方法创建对象?
答:使用Java反射可以创建对象。
4、反射的实现方式都有什么?
答:获取Class对象,有4种方法:(1)Class.forName(“类的路径”);(2)类名.class;(3)对象名.getClass();(4)基本类型的包装类,可以调用包装类的Type属性来获得该包装类的Class对象。
5、实现java反射的类有什么?
答:(1)Class:表示正在运行的Java应用程序中的类和接口,注意所有获取对象的信息都需要Class类来实现;
(2)Field:提供有关类和接口的属性信息,以及对它的动态访问权限;
(3)Constructor:提供关于类的单个构造方法的信息以及它的访问权限;
(4)Method:提供类或接口中某个方法的信息。
6、反射机制的优缺点:
答:优点(1)能够运行时动态获取类的实例,提高灵活性;(2)与动态编译结合Class.forName('com.mysql.jdbc.Driver.class');//加载MySQL的驱动类
缺点:使用反射性能较低,需要解析字节码,将内存中的对象进行解析。
其解决方案是:通过setAccessible(true)关闭JDK的安全检查来提升反射速度;多次创建一个类的实例时,有缓存会快很多;ReflflectASM工具类,通过字节码生成的方式加快反射速度。
7、Java反射API有几类?
答:反射 API 用来生成 JVM 中的类、接口或则对象的信息。
(1)Class 类:反射的核心类,可以获取类的属性,方法等信息。
(2)Field 类:Java.lang.reflec 包中的类,表示类的成员变量,可以用来获取和设置类之中的属性值。
(3)Method 类:Java.lang.reflec 包中的类,表示类的方法,它可以用来获取类中的方法信息或者执行方法。
(4)Constructor 类:Java.lang.reflec 包中的类,表示类的构造方法。
8、反射使用步骤(获取Class对象、调用对象方法)
答:(1)获取想要操作的类的Class对象,他是反射的核心,通过Class对象我们可以任意调用类的方法。
(2)调用 Class 类中的方法,既就是反射的使用阶段。
(3)使用反射 API 来操作这些信息。
9、Java反射机制的作用有什么?
答:作用有(1)在运行时判断任意一个对象所属的类;(2)在运行时构造任意一个类的对象;(3)在运行时判断任意一个类所具有的成员变量和方法;(4)在运行时调用任意一个对象的方法。
10、下面的代码哪些地方会产生编译错误?
class Outer {
class Inner {
}
public static void foo() {
new Inner();
}
public void bar() {
new Inner();
}
public static void main(String[] args) {
new Inner();
}
}
答:Java中非静态内部类对象的创建要依赖其外部类对象,上面的面试题中foo和main方法都是静态方法,静态方法中没有this,也就是说没有所谓的外部类对象,因此无法创建内部类对象,如果要在静态方法中创建内部类对象,可以这样做:
new Outer().new Inner();
在java编程中,用到反射的地方还是很多的,比如java框架就大量使用反射,还有在加载驱动和读取配置文件时,反射也是比不可少的。所以在java面试中,面试官会想要考察应聘者反射方面的知识,那么有面试需要的朋友,就必须提前做好准备,将能搜集到的java反射面试题整理到一起记住,另外,java零基础的小白也可以根据这篇java反射面试题来认识java反射。
-
一道有关反射机制的面试题
2018-12-21 20:21:53但是java语言中还有一个非常强大的特性:反射机制,本题就可以通过反射机制来修改age的值。 在运行状态中,对于任何一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法...有如下代码:
public class ReadOnlyClass { private Integer age=20; public Integer getAge() { return age; } }
现在给定一个ReadOnlyClass的对象roc,能否把这个对象的age值改成30?
***************************************************************************************************************************************************
题目分析:在本题中,age属性被修饰为private,而且这个类只提供了获取age的public的方法,而没有提供修改age的方法,因此这个类是一个只读的类,无法修改age的值。但是java语言中还有一个非常强大的特性:反射机制,本题就可以通过反射机制来修改age的值。
在运行状态中,对于任何一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取对象的信息以及动态调用对象的方法的功能称为java语言的反射机制。java反射机制容许程序在运行时加载、探知、使用编译期间完全未知的class。说白了,就是java可以加载一个运行时才得知名称的class,获得其完整结构。
在java语言中,任何一个类都可以得到对应的class实例,通过class实例就可以获取类或对象的所有信息,包括属性(Field对象)、方法(Method对象)或构造方法(Constructor对象)。对于本题而言,在获取到ReadOnlyClass类的实例后,就可以通过反射机制获取到age属性对应Field对象,然后可以通过这个对象来修饰age的值,实现代码如下:
package InterView; import java.lang.reflect.Field; class ReadOnlyClass { private Integer age=20; public Integer getAge() { return age; } } public class Test{ public static void main(String[] args) throws Exception { ReadOnlyClass pt=new ReadOnlyClass(); Class<?>class1=ReadOnlyClass.class; Field field=class1.getDeclaredField("age"); field.setAccessible(true); field.set(pt, 30); System.out.println(pt.getAge()); } }
-
java面试题--java反射机制
2017-08-26 00:00:58java面试题--java反射机制 -
Java反射常见面试题
2020-01-04 11:44:39Java反射常见面试题 什么是反射? 反射是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的... -
java面试题--反射机制
2018-11-14 17:31:05面试经典题型,很值得分享的。 我们面试经常会遇到的问题。 -
反射常见面试题
2019-11-08 10:10:41这种动态获取的信息以及动态调用对象的方法的功能称为 Java 语言的反射机制。 哪里用到反射机制? 1.JDBC中,利用反射动态加载了数据库驱动程序。 2.Web服务器中利用反射调用了Sevlet的服务方法。 3.Eclispe等开发... -
面试题① - java 反射机制
2020-06-11 12:06:541、反射机制的概念: 1.1、指在运行状态中 对于任意一个类,都能够知道这个类的所有属性和方法, 对于任意一个对象,都能调用它的任意一个方法. 这种动态获取信息,以及动态调用对象方法的功能叫java语言的反射机制... -
java面试题什么是反射机制?
2019-09-21 18:16:55什么是反射机制,反射机制是Java语言中一个非常重要的特性。它允许程序在运行时进行自我检查。他同时也允许对其内部的成员进行操作,虽然这个特性在实际开发时使用的不多。但是像C/C++等语言根本没有提供这样的特效... -
【面试题】什么是反射机制
2019-07-09 18:00:19反射机制是Java语言中一个非常重要的特性,它允许程序在运行时自我检查,同时也允许对其内部的成员进行操作。由于反射机制能够实现在运行时对类进行装载,因此能够增加程序的灵活性,但是不恰当地使用反射机制,也会... -
Java 反射相关面试题
2020-12-14 17:12:15JAVA 反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取类的信息以及动态调用对象的方法的功能称为 java 语言的反射... -
反射面试题
2018-07-11 19:51:00JavaSE——反射面试题 1.请描述一下类加载机制,然后说明一下什么是反射机制,以及反射的常见调用方式。 类加载机制:java源文件经过编译后产生一个字节码文件。Java虚拟机把描述类的数据加载到内存中,对数据进行... -
关于反射的面试题
2019-09-29 11:25:05Java反射机制主要提供了以下功能:在运行时构造一个类的对象;判断一个类所具有的成员变量和方法;调用一个对象的方法;生成动态代理。反射最大的应用就是框架 Java反射的主要功能: 确定一个对象的类 取出类的...