反射

使用反射获得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 学习笔记 反射与迭代器的更多相关文章

  1. Java学习笔记--反射

    什么是Java反射 概念 java反射是指java能够在运行时确定类的类型信息,包括其方法.字段.构造函数等,并能够通过反射调用类或者类对象的方法.在Java中,java.lang.Class类与ja ...

  2. 0034 Java学习笔记-反射-初步2-操作对象

    通过反射创建对象 通过反射创建对象有两种方式,一种通过Class对象的newInstance()方法,一种是获取到Class对象的Constructor后,再调用newInstance()方法,前者要 ...

  3. 0033 Java学习笔记-反射-初步1

    先看看通过反射能干嘛 示例:修改对象的private实例变量 package testpack; import java.lang.reflect.Field; public class Test1 ...

  4. Java学习笔记--反射API

    反射API 1.反射API的介绍 通过反射API可以获取Java程序在运行时刻的内部结构.比如Java类中包含的构造方法.域和方法等元素,并可以与这些元素进行交换.     按照 一般地面向对象的设计 ...

  5. java学习笔记21(迭代器)

    java中有很多集合,内部有各种的存储的方法,取出的方法也各不相同,那么有没有一种通用的方法来取出来呢? java提供的遍历集合元素的方法有两种: 1.for-each结构(增强型for循环) 格式: ...

  6. JAVA 学习笔记 - 反射机制

    1.   JAVA反射机制的概念 2. 怎样实例化一个 Class对象 Class.forName(包名.类名); 对象.getClass(); 类.class; ================== ...

  7. Java学习笔记——反射

    反射就是把Java类中的各种成分映射成相应的java类. Class类-->java程序中的各个java类属于同一事物,描述这类事物的Java类名就是Class. Class.forName的作 ...

  8. Java学习笔记-反射机制

    Java反射机制实在运行状态时,对于任意一个类,都能够知道这个类的属性和方法,对于任意一个对象,都能够调用他的任意一个属性和方法 获取Class对象的三种方式 Object类中的getClass()方 ...

  9. 0035 Java学习笔记-注解

    什么是注解 注解可以看作类的第6大要素(成员变量.构造器.方法.代码块.内部类) 注解有点像修饰符,可以修饰一些程序要素:类.接口.变量.方法.局部变量等等 注解要和对应的配套工具(APT:Annot ...

随机推荐

  1. Senparc.Weixin.MP SDK 微信公众平台开发教程(十九):MessageHandler 的未知类型消息处理

    这是<微信开发深度解析:微信公众号.小程序高效开发秘籍>出版之后写的第一篇微信相关的文章.从这一篇开始,将介绍第一版出版之后添加或修改的功能,或者对书上内容需要做的补充. MP v14.8 ...

  2. [转]kaldi 神经网络

    转自:http://blog.csdn.net/xmdxcsj/article/details/54695506 overview type author CPU/GPU feature nnet1 ...

  3. 【sql注入教程】SQL注入是什么?我们如何去玩转它

    [sql注入教程]SQL注入是什么?我们如何去玩转它 本文转自:i春秋社区   SQL注入攻击是黑客攻击数据库最常见手段之一.简单讲,SQL注入攻击是黑客利用网站程序漏洞,通过提交精心构造的SQL语句 ...

  4. Spark机器学习(上)

    1.机器学习概念 1.1 机器学习的定义 在维基百科上对机器学习提出以下几种定义: l“机器学习是一门人工智能的科学,该领域的主要研究对象是人工智能,特别是如何在经验学习中改善具体算法的性能”. l“ ...

  5. 如何解决微信小程序界面适配问题-引用-生命周期回调函数-优化机制-样式引入

    如何解决微信小程序界面适配问题 .wxss page{ height: 100%; width:750rpx; } this.setData({ imageWidth: wx.getSystemInf ...

  6. Kali学习笔记12:服务扫描

    关于什么是服务扫描不多介绍,通俗来看: 我已经扫描到目标机器某个端口开放,接下来我需要知道开放这个端口的是什么应用 情景: 我的Kali机器IP地址:192.168.22.130 我要扫描的Metas ...

  7. 一篇文章读懂HTTPS及其背后的加密原理

    HTTPS(全称: Hypertext Transfer Protocol Secure,超文本传输安全协议),是以安全为目标的HTTP通道,简单讲是HTTP的安全版.本文,就来深入介绍下其原理. 1 ...

  8. PyTorch-Adam优化算法原理,公式,应用

    概念:Adam 是一种可以替代传统随机梯度下降过程的一阶优化算法,它能基于训练数据迭代地更新神经网络权重.Adam 最开始是由 OpenAI 的 Diederik Kingma 和多伦多大学的 Jim ...

  9. Spring Boot 返回 XML 数据,一分钟搞定!

    Spring Boot 返回 XML 数据,前提必须已经搭建了 Spring Boot 项目,所以这一块代码就不贴了,可以点击查看之前分享的 Spring Boot 返回 JSON 数据,一分钟搞定! ...

  10. Spring Boot 最核心的 3 个注解详解

    最近面试一些 Java 开发者,他们其中有些在公司实际用过 Spring Boot, 有些是自己兴趣爱好在业余自己学习过.然而,当我问他们 Spring Boot 最核心的 3 个注解是什么,令我失望 ...