精华内容
下载资源
问答
  • 今天总结了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反射。

    展开全文
  • 今天晚上做了一道关于反射的面试题,题目给出了上下文让我实现一个方法来对已经初始化了的对象的父类私有变量来进行重新赋值,结果API背错了导致没在编辑器上正确的写出来代码,关于反射的应用还是比较生疏,应当...

    今天晚上做了一道关于反射的面试题,题目给出了上下文让我实现一个方法来对已经初始化了的对象的父类私有变量来进行重新赋值,结果API背错了导致没在编辑器上正确的写出来代码,关于反射的应用还是比较生疏,应当加强。不过题目于我来讲还算有趣。
    题干如下:

    class Animal {
        private int legNum;
        private String foodKind;
        public Animal() {
    
        }
        public void Animal(int leg,String food){
            legNum=leg;
            foodKind=food;
        }
        public void display(){
            System.out.print("腿数:"+this.legNum+" 吃:"+this.foodKind);
        }
    }
    
    class Elephant extends Animal{
        private int weight;
        private int lifeSpan;
        private String animal;
        //No.1
        //开始写代码,构造Elephant类继承Animal类,
        public Elephant(String animal) {
            this.animal=animal;
        }
        public void Elephant 
    
    
    
    
         //end
        }
    
    
    
    
    
    
        //end_code
        public void display(){
            System.out.print(animal+"的");
            super.display();
            System.out.println(" 体重:"+this.weight+" 寿命:"+this.lifeSpan);
        }
    
    }
    
     class ExtendTest {
        public static void main(String[] args){
            Elephant elephant=new Elephant("大象");
            elephant.Elephant(4,"香蕉",2000,20);
            elephant.display();
        }
    }

    题干如上所示,要求补全Elephant方法来对下文中的ExtendTest类的main()方法做出合理的解释。因为“Elephant elephant=new Elephant(“大象”);”对象已经被构造出来了,所以很容易的就想出了反射求解,可是因为用习惯了IDE导致API被错,所以光荣的gg了,以下是正确的解决方法。

      public void Elephant(int legNum,String foodKind,int weight,int lifeSpan){
            this.weight=weight;
            this.lifeSpan=lifeSpan;
            //拿到父类的Class对象
            Class<?> clazz=this.getClass().getSuperclass();
            try{
            //找到父类的“legNum”和“foodKind”属性
                Field field=clazz.getDeclaredField("legNum");
                Field field1=clazz.getDeclaredField("foodKind");
                //让属性可以被访问
                field.setAccessible(true);
                field1.setAccessible(true);
                //给属性设置新的值
                field.set(this,legNum);
                field1.set(this,foodKind);
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            } catch (NoSuchFieldException e) {
                e.printStackTrace();
            }
        }

    唉 好想找个实习啊。。。

    展开全文
  • 关于反射的面试题

    2019-09-29 11:25:05
    说说反射的用途及实现 Java反射机制主要提供了以下功能:在运行时构造一个类的对象;判断一个类所具有的成员变量和方法;调用一个对象的方法;生成动态代理。反射最大的应用就是框架 Java反射的主要功能: 确定...
    说说反射的用途及实现
    Java反射机制主要提供了以下功能:在运行时构造一个类的对象;判断一个类所具有的成员变量和方法;调用一个对象的方法;生成动态代理。反射最大的应用就是框架
    Java反射的主要功能:
    • 确定一个对象的类
    • 取出类的modifiers,数据成员,方法,构造器,和超类.
    • 找出某个接口里定义的常量和方法说明.
    • 创建一个类实例,这个实例在运行时刻才有名字(运行时间才生成的对象).
    • 取得和设定对象数据成员的值,如果数据成员名是运行时刻确定的也能做到.
    • 在运行时刻调用动态对象的方法.
    • 创建数组,数组大小和类型在运行时刻才确定,也能更改数组成员的值.
    反射的应用很多,很多框架都有用到
    spring 的 ioc/di 也是反射….
    javaBean和jsp之间调用也是反射….
    struts的 FormBean 和页面之间…也是通过反射调用….
    JDBC 的 classForName()也是反射…..
    hibernate的 find(Class clazz) 也是反射….
    反射还有一个不得不说的问题,就是性能问题,大量使用反射系统性能大打折扣。怎么使用使你的系统达到最优就看你系统架构和综合使用问题啦,这里就不多说了。

    转载于:https://www.cnblogs.com/kkdn/p/9039658.html

    展开全文
  • 关于Java反射的面试题

    千次阅读 2015-04-22 21:47:40
    问题:&操作符和&&操作符有什么区别?... 答案:当一个&表达式在求值时候,两个操作数都会被求值,&&更像是一个操作符快捷方式。当一个&&表达式求值时候,先计算第一个操作数,如果它返回true才会计算第二个操

    关于Java反射的面试题


     

    问题:&操作符和&&操作符有什么区别?

      答案:当一个&表达式在求值的时候,两个操作数都会被求值,&&更像是一个操作符的快捷方式。当一个&&表达式求值的时候,先计算第一个操作数,如果它返回true才会计算第二个操作数。如果第一个操作数取值为fale,第二个操作数就不会被求值。

      问题:Java是如何处理整型的溢出和下溢的?

      答案:Java根据类型的大小,将计算结果中的对应低阶字节存储到对应的值里面。

      问题:public static void写成static public void会怎样?

      答案:程序正常编译及运行。

      问题,声明变量和定义变量有什么不同?

      答案:声明变量我们只提供变量的类型和名字,并没有进行初始化。定义包括声明和初始化两个阶段String s;只是变量声明,String s = new String("bob"); 或者String s = "bob";是变量定义。

      问题:Java支持哪种参数传递类型?

      答案:Java参数都是进行传值。对于对象而言,传递的值是对象的引用,也就是说原始引用和参数引用的那个拷贝,都是指向同一个对象。

      问题:对象封装的原则是什么?

      答案:封装是将数据及操作数据的代码绑定到一个独立的单元。这样保障了数据的安全,防止外部代码的错误使用。对象允许程序和数据进行封装,以减少潜在的干涉。对封装的另一个理解是作为数据及代码的保护层,防止保护层外代码的随意访问。

      问题:你怎么理解变量?

      答案:变量是一块命名的内存区域,以便程序进行访问。变量用来存储数据,随着程序的执行,存储的数据也可能跟着改变。

      问题:数值提升是什么?

      答案:数值提升是指数据从一个较小的数据类型转换成为一个更大的数据类型,以便进行整型或者浮点型运算。在数值提升的过程中,byte,char,short值会被转化成int类型。需要的时候int类型也可能被提升成long。long和float则有可能会被转换成double类型。

      问题:Java的类型转化是什么?

      答案:从一个数据类型转换成另一个数据类型叫做类型转换。Java有两种类型转换的方式,一个是显式的类型转换,一个是隐式的。

      问题:main方法的参数里面,字符串数组的第一个参数是什么?

      答案:数组是空的,没有任何元素。不像C或者C++,第一个元素默认是程序名。如果命令行没有提供任何参数的话,main方法中的String数组为空,但不是null。

      问题:怎么判断数组是null还是为空?

      答案:输出array.length的值,如果是0,说明数组为空。如果是null的话,会抛出空指针异常。

      问题:程序中可以允许多个类同时拥有都有main方法吗?

      答案:可以。当程序运行的时候,我们会指定运行的类名。JVM只会在你指定的类中查找main方法。因此多个类拥有main方法并不存在命名冲突的问题。

      问题:静态变量在什么时候加载?编译期还是运行期?静态代码块加载的时机呢?

      答案:当类加载器将类加载到JVM中的时候就会创建静态变量,这跟对象是否创建无关。静态变量加载的时候就会分配内存空间。静态代码块的代码只会在类第一次初始化的时候执行一次。一个类可以有多个静态代码块,它并不是类的成员,也没有返回值,并且不能直接调用。静态代码块不能包含this或者super,它们通常被用初始化静态变量。

      问题:一个类能拥有多个main方法吗?

      答案:可以,但只能有一个main方法拥有以下签名:

     

    1
    public static void main(String[] args) {}

      否则程序将无法通过编译。编译器会警告你main方法已经存在。

      问题:简单的介绍下JVM是如何工作的?

      答案:JVM是一台抽象的计算机,就像真实的计算机那样,它们会先将.java文件编译成.class文件(.class文件就是字节码文件),然后用它的解释器来加载字节码。

      问题:如果原地交换两个变量的值?

      答案:先把两个值相加赋值给第一个变量,然后用得到的结果减去第二个变量,赋值给第二个变量。再用第一个变量减去第二个变量,同时赋值给第一个变量。代码如下:

     

    1
    int a=5,b=10;a=a+b; b=a-b; a=a-b;

      使用异或操作也可以交换。第一个方法还可能会引起溢出。异或的方法如下: int a=5,b=10;a=a+b; b=a-b; a=a-b;

     

    1
    2
    3
    4
    int a = 5; intb =10;
    a = a ^ b;
    b = a ^ b;
    a = a ^ b;

      问题:什么是数据的封装?

      答案:数据封装的一种方式是在类中创建set和get方法来访问对象的数据变量。一般来说变量是private的,而get和set方法是public的。封装还可以用来在存储数据时进行数据验证,或者对数据进行计算,或者用作自省(比如在struts中使用javabean)。把数据和功能封装到一个独立的结构中称为数据封装。封装其实就是把数据和关联的操作方法封装到一个独立的单元中,这样使用关联的这些方法才能对数据进行访问操作。封装提供的是数据安全性,它其实就是一种隐藏数据的方式。

      问题:什么是反射API?它是如何实现的?

      答案:反射是指在运行时能查看一个类的状态及特征,并能进行动态管理的功能。这些功能是通过一些内建类的反射API提供的,比如Class,Method,Field, Constructors等。使用的例子:使用Java反射API的getName方法可以获取到类名。

      问题:JVM自身会维护缓存吗,是不是在堆中进行对象分配,操作系统的堆还是JVM自己管理的堆?为什么?

      答案:是的,JVM自身会管理缓存,它在堆中创建对象,然后在栈中引用这些对象。

      问题:虚拟内存是什么?

      答案:虚拟内存又叫延伸内存,实际上并不存在真实的物理内存。

      问题:方法可以同时即是static又是synchronized的吗?

      答案:可以。如果这样做的话,JVM会获取和这个对象关联的java.lang.Class实例上的锁。这样做等于:

     

    1
    2
    synchronized(XYZ.class) {
    }

      问题:String和StringTokenizer的区别是什么?

      答案:StringTokenizer是一个用来分割字符串的工具类。

     

    1
    2
    3
    4
    StringTokenizer st =newStringTokenizer(”Hello World”);
    while (st.hasMoreTokens()) {
    System.out.println(st.nextToken());
    }

      输出:

    Hello
    World

      问题:transient变量有什么特点?

      答案:transient变量不会进行序列化。例如一个实现Serializable接口的类在序列化到ObjectStream的时候,transient类型的变量不会被写入流中,同时,反序列化回来的时候,对应变量的值为null。

      问题:哪些容器使用Border布局作为它们的默认布局?

      答案:Window, Frame, Dialog。

      问题:怎么理解什么是同步?

      答案:同步用来控制共享资源在多个线程间的访问,以保证同一时间内只有一个线程能访问到这个资源。在非同步保护的多线程程序里面,一个线程正在修改一个共享变量的时候,可能有另一个线程也在使用或者更新它的值。同步避免了脏数据的产生。

      对方法进行同步:

     

    1
    2
    3
    public synchronized void Method1 () {
    // Appropriate method-related code.
    }

      在方法内部对代码块进行同步:

     

    1
    2
    3
    4
    5
    public myFunction (){
    synchronized(this) {
    // Synchronized code here.
    }

     

    展开全文
  • 大家对于java反射机制应该都是很了解吧,那么下面要给大家分享就是一组和java反射机制有关java面试题,下面一起来看看java反射面试题都有哪些吧!java反射机制面试题:1、java反射机制作用是什么?答案:在运行...
  • Java反射常见面试题

    2020-01-04 11:44:39
    Java反射常见面试题 什么是反射反射是在运行状态中,对于任意一个类,都能够知道这个类所有属性和方法;对于任意一个对象,都能够调用它任意一个方法和属性;这种动态获取信息以及动态调用对象方法...
  • 反射常见面试题

    千次阅读 2019-11-08 10:10:41
    这种动态获取信息以及动态调用对象方法功能称为 Java 语言的反射机制。 哪里用到反射机制? 1.JDBC中,利用反射动态加载了数据库驱动程序。 2.Web服务器中利用反射调用了Sevlet服务方法。 3.Eclispe等开发...
  • 动力节点:Java面试题|多线程21道必看面试题​zhuanlan.zhihu.com动力节点:面试题|Java基础17道常见面试题​zhuanlan.zhihu.com动力节点:面试题|不得不看17道Java容器面试题​zhuanlan.zhihu.com1. 什么是反射?...
  • 反射面试题

    2019-10-24 11:07:27
    反射面试题什么是反射?什么是 java 序列化?什么情况下需要序列化?动态代理是什么?有哪些应用?怎么实现动态代理? 什么是反射反射主要是指程序可以访问、检测和修改它本身状态或行为一种能力 Java反射: 在...
  • 动力节点:Java面试题|多线程21道必看面试题​zhuanlan.zhihu.com动力节点:面试题|Java基础17道常见面试题​zhuanlan.zhihu.com动力节点:面试题|不得不看17道Java容器面试题​zhuanlan.zhihu.com1. 什么是反射?...
  • Java 反射相关面试题

    2020-12-14 17:12:15
    一、 什么是Java的反射? JAVA 反射机制是在运行状态中,对于任意一个类,都能够知道这个类所有属性和方法;对于任意一个对象,都能够调用它任意一个方法和属性;这种动态获取类信息以及动态调用对象方法...
  • Java反射面试题

    2021-03-08 20:43:25
    再网上看了很多java面试题,有很多都是零... Java反射面试题 1、除了使用new创建对象之外,还可以用什么方法创建对象? 使用Java反射可以创建对象! 2、Java反射创建对象效率高还是通过研 new创建对象效率高? 通过
  • 1、反射概念以及为什么要使用反射我们考虑一个场景,如果我们在程序运行时,一个对象想要检视自己所拥有成员属性,该如何操作?那再考虑这样另一个场景,如果我们想要在运行期获得某个类Class信息如它属性、...
  • JAVA反射-面试题

    2019-06-13 21:24:41
    这种动态获取信息以及动态调用对象方法功能称为 Java 语言的反射机制。 2. 什么是 Java 序列化?什么情况下需要序列化? Java 序列化是为了保存各种对象在内存中状态,并且可以把保存对象状态再读出来。...
  • 通过反射时,先找查找类资源,使用类加载器创建,过程比较繁琐,所以效率较低3、java反射的作用反射机制是在运行时,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意个对象,都能够调用它的任意一个...
  • ● 请说明一下JAVA中反射的实现过程和作用分别是什么? 考察点:反射 参考回答: JAVA语言编译之后会生成一个.class文件,反射就是通过字节码文件找到某一个类、类中的方法以及属性等。反射的实现主要借助以下四...
  • 关于反射机制的面试题 常见的对于class的理解 对java底层的理解 适合初学者
  • 今天总结了java反射面试题10道,各位java程序员可以根据这篇java反射面试题,来回顾一下java反射的相关知识。1、java反射的作用是什么?答:反射机制是在运行时,对于任意一个类,都能够知道这个类的所有属性和方法...
  • 005 Java反射面试题

    2020-12-21 21:50:41
    Java反射面试题 1 除了使用new创建对象之外,还可以用什么方法创建对象? 使用Java反射可以创建对象 2 Java反射创建对象效率高还是通过new创建对象效率高? 通过new创建对象效率比较高。通过反射时,先找查找类...
  • Java 反射 面试题

    万次阅读 2018-11-26 21:02:57
    1)Java反射机制作用 1. 在运行时判断任意一个对象所属类 2. 在运行时构造任意一个类对象 3. 在运行时判断任意一个类所具有成员变量和方法 4. 在运行时调用任意一个对象方法 2)什么是反射机制? 简单说,...
  • Java反射机制大厂面试题 反射机制概念 Java 反射机制在程序运行时,对于任意一个类,都能够知道这个类所有属性和方法;对于任意一个对象,都能够调用它任意一个方法和属性。这种 动态获取信息 以及 动态调用...
  • java反射面试题

    千次阅读 2019-06-01 20:30:12
    1、java反射机制作用 1)在运行时判断任意一个对象所属类 2)在运行时构造任意一个类对象 3)在运行时判断任意一个类所具有成员变量和方法 4)在运行时调用任意一个对象方法 反射就是动态加载对象,并对对象...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,710
精华内容 684
关键字:

反射的面试题