zoukankan      html  css  js  c++  java
  • Java 反射理解(一)-- Class 类的使用

    Java 反射理解(一)-- Class 类的使用

    概念

    这里阐述几个基本概念:

    1. 在面向对象的世界里,万事万物皆对象。(在 Java 语言中,静态的成员、普通数据类型除外)

    2. 类也是对象,类是 java.lang.Class 的实例对象。

    3. 类类型是什么?

      类类型可以简单理解为类的类型。在万物皆对象的 Java 中,我们定义的每个类都是 java.lang.Class 类的一个对象,该对象就是该类的类类型,即 Class 对象。

    4. 得到 Class对象有三种方法:

      • 已知类名 (类名.class
      • 已知类对象(对象.getClass()
      • Class 类(类类型)中提供一个叫做 forName 的方法(Class.forName("类名")

    演示

    我们通过具体的演示来描述得到 Class 对象的三种方法:

    import com.demo.reflect;
    
    /** 创建一个 Foo 类 **/
    class Foo{	
    	void print(){
    		System.out.println("foo");
    	}
    }
    
    /** 演示类 ClassDemo1 **/
    public class ClassDemo1 {
    	public static void main(String[] args) {
    		//Foo的实例对象用 fool 表示
    		Foo foo1 = new Foo();
    		//Foo 这个类 也是一个实例对象
    		//任何一个类都是Class的实例对象,这个实例对象有三种表示方式
            
    		// c1, c2, c3 表示了 Foo 类的类类型(class type),一个类只可能是Class类的一个实例对象,即 c1 = c2 = c3,三次得到的Class对象都是同一个
            
    		//第一种表示方式 ---> 实际在告诉我们任何一个类都有一个隐含的静态成员变量class
    		Class c1 = Foo.class;
    		
    		//第二中表达方式 ---> 已经知道该类的对象通过getClass方法获取
    		Class c2 = foo1.getClass();
    		
    		System.out.println(c1 == c2);
    		
    		//第三种表达方式
    		Class c3 = null;
    		try {
    			c3 = Class.forName("com.demo.reflect.Foo");
    		} catch (ClassNotFoundException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
            
    		System.out.println(c2==c3);
    		
    		//我们完全可以通过类的类类型创建该类的对象实例 ---> 通过c1 or c2 or c3 创建 Foo 的实例对象
    		try {
    			Foo foo = (Foo) c1.newInstance();//需要有无参数的构造方法
    			foo.print();
    		} catch (InstantiationException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		} catch (IllegalAccessException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    			
    	}
    }
    

    运行结果为:

    true
    true
    foo
    

    完。

  • 相关阅读:
    SpringBoot实现原理
    常见Http状态码大全
    forward(转发)和redirect(重定向)有什么区别
    1094. Car Pooling (M)
    0980. Unique Paths III (H)
    1291. Sequential Digits (M)
    0121. Best Time to Buy and Sell Stock (E)
    1041. Robot Bounded In Circle (M)
    0421. Maximum XOR of Two Numbers in an Array (M)
    0216. Combination Sum III (M)
  • 原文地址:https://www.cnblogs.com/weixuqin/p/11220729.html
Copyright © 2011-2022 走看看