zoukankan      html  css  js  c++  java
  • 获取类对象的四种方法

    对于每一个类在加载时都会有一个唯一的Class对象,Class对象中包含了所有需要动态获取的类的信息, 所以Class类是Reflection API 中的核心类 。

    获取Class对象的方法?

    getClass
    ​
    .class
    ​
    Class.forName();
    ​
    ClassLoader

    native:本地的源码就到头了,再往下走:就不是java代码

    在JDK中,主要由以下类来实现Java反射机制,这些类都位于java.lang.reflect包中:

    Class类:代表一个类。

    Field 类:代表类的成员变量(成员变量也称为类的属性)。

    Method类:代表类的方法。

    Modifier类:代表修饰符。

    lConstructor 类:代表类的构造方法。

    Array类:提供了动态创建数组,以及访问数组的元素的静态方法。

    
    
    obj.getClass();
    ​
    class属性
    ​
    Class.forName();
    ​
    ClassLoader

    Demo1 获取类对象的四种方式

    `package demo1;
    ​
    public class Demo1 {
    ​
       /**
    ​
        * @param args
    ​
        * @throws ClassNotFoundException 
    ​
        */public static void main(String[] args) throws ClassNotFoundException {
    ​
          //得到Class类对象的四种方法
    //1.
    ​
          Object obj = new String();
    ​
          Class clz1 = obj.getClass();
      
    
      //2.
      Class clz2 = String.class;
      
      //3.
      Class clz3 = Class.forName("java.lang.String");
      
      //4.
      ClassLoader cl = ClassLoader.getSystemClassLoader();
      Class clz4 = cl.loadClass("java.util.ArrayList");
    }
    
    }


    在JDK中,主要由以下类来实现Java反射机制,这些类都位于java.lang.reflect包中:

    Class类:代表一个类。

    Field 类:代表类的成员变量(成员变量也称为类的属性)。

    Method类:代表类的方法。

    Modifier类:代表修饰符。

    Constructor 类:代表类的构造方法。

    Array类:提供了动态创建数组,以及访问数组的元素的静态方法。

    反射Student类的所有构造方法

    
    
    package demo2;
    ​
    import java.lang.reflect.Constructor;
    import java.lang.reflect.InvocationTargetException;
    import java.lang.reflect.Modifier;
    ​
    public class Demo2 {
    ​
       /**
        * @param args
        * @throws NoSuchMethodException 
        * @throws SecurityException 
        * @throws InvocationTargetException 
        * @throws IllegalAccessException 
        * @throws InstantiationException 
        * @throws IllegalArgumentException 
        */
       public static void main(String[] args) throws SecurityException, NoSuchMethodException, IllegalArgumentException, InstantiationException, IllegalAccessException, InvocationTargetException {
          // 反射String类的所有构造方法
          Class clz = Student.class;
    ​
          System.out.println("所有构造方法");
          // Constructor[] cons = clz.getConstructors();
          Constructor[] cons = clz.getDeclaredConstructors();
          for (Constructor con : cons) {
             // System.out.println("访问修饰权限:" +
             // Modifier.toString(con.getModifiers()));
             // System.out.println("方法名:" + con.getName());
             // System.out.println("****************************");
             System.out.println(Modifier.toString(con.getModifiers()) + " "
                   + con.getName());
          }
    ​
          
          //找无参的构造方法    Student s = new Student();
          Constructor con = clz.getDeclaredConstructor();
          Object obj = con.newInstance();
          System.out.println(obj);
          
          //找带string,int类型参数的构造方法 Student s = new Student("zhangsan",12)
          con = clz.getDeclaredConstructor(String.class, int.class);
          obj = con.newInstance("zhangsan", 12);
          System.out.println(obj);
          
          con = clz.getDeclaredConstructor(String.class);
          
          
       }
    ​
    }

    虽然以上都是从老邓的代码心得复制过来的,因为我实在不知道写什么了,学得一知半解,理解的也不全面,只能到处移植。

    我本来是不打算学这个java的,其实也从来没想过学有关计算机这方面的,可无奈一波三折,误打误撞就到了这里。

    没什么好说的,我这个人生无大志,不说碌碌无为也但求无过,既然来到了世上就好好走一趟。

  • 相关阅读:
    Android之Wifi使用
    Android之浮动小窗口
    Android之Socket的基于UDP传输
    Android之基本常见知识(持续更新)
    Android之打开闪光灯关键代码
    Android之Oauth验证(一)
    Android之WebView简易应用
    Android之短信广播接收内容
    Google HTML/CSS 代码风格指南
    几个 HTML 标签的用法
  • 原文地址:https://www.cnblogs.com/paoge/p/13553742.html
Copyright © 2011-2022 走看看