zoukankan      html  css  js  c++  java
  • 回忆(一):反射中获得class对象的三种方法

    package reflex;
    
    /*
     * 反射:就是通过class文件对象 去使用该文件中的成员
     * 变量,构造方法,成员方法。
     * 
     * Person p = new Person(); p.使用
     * 
     * 要想这样使用,首先必须得到class文件对象,其实也 
     * 就是得到Class类的对象。 
     * Class类: 
     * 		成员变量 Field 
     * 		构造方法 Construtor
     * 		成员方法 Method
     * 
     * @author mzy
     * 
     * 获取class类的对象的方式:
     * 		A:Object类的getClass()方法
     * 		B:数据类型的静态class
     * 		C:Class类中的静态方法
     * 			public static Class<?> forName(String className)
     * 
     * 
     * 我们写的话:
     * 		获得Class对象,三种都可以;第二种最方便
     * 
     * 开发:
     * 		第三种最好:因为第三种是一个字符串,
     * 		而不是一个具体的类名,这样我们就可
     * 		以把这样的字符串配置到配置文件中。
     * 			
     * 		
     * 		
     *
     */
    public class ReflectDemo01_visit_three_methods {
    	public static void main(String[] args) throws ClassNotFoundException {
    		// 获得Class的方法(感叹号问题为泛型)
    		// 方式1:
    		Person p = new Person();
    		Class c = p.getClass();
    
    		Person p2 = new Person();
    		Class c2 = p2.getClass();
    
    		System.out.println(p == p2); // false
    		System.out.println(c == c2); // true
    
    		// 方式2: 通过类名直接获得class对象
    		Class c3 = Person.class;
    		// 所有的数据类型都有它的class对象
    		// int.class;
    		// String.class;
    		System.out.println(c == c3); // true
    
    		// 方式3:
    		/*
    		 * 抛出ClassNotFoundException
    
    6+	 * 找不到
    		 * 以后涉及到通过类的名称来找的
    		 * 一定要写全路径(带包名的全路径)
    		 * Class c4 = Class.forName("Perosn");
    		 * 
    		 * 
    		 * 打开.java文件上的箭头,右键点 Copy Qualified Name
    		 */
    		Class c4 = Class.forName("reflex.Person");
    		System.out.println(c == c4); // true
    	}
    }
    

    其中的person类:

    package reflex;
    
    public class Person {
    	// 成员变量
    	private String name;
    	int age;
    	public String address;
    
    	// 构造方法
    	public Person() {
    	}
    
    	Person(String name, int age) {
    		this.name = name;
    		this.age = age;
    	}
    	private Person(String name) {
    		this.name = name;
    	}
    	public Person(String name, int age, String address) {
    		this.name = name;
    		this.age = age;
    		this.address = address;
    	}
    
    	// 成员方法
    	public void show() {
    		System.out.println("show");
    	}
    
    	public void method(String s) {
    		System.out.println("method" + s);
    	}
    
    	public String getString(String s, int i) {
    		return s + "---" + i;
    	}
    
    	@Override
    	public String toString() {
    		return "Person [name=" + name + ", age=" + age + ", address=" + address + "]";
    	}
    
    	private void function() {
    		System.out.println("function");
    	}
    
    }
    


  • 相关阅读:
    用数据管理过程(2)——通过经验值管理项目
    用数据管理过程(3)——可预测级别的量化管理(麦当劳的管理方式)
    JMeter对Oracle数据库进行压力测试
    [置顶] Linux下的截图小工具
    [互联网面试笔试汇总C/C++-7] 寻找两个链表的第一个交点-微策略
    使用 OpenSSL API 进行安全编程
    带外数据的接收与发送
    oracle本月、上月、去年同月第一天最后一天
    mysql查看权限的命令
    php的一个验证邮箱的正则表达式
  • 原文地址:https://www.cnblogs.com/mzywucai/p/11053450.html
Copyright © 2011-2022 走看看