• JAVA 基础之 知其所以然



    一、反射

    1. 何为反射机制:在运行状态中,对于任意一个类,都能够获取这个类的属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性。这种动态获取的信息以及动态调用的方法的功能称之为反射机制。
    2. 反射机制能做什么:
      1. 在运行时判断任意一个对象所属的类。
      2. 在运行时构造任意一个类的对象。
      3. 在运行时判断任意一个类所具有的成员变量和方法。
      4. 在运行时调用任意一个对象的方法。
      5. 生成动态代理。

    二、JAVA类加载

      每个Java程序执行前都必须经过编译、加载、连接、和初始化这几个阶段
        加载:查找并加载类的二进制数据
        连接:1.验证:确保被加载的类的正确性
           2.准备:为类的静态变量分配内存,并将其初始化为默认值
             3.解析:把类中的符号引用转换为直接引用
        初始化:为类的静态变量赋予正确的初始值

        i、加载是指将编译后的java类文件(也就是.class文件)中的二进制数据读入内存,并将其放在
          运行时数据区的方法区内,然后再堆区创建一个Java.lang.Class对象,用来封装类在方法区的数据结构。
          即加载后最终得到的是Class对象,并且更加值得注意的是:该Java.lang.Class对象是单实例的,
          无论这个类创建了多少个对象,他的Class对象是唯一的!!!!。
          而 加载并获取该Class对象可以通过三种途径:
            Class.forName(类的全路径)、实例对象.class(属性)、实例对象getClass()。

          在连接和初始化阶段,其实静态变量经过了两次赋值:
            第一次是静态变量类型的默认值;
            第二次是我们真正赋给静态变量的值。



    三、使用

    1.   Integer数组中加入String 类型的字符串。  
    	public static void main(String[] args) throws NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
    		List<Integer> list = new ArrayList<>();
    		Method method = list.getClass().getMethod("add", Object.class);
    		method.invoke(list, "java 反射");
    		
    		System.out.println(list.get(0));
    		
    	}
    

    四、好处

      使用反射的好处:
        1.创建的对象不用new
        2.可以动态创建对象(把要创建的对象的类型写在配置文件中,每次程序启动读取配置文件,再自动创建对象)

    五、new 和 newInstance区别

      newInstance: 弱类型。低效率。只能调用无参构造。
      new: 强类型。相对高效。能调用任何public构造。

  • 相关阅读:
    JSP简单访问数据库
    解析数据存储MySQL
    学习SSH框架
    JavaWEB中读取配置信息
    Eclipse中将Java项目转换成Web项目的方法
    JavaWEB入门
    万能数据库连接类-Oracle、DB2 、Access 、Sql Server
    小米3 打开开发者选项
    coolpad 5879logcat不能输入日志解决办法
    实用开发之-oracle表回滚到一个指定时间的操作语句
  • 原文地址:https://www.cnblogs.com/binbang/p/6513146.html
Copyright © 2020-2023  润新知