Java自学_SE_每天一考_Java反射机制

Java自学_SE_每天一考_Java反射机制每天一考

问题

  1. 写出三种获取Class实例的三种常见方式
    /*
    这种方式使用比较少,编译的时候就已经确定了类型,不能体现出反射的动态性
    动态性:在运行时才进行
    /
    1).Class clazz1 = Person.class;
    /

    同样写出来的时候也已经确定不能提醒按动态性
    /
    2).Person p1 = new Person();
    Class<? extends Person> clazz2 = p1.getClass();
    /

    全类名的方式能够体现处反射的动态性,编译时只校验是否有字符串,在运行时才判断
    */
    3).Class clazz3 = Class.forName(“com.java.Person”);//全类名 包含包名在内的路径

  2. 谈谈你对Class类的理解
    Class实例对应着加载到内存中的运行时类.(不一定是类,接口 数组什么的都可以,通常为类),所以我们可以用Class的实例去调用运行时类的方法结构

  3. 创建Class对应运行时类的对象的通用方法,代码实现.以及这样的操作,需要对应的运行时类构造器方面满足的要求。
    Objcet obj =clazz.newInstance();//创建了对应的运行时类的对象
    运行时类要求
    1.必须有空参的构造器
    2.权限修饰符的权限要够,通常设置为public

  4. 在工程或module的src下有名为”jdbc.properties”的配置文件,文件内容为:name=Tom。如何在程序中通过代码获取Tom这个变量值。代码实现
    

    Properties pros = new Properties();
    //此时文件位置默认在module下
    //方式一:读取配置文件
    // BufferedInputStream bis = new BufferedInputStream(new FileInputStream(“JDBC.properties”));
    // pros.load(bis);

    //方式二:用ClassLoader
    //此时的读取的文件的默认位置在当前module的src下.
    ClassLoader classLoader = ClassLoaderTest.class.getClassLoader();
    InputStream is = classLoader.getResourceAsStream("JDBC1.properties");
    pros.load(is);
    
  5. 如何调用方法show()
    类声明如下:
    package com.atguigu.java;
    class User{
    public void show(){
    System.out.println(“我是一个中国人!”);
    } }

Class clazz = User.class;
User user = clazz.getDeclaredConstruction().newInstance();
//getDeclaredMethod(“show”, String.class);
//参数1:指明获取方法的名称 参数2:同名的方法可能很多,指明形参列表
Method show =clazz.getDeclaredMethod(“show”);//空参只有参数1
//保证当前方法时可访问的.setAccessiable(Boolean flag)
show.setAccessiable(true);
/*
invoke():参数1 方法的调用者 参数2 给方法形参复制的实参
invoke()的返回值,即为对应类中被调用的方法的返回值
*/
//调用Method的invoke()
show.invoke(user)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值