初识java反射机制

这篇小博客有这么些内容~认识何使用java反射机制的心路历程

什么是java反射机制呢?什么时候会用到java反射机制呢?怎么使用java反射机制呢?


 

那我们开始吧~

(一)反射机制(Reflection)

JAVA反射机制_百度百科(你不打算戳戳看吗?)

java反射机制让Java这个静态语言变得格外突出,反射机制可以让java在运行过程中动态的调用类里面的属性和方法,可以动态的调用对象的方法。

*在度娘解释里动态语言和静态语言这两个词瞩目

所以静态语言和动态语言的区别 - raindi - 博客园

静态在编译的时候一个变量的类型由它的定义决定,而动态语言实在于运行时可以根据上下文来确定变量的类型

(二)为什么要用反射机制呢?

反射机制可以让java在运行的时候获得某个类的结构、成员变量,用来实例化。Java的反射机制它知道类的基本结构,这种对Java类结构探知的能力,我们称为Java类的“自审”。这种自审机制就像用eclipse的时候--对象.XXX的时候编译工具会跳出这个对象对应的的属性和方法,就是自审机制。nice

(三)怎么使用java反射机制呢?

1.Class类
什么是Class类呢?
在java语言里,类是java.lang.Class的实例化对象(Class大写C),那么就可以说我创建一个对象比如学生就是Class类的对象,“学生”本身也是类。

2.反射

现在想用java的反射机制来访问“学生”类我可以这样声明

  public class Domo {
     public void f() {
    	//声明学生对象1
    	Student ni = new Student();
    	//声明学生对象2
    	Class a = Student.class;//也就是每一个对象都有一个class属性
    	//声明学生对象3
    	Class b = ni.getClass();//通过已知对象来获得对应的类;
    	//声明学生对象4
    	try {
    		Class c3 = Class.forName("one.Student");//找到类的路径
    		} catch (ClassNotFoundException e) {
    		e.printStackTrace();
    		}
    }
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
	}

}

这里的abc都是类都表示了Student的类类型,那么abc是否相等呢?

实践输出“a==b”返回值是true可见一个类只能是一个Class的实例对象。

-----1通过创建实例化对象

通过a,b,c的newInstance来创
try {
			Student a1 =(Student)a.newInstance();
		} catch (InstantiationException | IllegalAccessException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} 		

-----2调用对象的方法

通过调用对象的方法,方法其实也是实例化对象,它是Method的实例化对象。

	Method[] ms = c.getMethods();//获得类里面的方法;
    			for(int i = 0; i < ms.length;i++){
    				//然后可以得到方法的名称
    				System.out.print(ms[i].getName()+"   ");
    			}

获得对象的参数,和获得方法一样,属性也有它的类-》Field

Field[] fs = c.getDeclaredFields();//可以这样获得方法,这里的方法不管是私有还是共有都可以获取

-----3对象的构造函数

同理构造函数也有它的类-》Constructor

Constructor[] cs = c.getDeclaredConstructor;//获取它的全部构造函数


谈谈Java反射机制~我有认真看他的博客

Java基础之-反射(非常重要) - CSDN博客~

posted on 2019-06-25 20:51  风太烫  阅读(153)  评论(0编辑  收藏  举报