此博客是本人从学生时代开始做笔记所用, 部分是工作所遇问题,做填坑笔记,部分闲来查阅资料,加上自己的理解所总结的学习笔记, 常忙得不可开交,若漏了资料来源,望通知~ 前路漫漫,写点东西告诉自己正在一点点进步,而不要迷失于繁忙。

类类型与反射

首先,确认一条准则,java中万物皆为对象,我们创建的每个类也不例外,所有类都是Class类(全称java.lang.class)的实例对象,但它们不用new创建,因为Class类的构造方法是私有的。

好的,现在开始咬文嚼字。

每个类都有一个类类型(很拗口是不是。。理解为类的class,即类类型)即class属性,这个属性包含此类的重要信息,例如方法、属性等

 

如何获取类类型?

1. Class c1= A.class

2. Class c2= a1.getClass() //a1是A的实例

3. Class c3= Class.forName("类的全称")

备注: 类类型是一个类,也是一个对象

 

如何构建类类型获取该类实例?

A a2= (A)c1.newInstance()

即先创建一个类类型实例,再进行一次强制性类型转换

 

类类型的常用操作

publicstaticvoid printClassMessage(Object obj){
  Class c = obj.getClass();
  //获取类的名称
  System.out.println("累的名称是:"+c.getName());

  //一个成员方法就是一个Method对象
  //getMethods()方法获取的是所有的public的函数,包括父类继承而来的
  //getDeclaredMethods()获取的是多有该类自己声明的方法,不问访问权限
  Method[] ms = c.getMethods();
  for(int i =0; i < ms.length; i++){
    //得到方法的返回值类型的类类型
    Class retrunType = ms[i].getReturnType();
    System.out.print(retrunType.getName()+" ");
    //得到方法的名称
    System.out.print(ms[i].getName()+"(");
    
//获取的参数类型--->得到的是参数列表的类型的类类型     Class[] paraTypes = ms[i].getParameterTypes();     for(Class class1 : paraTypes){       System.out.print(class1.getName()+",");     }     System.out.println(")");   } }

 

接下来说一下什么是反射

定义: JAVA反射指的是在运行状态时对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。

而反射的本质,就是通过Class对象来获取类的属性,方法等信息,即将类解剖,分成一个个对象。 

posted @ 2018-09-28 11:28  炎泽  阅读(446)  评论(0编辑  收藏  举报