博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java 反射
阅读量:5927 次
发布时间:2019-06-19

本文共 1858 字,大约阅读时间需要 6 分钟。

一:

反射的定义:在运行期载入,探知和使用编译期完全未知的类。

1 查看类信息

反射机制里一个特点就是实例化Class对象,因为任意一个类对象都是Class的实例...那么如何实例化Class对象呢?三种方法:

常用的;

 1:  Class c = Class.forName("全限定类名");

全限定类名:包名.类名

2:对象.getClass();

3:类.class;

 

在Class类中 有三个常用的类Field,Method,Constructor类

得到的是Class类public的的属性,方法,构造器:getFields(),getMethods(),getConstructors().

得到的是Class所包含的类的所有属性,方法,构造器:getDeclaredFields(),getDeclaredMethods(),getDeclaredConstructors().

2 创建对象

eg:

a           : Object object = c.newInstance();//调用无参构造器创建对象

b           :通过getConstructor()方法得到指定的构造器,再用指定的构造器创建对象的实例

eg:  Constructor cons = c.getConstructor(Class<?>...parameterType); 参数列表

        Object object = cons.newInstance(传入实参);

3 调用方法

首先导入  import java.lang.reflect.Method;

eg:         Method method = c.getMethod( name,<?>... parameterTypes);

        method.invoke(Object  obj,Object ...args);// 调用底层方法对象,用于方法调用的参数

4 获取字段

首先导入  import java.lang.reflect.Field;

eg:     Field[] field = c.getDeclaredFields(); 

            for (Field fi : field) {//遍历

                  System.out.println(fi);

}

 

5  获取方法   访问修饰符  返回类型  方法名 (参数类型)

首先导入           import java.lang.reflect.Method;

                import java.lang.reflect.Modifier;

             

  eg:       

Method[] methods = c.getDeclaredMethods();

             for (Method method : methods) {
         System.out.print(Modifier.toString(method.getModifiers()) + " "+ method.getReturnType().getCanonicalName() + " "+ method.getName() + "(");

                             //method.getModifiers()这个返回的int,所有用Modifier.toString转换成字符串类型的

            Class[] types = method.getParameterTypes();
                           int len = types.length;
                        for (int i = 0; i < len; i++) {
                          System.out.print(types[i].getName());
                            if (i != len - 1)
                         System.out.print(",");
                               }
                         System.out.println(")");
                 }

6 获取构造器

首先要导入  import java.lang.reflect.Constructor;

 其实与获取方法的差不多。

  Constructor[] constructor = c.getDeclaredConstructors();

二:垃圾回收 

三:类加载器

  主要包括: 根类加载器(核心Java类)    ;   扩展加载器(Javax);         系统加载器(运行时加载);

类加载的过程: 加载  连接(验证,准备,解析)  初始化

四:如果你写了一些方法,没有导入包的话,就会报错(这是一定的),当你把鼠标移到错误的地方,就会显示一个框,然后点击你所需要的包就可以了。

 

转载于:https://www.cnblogs.com/hellokitty1/p/4436396.html

你可能感兴趣的文章
[改善Java代码]Java的泛型是类型擦除的
查看>>
Adding Search
查看>>
独家分享——大牛教你如何学习Web前端开发
查看>>
教程:如何手动安装Xamarin与Xamarin for VisualStudio
查看>>
linux tar.gz
查看>>
ArcGIS for Desktop入门教程_第七章_使用ArcGIS进行空间分析 - ArcGIS知乎-新一代ArcGIS问答社区...
查看>>
MHA在线切换过程
查看>>
Oracle logmnr工具分析日志脚本
查看>>
Atitit.api参数传递的设计
查看>>
picasso-强大的Android图片下载缓存库
查看>>
C# chart控件绘制曲线
查看>>
servlet中请求转发(forword)与重定向(sendredirect)的区别
查看>>
微信禁用右上角的分享按钮,WeixinJSBridge API以及隐藏分享的子按钮等菜单项
查看>>
多终端数据同步机制设计(二)
查看>>
史上最全最强SpringMVC详细示例实战教程【good】
查看>>
realloc,malloc,calloc函数的区别
查看>>
设计模式(二)代理模式
查看>>
基于ThinkPHP框架的简单的后台管理系统
查看>>
php页面防重复提交方法总结
查看>>
【linux】监控磁盘情况并自动删除备份文件
查看>>