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 ...
随机推荐
- 《高质量C++&C 编程指南》学习笔记
这本电子书是在国科大上课时候,老师在课件资源里边提供的.之所以会重视这个文件,是因为本科时候,有个老师提到过:那个学生遍的代码很整齐,看起来让人舒服,我就知道工大留不下他.因此,我就格外注意这件事,但 ...
- 写在HTTP协议之前
1.网络模型 OSI模型即:开放系统互连参考模型(Open System Interconnect 简称OSI)是国际标准化组织(ISO)和国际电报电话咨询委员会(CCITT)联合制定的开放系统互连参 ...
- 64位平台C/C++容易犯的错误
64位平台的介绍 IA-64 is a 64-bit microprocessor architecture developed by Intel and Hewlett Packard compa ...
- 通过脚本下载GO被墙或常用的相关包
脚本描述 脚本依赖环境:Windows,GO,GIT 脚本将创建 temp 目录,并拷贝相关包到第一个 GOPATH 中 可将脚本保存到本地自行添加被墙或者常用的包 完整脚本代码 @echo off ...
- PHP LDAP 目录协议函数库
在 LDAP 的协议之中,很像硬盘目录结构或倒过来的树状结构.LDAP 的根就是全世界,第一级是属于国别 (countries) 性质的层级,之后可能会有公司 (organization) 的层级,接 ...
- [Postman]代理(16)
代理服务器充当内部网络和Internet之间的安全屏障,使Internet上的其他人无法访问内部网络上的信息. 什么是代理? 在基本网络中,客户端向服务器发出请求,服务器发回响应. 代理服务器是充当计 ...
- hbase概念解析
hbase是一种nosql数据库.是一个高可靠,高性能,面向列,可伸缩,实时读取的分布式数据库. hbase一般由行键,时间戳,列族,列,表格单元,行组成. 行一般由一个行键和一个或多个具有关联关系值 ...
- 记录python题
def mone_sorted(itera): new_itera = [] while itera: min_value = min(itera) new_itera.append(min_valu ...
- 本地语音识别开源软件pocketsphinx调试总结
1问题一: fatal error: pocketsphinx.h: No such file or directory 解决方法: $ cd /usr/include $ sudo ln -s /m ...
- android自动化必备之界面元素
包名&类名 packageName(包名) 应用的身份标识,系统通过包名识别不同的应用,如两个相同包名的应用在安装时候会覆盖 activityName(类名) Activity:android ...