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. 在学习反射和注解前, ...
随机推荐
- Tomcat 7 的七大新特性(更容易将Tomcat内嵌到应用去中去 )
Tomcat的7引入了许多新功能,并对现有功能进行了增强.很多文章列出了Tomcat 7的新功能,但大多数并没有详细解释它们,或指出它们的不足,或提供代码示例.本文将明确描述TOMCAT 7中七个最显 ...
- PHP方便快捷的将二维数组中元素的某一列值抽离出来作为此二维数组内元素的key
得益于PHP的强大的内置数组函数array_column();array_combine(); 举个小栗子: <?php // 先查询出用户的基本信息 $userArray = [['id' = ...
- 【python】smtp邮件发送
纯文本: #!/usr/bin/env python3 #coding: utf-8 import smtplib from email.mime.text import MIMEText from ...
- ExtJs 扩展类CheckColumn的使用(事件触发)
[javascript] view plain copy print? 使用 Extjs 在进行数据库编程经常会遇到 checkbox 的问题(奇怪网上却没有此类文章不知道其他人是怎么解决的,在此贴上 ...
- 引用变量类型的加载顺序(类名+引用名=new +类名();)
程序如下: 运行结果如下: 以上结果说明:同一个引用名称(可以把它当做变量的一种类型)可能指代不同的对象,依据同一个引用是否处于同一个初始化的层次,决定是否在完成: static Cup c1=new ...
- solr统计只返回10或者100个数据的解决办法
因为我所在的公司为政府做的项目[风险管理系统],其中涉及大量的统计展示,多数以整个市的区划,行业部门等方式返回,在昨天,我发现听过填报单位的方式返回时,始终只有100个数据.通过对比发现,在前辈的代码 ...
- Python开发一个WEB聊天室
项目实战:开发一个WEB聊天室 功能需求: 用户可以与好友一对一聊天 可以搜索.添加某人为好友 用户可以搜索和添加群 每个群有管理员可以审批用户的加群请求,群管理员可以用多个,群管理员可以删除.添加. ...
- selenium webdriver——JS操作日历控件
一般的日期控件都是input标签下弹出来的,如果使用webdriver 去设置日期, 1. 定位到该input 2. 使用sendKeys 方法 比如 但是,有的日期控件是readonly的 比如12 ...
- Rhythmk 一步一步学 JAVA (18): Enum枚举学习
枚举定义: public enum SizeEnum { SMALL, BIG, BIGEST }; public enum SizeStringEnum { SMALL("小") ...
- 横向文本框 cursor:pointer 出现手型
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...