Java 高级基础——反射
Java 高级基础——反射
反射的意义:Java 强类型语言,但是我们在运行时有了解、修改信息的需求,包括类信息、成员信息以及数组信息。
基本类型与引用类型
基本类型,(固定的 8 种)
整数:byte, short, int, long
小数:float, double
字符:char
布尔值:boolean
引用类型
所有的引用类型都继承自 java.lang.Object
类,枚举,数组,接口都是引用类型
java.io.Serializable 接口,基本类型的包装类(比如 java.lang.Double)也是引用类型
获得class对象的三种方式
- 调用Object类的getClass()方法来得到Class对象,该方法用于返回调用该方法的对象的所属类关联的Class对象。
MyObject x;
Class c1 = x.getClass();
- 使用Class类的中静态forName()方法获得与字符串对应的Class对象。
Class c2=Class.forName("MyObject")
- 如果T是一个Java类型,那么T.class就代表了匹配的类对象。例如
Class cl1 = Manager.class;
Class cl2 = int.class;
Class cl3 = Double[].class;
Class类的常用方法
一个 Class 可以被以下修饰符的一种或者多种修饰:
访问权限控制符:public, protected, private
抽象的、需要实现的:abstract
限制只能有一个实例的:static
不允许修改的:final
线程同步锁:synchronized
原生函数:native
采用严格的浮点精度:strictfp
接口
注解
- getName()
一个Class对象描述了一个特定类的属性,Class类中最常用的方法getName以 String 的形式返回此 Class 对象所表示的实体(类、接口、数组类、基本类型或 void)名称。 - newInstance()
创建对象实例,newInstance()方法调用默认构造器(无参数构造器)初始化新建对象。 - getClassLoader()
返回该类的类加载器。 - getSuperclass()
返回表示此 Class 所表示的实体(类、接口、基本类型或 void)的超类的 Class。 - isArray()
判定此 Class 对象是否表示一个数组类。 - getMethod()
根据方法名称和参数类型获取方法,String name, Class<?>... parameterTypes,方法参数可能有一个也可能有多个,由于java具有重载的特性,一个类中可能同时存在多个同名方法,所以参数类型必须指定。该方法可以获得类的公有方法,包括自身的所有public方法,和从基类继承的、从接口实现的所有public方法。 - getDeclaredMethod()
获取的是类自身声明的所有方法,包含public、protected和private方法。
method用法
方法可以被以下修饰符修饰:
访问权限控制符:public, protected, private
限制只能有一个实例的:static
不允许修改的:final
抽象,要求子类重写:abstract
预防重入的同步锁:synchronized
用其他语言实现的方法:native
严格的浮点型强度:strictfp
注解
- method.invoke()
用于执行方法,参数Object obj, Object... args,第一个是调用的对象,第二个是方法需要传入的参数,参数按顺序传入。 - getAnnotatedReturnType()
方法返回目标方法的返回类型的Type对象。如果目标方法被声明为返回void,则该方法返回void.class。 - getGenericParameterTypes()
该方法返回目标方法所有参数类型的Type对象数组,这些Type对象将按照参数的声明顺序存储于在数组中。如果目标方法没有任何参数,则该方法返回一个空数组。 - getParameters()
获取方法参数名称
Field用法
- getType()
返回变量的类型 - getDeclaredField()
获取变量的值,此方法可以获得私有变量。注意:射获取或者修改一个变量的值时,编译器不会进行自动装/拆箱。 - getField()
获得公有public变量
Java 可变参数方法
public void testVarargs(String... strings){
//...
}
创建时必须放在方法尾部,即一个方法只能有一个可变数组参数
调用时可以传入一个数组:
testVarargs(new String[]{"shixin","zhang"});
也可以分别传入多个参数:
testVarargs("shixin","zhang");
Java 高级基础——反射的更多相关文章
- Java高级特性——反射机制(第二篇)
在Java高级特性——反射机制(第一篇)中,写了很多反射的实例,可能对于Class的了解还是有点迷糊,那么我们试着从内存角度去分析一下. Java内存 从上图可以看出,Java将内存分为堆.栈.方法区 ...
- Java高级特性——反射机制(第三篇)
获取类运行时的结构 通过反射获取运行时类的完整结构 Field.Method.Constructor.Superclass.Interface.Annotation >实现的全部接口 >所 ...
- Java高级特性——反射
感谢原文作者:peter_RD_nj 原文链接:https://www.jianshu.com/p/9be58ee20dee 注意:同一个类在JVM中只存在一份字节码对象 概述 定义 JAVA反射机制 ...
- java高级——暴力反射
反射,java中一个比较高级的应用,主要和开发中的框架紧密相连.今天我们就介绍一下他的特性之一,暴力反射.(听名字很恐怖呦) package wo; public class A{ public St ...
- Java框架基础——反射(reflect)
一.Class类的使用 1)在面向对象(oop)的世界里,万事万物皆对象. 在Java中,包括基本的数据类型,都是对象. Class c = int.class;//int 的类类型 那就是说: 类是 ...
- Java高级特性—反射和动态代理
1).反射 通过反射的方式可以获取class对象中的属性.方法.构造函数等,一下是实例: 2).动态代理 使用场景: 在之前的代码调用阶段,我们用action调用service的方法实现业务即可. 由 ...
- Java编程基础-反射
一.java反射 1.反射:动态获取类的信息,以及动态调用对象的方法的功能.可以理解为动态看透类的能力. 2.主要功能:在运行时判断任意一个对象所属的类:在运行时构造任意一个类的对象:在运行时判断任意 ...
- JAVA高级特性反射和注解
反射: 枚举反射泛型注解.html34.3 KB 反射, 主要是指通过类加载, 动态的访问, 检测和修改类本身状态或行为的一种能力, 并能根据自身行为的状态和结果, 调整或修改应用所描述行为的状态和相 ...
- Java高级特性——反射机制(完结)——反射与注解
按照我们的学习进度,在前边我们讲过什么是注解以及注解如何定义,如果忘了,可以先回顾一下https://www.cnblogs.com/hgqin/p/13462051.html. 在学习反射和注解前, ...
随机推荐
- RHEL6安装Oracle 11g R2
收藏PDF版质料请点这里:http://download.csdn.net/detail/jifeng3518/6464999 1.使用DVD做yum源1.1.新建dvd挂载目录[root@oracl ...
- [C++ Primer] 第8章: IO库
IO类 iostream定义了读写流的基本类型 istream, wistream 从流读取数据 ostream, wostream 向流写入数据 iostream, wiostream 读写流 fs ...
- 操作数据类m
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threa ...
- Bootstrap-CL:导航栏
ylbtech-Bootstrap-CL:导航栏 1.返回顶部 1. Bootstrap 导航栏 导航栏是一个很好的功能,是 Bootstrap 网站的一个突出特点.导航栏在您的应用或网站中作为导航页 ...
- git grade 版本下载及安装
Git 2.11.1x64下载 gradle各版本下载地址 1. Git安装与配置 Gradle 用法总结
- Oracle中 HWM与数据库性能的探讨
链接:http://www.eygle.com/archives/2011/11/oracle_hwm_tuning.html 本文讨论的是oracle中关于table的HWM的内容,主要包括这样几个 ...
- 各种装饰器demo及优化
#!/usr/bin/python3# -*- coding: utf-8 -*-# @Time : 2018/5/28 14:06# @File : lianxi.py ## impor ...
- sonar link 的安装与使用
参考来源:https://jingyan.baidu.com/article/2a1383289bea98074a134ff6.html 工具/原料 版本要求Eclipse(4.2,3.8)以上, ...
- js格式化时间 js格式化时间戳
一个js格式化时间和js格式化时间戳的例子. 代码:/** * 时间对象的格式化; */Date.prototype.format = function(format) { /* * eg:forma ...
- Spring Data JPA 基本使用
Spring Data 简化开发,支持Nosql和关系型数据库, DEMO https://github.com/easonstudy/boot-demo/tree/master/boot-sprin ...