Java 学习笔记 反射与迭代器
反射
使用反射获得Class类
Class cls = Class.forName("全类名") //包括包名
Class cls = xx.Class;//xx代表类名
Class cls = 对象.getClass();
使用反射获得构造方法
有个构造方法如:
public Book(String bookName, String author,double price) {
this.bookName = bookName;
this.author = author;
this.price = ((int) price);
}
在使用反射来获得的构造方法的时候需要与构造方法中的参数类型进行对应
Constructor declaredConstructor = cls.getDeclaredConstructor(String.class, String.class, double.class);
//或者使用包装类的静态常量TYPE,表示的是该包装类的基本类型
Constructor declaredConstructor = cls.getDeclaredConstructor(String.class, String.class, Double.TYPE);
使用反射获得一个对象实例
例如
Student student = cls.newInstance();
使用反射获得属性名(字段名,成员变量名)
以下的方法都是返回Field数组
- getDeclaredFields()
返回所有的字段名,但不包括继承的属性名(字段名,成员变量名) - getFields()
返回所有的字段名,包括继承的属性名(字段名,成员变量名)
使用反射获得方法
以下两种方法均是返回一个Method数组
- cls.getMethods()
包括继承的方法 - cls.getDeclaredMethods()
不包括继承的方法 - cls.getMethod(String name,parameterTypes)
返回指定方法名的Method,name为方法名,后面参数为该方法的参数列表,参数列表记得按照顺序
获得类中某个方法的返回类型
- method.getReturnType()
返回该方法的返回类型,是一个Class对象(返回类型对应的class)
//如
public String hello(){
...
};
method.getReturnType();//返回的就是java.lang.String
- method.getGenericReturnType()
返回的是一个Type类对象
使用反射调用方法
- method.invoke(Object o...)
Object是参数列表
获得类中getXxx方法并调用
获得所有的字段名,根据字段名拼接成正确的getXxx方法名,之后获得指定方法名的Method,之后调用即可
Student student = new Student();
Class<? extends Student> c1 = student.getClass();
Field[] declaredFields = c1.getDeclaredFields();
for (Field declaredField : declaredFields) {
String name = declaredField.getName();
//使用IDEA生成的set/get方法都是遵循驼峰命名法,我们的命名也得按照驼峰命名法
//这样,我们只需要把第一个单词的开头字母转为大写的字母即可获得正确的方法名,之后调用即可
String a = name.substring(0, 1).toUpperCase();//首字母大写
String b = name.substring(1);//截取剩余的字符串
Method method = c1.getMethod("get" + a+b);//拼接,并查找匹配的方法
method.invoke();
}
list 迭代器
listiterator和iterator
listiterator继承iterator,是iterator的增强版
listiterator可以双端遍历,通过list.listIterator()方法返回,方法中可以带一个指定下标的数,比iterator要方便
如果想要从末尾向前找,可以定义迭代器的开始为list的末尾,之后往前查找
ListIterator listIteratorlists.listIterator(lists.size());
while (listIterator.hasPrevious()) {
System.out.println(listIterator.previous());
}
Java 学习笔记 反射与迭代器的更多相关文章
- Java学习笔记--反射
什么是Java反射 概念 java反射是指java能够在运行时确定类的类型信息,包括其方法.字段.构造函数等,并能够通过反射调用类或者类对象的方法.在Java中,java.lang.Class类与ja ...
- 0034 Java学习笔记-反射-初步2-操作对象
通过反射创建对象 通过反射创建对象有两种方式,一种通过Class对象的newInstance()方法,一种是获取到Class对象的Constructor后,再调用newInstance()方法,前者要 ...
- 0033 Java学习笔记-反射-初步1
先看看通过反射能干嘛 示例:修改对象的private实例变量 package testpack; import java.lang.reflect.Field; public class Test1 ...
- Java学习笔记--反射API
反射API 1.反射API的介绍 通过反射API可以获取Java程序在运行时刻的内部结构.比如Java类中包含的构造方法.域和方法等元素,并可以与这些元素进行交换. 按照 一般地面向对象的设计 ...
- java学习笔记21(迭代器)
java中有很多集合,内部有各种的存储的方法,取出的方法也各不相同,那么有没有一种通用的方法来取出来呢? java提供的遍历集合元素的方法有两种: 1.for-each结构(增强型for循环) 格式: ...
- JAVA 学习笔记 - 反射机制
1. JAVA反射机制的概念 2. 怎样实例化一个 Class对象 Class.forName(包名.类名); 对象.getClass(); 类.class; ================== ...
- Java学习笔记——反射
反射就是把Java类中的各种成分映射成相应的java类. Class类-->java程序中的各个java类属于同一事物,描述这类事物的Java类名就是Class. Class.forName的作 ...
- Java学习笔记-反射机制
Java反射机制实在运行状态时,对于任意一个类,都能够知道这个类的属性和方法,对于任意一个对象,都能够调用他的任意一个属性和方法 获取Class对象的三种方式 Object类中的getClass()方 ...
- 0035 Java学习笔记-注解
什么是注解 注解可以看作类的第6大要素(成员变量.构造器.方法.代码块.内部类) 注解有点像修饰符,可以修饰一些程序要素:类.接口.变量.方法.局部变量等等 注解要和对应的配套工具(APT:Annot ...
随机推荐
- Python之旅Day15 Bootstrap与Django初识
Bootstrap初识 Bootstrap简介 Bootstrap 是最受欢迎的 HTML.CSS 和 JS 框架,用于开发响应式布局.移动设备优先的 WEB 项目.(官网http://www.boo ...
- Android-Java-普通类与抽象类(覆盖)&方法重载
覆盖都是子类与父类之间 & 接口与实现类之间 才会产生:覆盖 有很多名称,覆盖,复写,重写 都是一个意思: 注意:重载都是方法之间 方法同名 不同参数,就属于重载: 普通类-覆盖: 描述An ...
- Akka-CQRS(6)- read-side
前面我们全面介绍了在akka-cluster环境下实现的CQRS写端write-side.简单来说就是把发生事件描述作为对象严格按发生时间顺序写入数据库.这些事件对象一般是按照二进制binary方式如 ...
- 如何推翻JAVA的统治地位?
“java越来越过份了.”php狠狠的说,他转头看着C:“C哥,您可是前辈,java最近砸了我不少场子,您老再不出来管管,我怕他眼里就没有您了啊.” C哥吸烟,慢慢的说:“年轻人不要着急,java的根 ...
- Java核心技术卷一基础知识-第12章-泛型程序设计-读书笔记
第12章 泛型程序设计 本章内容: * 为什么要使用泛型程序设计 * 定义简单泛型类 * 泛型方法 * 类型变量的限定 * 泛型代码和虚拟机 * 约束与局限性 * 泛型类型的继承规则 * 通配符类型 ...
- Emmet/Zen Coding 快速入门说明
快速参考 以下是支持的特性: ele creates an HTML element tag 展开一个HTML元素标签 # creates an id attribute 作用于元素标签,展开一个id ...
- 【云服务器部署】---Linux下安装MySQL
[云服务器部署]---Linux下安装MySQL 有关如何阿里云ECS建网站,推荐一片文章,我是是通过这篇文章安装tomcat和jdk的 网址:阿里云ECS建网站(建站)超详细全套完整图文教程! 注意 ...
- Js中处理日期加减天数
Js的处理日期还是很方便的. 一. 格式化日期为2017-07-04的格式 function formatTime(date) { var year = date.getFullYear(); var ...
- 【EF6学习笔记】(十)处理并发
本篇原文链接:Handling Concurrency Concurrency Conflicts 并发冲突 发生并发冲突很简单,一个用户点开一条数据进行编辑,另外一个用户同时也点开这条数据进行编辑, ...
- MHA+ProxySQL实现读写分离高可用
最近在研究ProxySQL,觉得还挺不错的,所以就简单的折腾了一下,ProxySQL目前也是Percona在推荐的一个读写分离的中间件.关于详细的介绍可以参考官方文档.https://github.c ...