获取类对象的四种方法

对于每一个类在加载时都会有一个唯一的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的,其实也从来没想过学有关计算机这方面的,可无奈一波三折,误打误撞就到了这里。

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

原文地址:https://www.cnblogs.com/paoge/p/13553742.html