class type
来源:互联网 发布:慕课网python教程 编辑:程序博客网 时间:2024/06/06 19:24
在java里面,所有事物都是对象,class也是Java.lang.class的对象。
获取一个类的class type 有三种方法
- 知道类的名字
Class c1=ClassName.class
- 知道类的实例
Class c2=instance.getClass();
Class c3=Class.forName("完整类名")
一个类只有一个class type c1=c2=c3
可以通过class type 来创建该类的对象,需要强制转化。
ClassName instance=(ClassName) c1.newInstance();//需要有无参的构造方法
new创建对象是静态加载类,在编译时刻就需要加载所有可能使用到的类。
Class.forName(“类的全称”)不仅表示类的class type,还代表动态加载类。
编译时刻加载类是静态加载类,运行时刻加载类是动态加载类。
关于获取类的方法信息
getDeclaredMethod*()获取的是类自身声明的所有方法,包含public、protected和private方法。
getMethod*()获取的是类的所有共有方法,这就包括自身的所有public方法,和从基类继承的、从接口实现的所有public方法。
获取类方法的信息
public static void getInfo(Object ob){ Class class1=ob.getClass(); System.out.println("该类的名称是"+class1.getName()); //方法的类型名称等信息 Method[] ms=class1.getMethods(); for(Method m:ms){ System.out.print(m.getReturnType().getName()+" "); System.out.print(m.getName()+"("); //打印该方法的入参类型,得到的是一个参数类类型数组 Class[] mi=m.getParameterTypes(); for(Class c1:mi){ System.out.print(c1.getName()+","); } System.out.println(")"); } }```成员变量也是对象,是java.lang.reflect.Field---------------------------------
public static void getFieldsInfo(Object ob) {
Class class1=ob.getClass();
System.out.println(“++++++++++++++++++”);
Field[] flFields=class1.getFields(); for(Field fl:flFields){ Class nameClass=fl.getType(); System.out.print(nameClass.getName()+" "); System.out.println(fl.getName()); }
获取构造函数的信息---------
public static void getConstructor(Object b){
//获取一个类的classtype
Class clsClass=b.getClass();
//获得所有的构造函数的数组
Constructor[] cons=clsClass.getConstructors();
for(Constructor co:cons ){ System.out.print(co.getModifiers()+" "+co.getName()+"("); Parameter[] pr=co.getParameters(); for(Parameter p:pr){ System.out.print(p.getClass().getName()+","+p.getName()); } System.out.println(')'); }}
反射来调用方法
方法的唯一标识,返回类型和入参
method.invoke(对象,入参);
通过反射来探究泛型
ArrayList< String> list1=new ArrayList<String>(); list1.add("Hello");//由于list1增加了泛型,所以无法加入其它类别的数据 ArrayList<Integer> list2=new ArrayList<Integer>(); list2.add(3); //list1与list2的泛型不一样,一个为String,一个为int,但是 Class c1=list1.getClass(); Class c2=list2.getClass(); System.out.println(c1==c2);//结果为true。编译之后的集合是去泛型化的 //通过运行时执行来绕过编译 Method md=c1.getMethod("add", Object.class); md.invoke(list1, 235);//现在来为他加入一个int类型的数字 System.out.println(list1.size());//2 System.out.println(list1);//输出hello 235
阅读全文
0 0
- class type
- Create class type dynamically
- 'point' 'class' type redefinition
- class type redefinition
- class type redefination问题解决
- Define encapsulate class type
- Java type & Class member
- 关于"class type redefinition"
- First Class Type
- type()与class()
- error C2011: 'class' type redefinition
- 设计class 犹如设计type
- boolean.class与Boolean.TYPE
- Scala中的Type与Class
- c++中的 template<class Type>
- unknow type name namespace,unknow type name class
- enum class type 和enum type 的区别
- Python Type Class and Object的文章
- Atom使用
- arm-linux-gcc常用参数
- modbus-tcp协议学习-python
- CentOS 安装mysql
- 如何使用STM32F4的BootLoader和APP程序
- class type
- 表格/表单
- C/C++ 时间信息获取方式
- boost asio中io_service类的几种使用
- 图解CSS3核心技术与案例实战(第三章CSS3边框)
- SSM框架和SSH框架的区别
- solr配置中文分析器及业务字段
- npm scripts
- iText7 生成 PDF 文件,解决各种操作系统中文问题,控制指定位置显示图片、文字、图文混排