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 ...
随机推荐
- win10 win7 环境下 oracle 11g和Plsql的安装、卸载遇到的问题。
* win7一体机在安装好oracle和PlSQL后,无法连接到orcl数据库,同时也忘记了sys设置的密码.(在这里应注意在安装过程中,应选择统一口令,这里我均设置成了orcl,同时也应该注意在最后 ...
- 插入排序之Java实现
插入排序类似于大多数人安排扑克牌的方式. 1.从你手中的一张牌开始, 2.选择下一张卡并将其插入到正确的排序顺序中, 3.对所有的卡重复上一步. /** * * 代码理解:只需要记住两点: * 1.当 ...
- [转]Rapidly detecting large flows, sFlow vs. NetFlow/IPFIX
Figure 1: Low latency software defined networking control loop The articles SDN and delay and Delay ...
- Java并发编程:Synchronized底层优化(偏向锁、轻量级锁)
Java并发编程系列: Java 并发编程:核心理论 Java并发编程:Synchronized及其实现原理 Java并发编程:Synchronized底层优化(轻量级锁.偏向锁) Java 并发编程 ...
- TempData ViewBag ViewData区别
在这篇<MVC 5使用TempData Object跨视图传递数据>https://www.cnblogs.com/insus/p/3378016.html中,已经在评论回复网友:网上查找 ...
- 超实用的 Nginx 极简教程,覆盖了常用场景
概述 什么是 Nginx? Nginx (engine x) 是一款轻量级的 Web 服务器 .反向代理服务器及电子邮件(IMAP/POP3)代理服务器. 什么是反向代理? 反向代理(Reverse ...
- [Postman]历史(8)
邮递员将您发送的所有请求存储在左侧边栏的“历史记录”视图中.您可以使用历史记录快速尝试各种请求,而不必浪费时间从头开始构建请求.您还可以通过单击请求名称来加载先前的请求. 如果您创建了一个帐户并登录P ...
- java并发机制锁的类型和实现
synchronized 和 volatile,是最基础的两个锁! volatile是轻量级锁,它在多核处理器开发中保证了共享变量的可见性.即当一个线程修改一个共享变量时,其他线程能够读到这个修改的值 ...
- MySQL 非空约束位置不同对自增列造成的影响
MySQL版本 select version(); +------------+ | version() | +------------+ | 5.7.21-log | +------------+ ...
- Aseprite入门:第一个gif动图
前言:Aseprite入门教程 1.新建图片: 选择新建文件,然后选定宽高和颜色及背景类型,点击OK进行图片的创建: 2.绘制一个基础图形,为了方便还是选用球形: 填充上颜色: 美化(添加阴影增加小球 ...