精华内容
下载资源
问答
  • java面试题--反射机制

    2018-11-14 17:31:05
    面试经典题型,很值得分享的。 我们面试经常会遇到的问题。
  • Java反射常见面试题

    万次阅读 多人点赞 2019-04-16 19:47:21
    这种动态获取的信息以及动态调用对象的方法的功能称为 Java 语言的反射机制。 2. 哪里用到反射机制? JDBC中,利用反射动态加载了数据库驱动程序。 Web服务器中利用反射调用了Sevlet的服务方法。 Eclispe等开发...

    1. 什么是反射?

    1. 反射是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为 Java 语言的反射机制。

    2. 哪里用到反射机制?

    1. JDBC中,利用反射动态加载了数据库驱动程序。
    2. Web服务器中利用反射调用了Sevlet的服务方法。
    3. Eclispe等开发工具利用反射动态刨析对象的类型与结构,动态提示对象的属性和方法。
    4. 很多框架都用到反射机制,注入属性,调用方法,如Spring。

    3. 什么叫对象序列化,什么是反序列化,实现对象序列化需要做哪些工作?

    1. 对象序列化,将对象中的数据编码为字节序列的过程。
    2. 反序列化;将对象的编码字节重新反向解码为对象的过程。
    3. JAVA提供了API实现了对象的序列化和反序列化的功能,使用这些API时需要遵守如下约定:
      1. 被序列化的对象类型需要实现序列化接口,此接口是标志接口,没有声明任何的抽象方法,JAVA编译器识别这个接口,自动的为这个类添加序列化和反序列化方法。
      2. 为了保持序列化过程的稳定,建议在类中添加序列化版本号。
      3. 不想让字段放在硬盘上就加transient
    4. 以下情况需要使用 Java 序列化:
      1. 想把的内存中的对象状态保存到一个文件中或者数据库中时候;
      2. 想用套接字在网络上传送对象的时候;
      3. 想通过RMI(远程方法调用)传输对象的时候。

    4. 反射机制的优缺点?

    1. 优点:可以动态执行,在运行期间根据业务功能动态执行方法、访问属性,最大限度发挥了java的灵活性。
    2. 缺点:对性能有影响,这类操作总是慢于直接执行java代码。

    5. 动态代理是什么?有哪些应用?

    1. 动态代理是运行时动态生成代理类。
    2. 动态代理的应用有 Spring AOP数据查询、测试框架的后端 mock、rpc,Java注解对象获取等。

    6. 怎么实现动态代理?

    1. JDK 原生动态代理和 cglib 动态代理。
    2. JDK 原生动态代理是基于接口实现的,而 cglib 是基于继承当前类的子类实现的。

    7. Java反射机制的作用

    1. 在运行时判断任意一个对象所属的类
    2. 在运行时构造任意一个类的对象
    3. 在运行时判断任意一个类所具有的成员变量和方法
    4. 在运行时调用任意一个对象的方法

    8. 如何使用Java的反射?

    1. 通过一个全限类名创建一个对象
      1. Class.forName(“全限类名”); 例如:com.mysql.jdbc.Driver Driver类已经被加载到 jvm中,并且完成了类的初始化工作就行了
      2. 类名.class; 获取Class<?> clz 对象
      3. 对象.getClass();
    2. 获取构造器对象,通过构造器new出一个对象
      1. Clazz.getConstructor([String.class]);
      2. Con.newInstance([参数]);
    3. 通过class对象创建一个实例对象(就相当与new类名()无参构造器)
      1. Cls.newInstance();
    4. 通过class对象获得一个属性对象
      1. Field c=cls.getFields():获得某个类的所有的公共(public)的字段,包括父类中的字段。
      2. Field c=cls.getDeclaredFields():获得某个类的所有声明的字段,即包括public、private和proteced,但是不包括父类的声明字段
    5. 通过class对象获得一个方法对象
      1. Cls.getMethod(“方法名”,class……parameaType);(只能获取公共的)
      2. Cls.getDeclareMethod(“方法名”);(获取任意修饰的方法,不能执行私有)
      3. M.setAccessible(true);(让私有的方法可以执行)
    6. 让方法执行
      1). Method.invoke(obj实例对象,obj可变参数);-----(是有返回值的)
    展开全文
  • 什么是反射机制反射机制是Java语言中一个非常重要的特性。它允许程序在运行时进行自我检查。他同时也允许对其内部的成员进行操作,虽然这个特性在实际开发时使用的不多。但是像C/C++等语言根本没有提供这样的特效...

    什么是反射机制,反射机制是Java语言中一个非常重要的特性。它允许程序在运行时进行自我检查。他同时也允许对其内部的成员进行操作,虽然这个特性在实际开发时使用的不多。但是像C/C++等语言根本没有提供这样的特效,由于反射机制能够实现在运行时对力进行装载,因此能够增加程序的灵活性。但是不恰当的使用反射机制也会严重影响系统的性能。
    具体而言,反射机制提供的功能主要有得到一个对象所属的类,获取一个力的所有成员变量的方法。在运行时创建对象在运行时调用对象的方法。
    class Base{
    public void f(){
    System. out. println(“Base”);
    }
    }
    class Sub extennds Base {
    public void f(){
    System out println(“Sub”);
    }
    }
    public class Test {
    public static void main( String [ ] args){
    try{ //使用反射机制加载类
    Class e= Class forName(“Sub”)
    Base b=(Base)c. newInstance():
    b.f();
    } catch(Exception e){
    e. printstackTrace();
    }
    }
    }

    程序运行结果为:
    Sub

    展开全文
  • 反射机制是Java语言中一个非常重要的特性,它允许程序在运行时自我检查,同时也允许对其内部的成员进行操作。由于反射机制能够实现在运行时对类进行装载,因此能够增加程序的灵活性,但是不恰当地使用反射机制,也会...

    反射机制是Java语言中一个非常重要的特性,它允许程序在运行时自我检查,同时也允许对其内部的成员进行操作。由于反射机制能够实现在运行时对类进行装载,因此能够增加程序的灵活性,但是不恰当地使用反射机制,也会严重影响系统的性能。

    具体而言,反射机制提供的功能主要有:

    • 得到一个对象所属的类;
    • 获取一个类的所有成员变量和方法;
    • 在运行时创建对象;
    • 在运行时调用对象的方法;

    其实,反射机制非常重要的一个作用就是可以在运行时动态地创建类的对象,示例如下:

    class Base{
        public void f(){
            System.out.println("Base");
        }
    }
    class Sub extends Base{
        public void f(){
            System.out.println("Sub");
        }
    }
    public class Test{
        public static void main(String[] args){
            try{//使用反射机制加载类
                Class c = Class.forName("Sub");
                Base b = (Base)c.newInstance();
                b.f();
                }catch(Exception e){
                    e.printStackTrace();
                }
        }
    }
    
    /* 程序运行结果为:Sub */
    

    在反射机制中,Class是一个非常重要的类,那么如何才能获取Class类呢?总共有如下3种方法可以获取到Class类:

    1. Class.forName (“类的路径”),如上例所示。
    2. 类名.Class。
    3. 实例.getClass()。

    Java中创建对象的方式有以下4种:

    1. 通过new语句实例化一个对象;
    2. 通过反射机制创建对象。
    3. 通过clone()方法创建一个对象;
    4. 通过反序列化的方式创建对象。
    展开全文
  • Java反射机制的大厂面试题 反射机制概念 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 反射 面试题

    万次阅读 2018-11-26 21:02:57
    1)Java反射机制的作用 1. 在运行时判断任意一个对象所属的类 2. 在运行时构造任意一个类的对象 3. 在运行时判断任意一个类所具有的成员变量和方法 4. 在运行时调用任意一个对象的方法 2)什么是反射机制? 简单说,...
  • Java反射机制 动态语言 动态语言是指程序在运行时可以改变其内部结构:比如新增成员函数,删除已有删除等结构上的一些变化。常见的动态语言有JavaScript和Ruby、Python等。而C、C++等不属于动态语言。从反射角度而...
  • Java反射机制的作用:1)在运行时判断任意一个对象所属的类。2)在运行时判断任意一个类所具有的成员变量和方法。3)在运行时任意调用一个对象的方法4)在运行时构造任意一个类的对象拓展:1、什么是反射机制?简单...
  • 反射常见面试题

    千次阅读 2019-11-08 10:10:41
    这种动态获取的信息以及动态调用对象的方法的功能称为 Java 语言的反射机制。 哪里用到反射机制? 1.JDBC中,利用反射动态加载了数据库驱动程序。 2.Web服务器中利用反射调用了Sevlet的服务方法。 3.Eclispe等开发...
  • Java基础知识面试题(2020最新版)

    万次阅读 多人点赞 2020-02-19 12:11:27
    Java面试总结(2021优化版)已发布在个人微信公众号【技术人成长之路】,优化版首先修正了读者反馈的部分答案存在的错误,同时根据最新面试总结,删除了低频问题,添加了一些常见面试题,对文章进行了精简优化,欢迎...
  • 关于反射机制面试题 常见的对于class的理解 对java底层的理解 适合初学者
  • 但是java语言中还有一个非常强大的特性:反射机制,本就可以通过反射机制来修改age的值。  在运行状态中,对于任何一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法...
  • Java面试题大全(2020版)

    万次阅读 多人点赞 2019-11-26 11:59:06
    发现网上很多Java面试题都没有答案,所以花了很长时间搜集整理出来了这套Java面试题大全,希望对大家有帮助哈~ 本套Java面试题大全,全的不能再全,哈哈~ 一、Java 基础 1. JDK 和 JRE 有什么区别? JDK:Java ...
  • Java 反射相关面试题

    2020-04-07 20:13:01
    反射
  • SpringMVC面试题总结

    千次阅读 2019-05-22 21:14:30
    前言:SpringMVC的面试题常见的也就那几种,本文我打算分为两个方向为大家介绍SpringMVC的面试题。 第一部分将从源码的执行的角度分析SpringMVC(以后简称MVC) 第二部分将从面试官常问的SpringMVC面试题取介绍 ...
  • 反射面试题-请了解下

    千次阅读 2018-06-14 10:44:46
    对于任意一个对象,都能够调用它的任意一个方法,这种动态获取信息以及动态调用对象方法的功能成为Java反射机制。 反射的基本操作 创建一个类,用于演示反射的基本操作,代码如下: package fs; public class...
  • 这种动态获取的信息以及动态调用对象的方法的功能称为Java语言的反射机制。  2.哪里用到反射机制?  JDBC中,利用反射动态加载了数据库驱动程序。  Web服务器中利用反射调用了Sevlet的服务方法。  Eclispe等...
  • JAVA反射-面试题

    2019-06-13 21:24:41
    这种动态获取的信息以及动态调用对象的方法的功能称为 Java 语言的反射机制。 2. 什么是 Java 序列化?什么情况下需要序列化? Java 序列化是为了保存各种对象在内存中的状态,并且可以把保存的对象状态再读出来。...
  • 2020最新Java常见面试题及答案

    万次阅读 多人点赞 2019-10-26 15:53:35
    面试题包括以下十九个模块:Java 基础、容器、多线程、反射、对象拷贝、Java Web 模块、异常、网络、设计模式、Spring/Spring MVC、Spring Boot/Spring Cloud、Hibernate、Mybatis、RabbitMQ、Kafka、Zookeeper、...
  • java反射面试题

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

    2021-07-17 16:27:33
    一、什么是反射机制? Java反射机制就是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能...
  • 下述是我收录整理的Android面试题汇总,由于篇幅原因,在这只把Java反射的题目列举出来,后续还会更新其余面试题内容,大家可以关注一下我,及时知晓我更新的知识点,同时这份面试集锦的整理也花费了我...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 29,352
精华内容 11,740
关键字:

反射机制面试题