当前位置: 首页 > news >正文

java 反射

一:

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

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(String name,Class<?>... 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

相关文章:

  • MSF溢出实战教程
  • 虚拟机的使用和Linux的一些基础
  • 了解IP子网划分的那些事
  • 海量数据备份归档技术及系统
  • 开源跳板机(堡垒机)Jumpserver v0.2.0 部署篇
  • ​ubuntu下安装kvm虚拟机
  • 软件工程结队项目——智能点餐系统典型用户及用户场景分析
  • dotTrace 6.1帮你理解SQL查询如何影响应用性能
  • 开始python学习了
  • 用php获取本周,上周,本月,上月,本季度日期的代码,方法得到各种日期。
  • 课堂练习-找水桶(4.24)
  • gitolite 向 gitlab 迁移
  • 推荐搜索引擎及搜索技巧
  • AWK 学习笔记
  • Java中List的排序和List的MAp
  • 【前端学习】-粗谈选择器
  • javascript 哈希表
  • MobX
  • PHP面试之三:MySQL数据库
  • Spark VS Hadoop:两大大数据分析系统深度解读
  • VirtualBox 安装过程中出现 Running VMs found 错误的解决过程
  • vue中实现单选
  • webpack入门学习手记(二)
  • 程序员最讨厌的9句话,你可有补充?
  • 动手做个聊天室,前端工程师百无聊赖的人生
  • 使用Swoole加速Laravel(正式环境中)
  • 双管齐下,VMware的容器新战略
  • 通过来模仿稀土掘金个人页面的布局来学习使用CoordinatorLayout
  • 职业生涯 一个六年开发经验的女程序员的心声。
  • NLPIR智能语义技术让大数据挖掘更简单
  • 资深实践篇 | 基于Kubernetes 1.61的Kubernetes Scheduler 调度详解 ...
  • #13 yum、编译安装与sed命令的使用
  • #AngularJS#$sce.trustAsResourceUrl
  • $.type 怎么精确判断对象类型的 --(源码学习2)
  • (27)4.8 习题课
  • (c语言)strcpy函数用法
  • (PyTorch)TCN和RNN/LSTM/GRU结合实现时间序列预测
  • (Redis使用系列) Springboot 整合Redisson 实现分布式锁 七
  • (八)光盘的挂载与解挂、挂载CentOS镜像、rpm安装软件详细学习笔记
  • (博弈 sg入门)kiki's game -- hdu -- 2147
  • (南京观海微电子)——I3C协议介绍
  • (一)SpringBoot3---尚硅谷总结
  • (已解决)vue+element-ui实现个人中心,仿照原神
  • .NET Core实战项目之CMS 第十二章 开发篇-Dapper封装CURD及仓储代码生成器实现
  • .net 托管代码与非托管代码
  • .net连接MySQL的方法
  • .Net中的设计模式——Factory Method模式
  • .Net组件程序设计之线程、并发管理(一)
  • ;号自动换行
  • [20180129]bash显示path环境变量.txt
  • [bzoj1901]: Zju2112 Dynamic Rankings
  • [codevs] 1029 遍历问题
  • [emuch.net]MatrixComputations(7-12)
  • [excel与dict] python 读取excel内容并放入字典、将字典内容写入 excel文件
  • [IE9] IE9 beta版下载链接