zoukankan      html  css  js  c++  java
  • 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构造。

  • 相关阅读:
    透明代理和匿名代理的区别
    WinForm webbrowser控件的使用
    c# WebBrowser开发参考资料--杂七杂八
    C# Winform WebBrowser控件
    使用webBrowser进行C#和JS通讯
    webBrowser 应用编程函数总结
    C#网页采集数据的几种方式(WebClient、WebBrowser和HttpWebRequest/HttpWebResponse)
    利用WebBrowser控件实现百度自动搜索
    c#winform使用WebBrowser 大全
    ros在QT下编程
  • 原文地址:https://www.cnblogs.com/binbang/p/6513146.html
Copyright © 2011-2022 走看看