定义Student 类:包含:姓名和年龄等属性,有参和无参构造方法,输出所有信息的方法

1.使用多种方法生成一个Student类的Class对象
2.使用Class类获取Student类的结构信息并输出
3.通过有参(无参)构造方法动态创建Student类的对象
4.使用反射修改和查询Student类的姓名属性
5.使用反射动态执行Student类输出信息的方法


代码:

Student类

package 敲代码;
//定义Student 类,包含:姓名和年龄等属性,有参和无参构造方法,输出所有信息的方法public class Student {private String name;private int age;private String sex;@Overridepublic String toString() {return "Student [name=" + name + ", age=" + age + ", sex=" + sex + "]";}public Student(){}public Student(String name,int age,String sex){this.name=name;this.age=age;this.sex=sex;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}public void eat(){System.out.println("eat apple!");}private void run(){System.out.println("run and listen to music!");}public static void play(){System.out.println("play game");}}

测试类:

package 敲代码;import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;public class Test {public static void main(String[] args) {//1.获取类对象//firstStudent student=new Student();Class clazz=student.getClass();System.out.println(clazz.hashCode());//secondClass clazz2=Student.class;System.out.println(clazz2.hashCode());//thirdtry {Class clazz3=Class.forName("敲代码.Student");System.out.println(clazz3.hashCode());} catch (ClassNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();}//2.使用Class类获取Student类的结构信息并输出try {//构造方法Constructor[] constructors=clazz.getDeclaredConstructors();for (Constructor constructor2 : constructors) {System.out.println(constructor2);}//获取方法对象Method[] methods=clazz.getDeclaredMethods();for (Method method : methods) {System.out.println(method);}//获取属性Field[] fields=clazz.getDeclaredFields();for (Field field : fields) {System.out.println(field);}} catch (SecurityException e) {// TODO Auto-generated catch blocke.printStackTrace();}//3.通过有参(无参)构造方法动态创建Student类的对象try {Constructor<Student> constructor=clazz2.getConstructor(String.class,int.class,String.class);Student student2=constructor.newInstance("张三",18,"张三");System.out.println(student2);//4.使用反射修改和查询Student类的姓名属性student2.setName("李四");System.out.println(student2.getName());//5.使用反射动态执行Student类输出信息的方法Method method=clazz.getMethod("eat", null);method.invoke(student, null);} catch (NoSuchMethodException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (SecurityException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (InstantiationException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IllegalAccessException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IllegalArgumentException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (InvocationTargetException e) {// TODO Auto-generated catch blocke.printStackTrace();}   }
}

运行结果:


Java之反射--练习相关推荐

  1. 【Java】反射( reflection)机制 详解

    目录 1. 定义 2. 用途(了解即可) 3. 反射的基本信息 4. 反射相关的类(重要) 4.1 Class类(反射机制的起源 ) 4.2 Class类中的相关方法(方法的使用方法在后边的示例当中) ...

  2. java 泛型反射_Java使用反射来获取泛型信息示例

    本文实例讲述了Java使用反射来获取泛型信息.分享给大家供大家参考,具体如下: 一 点睛 获得了Field对象后,就可以很容易地获得该Field的数据类型,即使用如下代码即可获得指定Field的类型: ...

  3. java初反射_初始 java 反射机制 (一)

    反射机制详解 JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为j ...

  4. Java中反射的三种常用方式

    Java中反射的三种常用方式 package com.xiaohao.test; public class Test{ public static void main(String[] args) t ...

  5. Java的反射机制 工厂模式综合讲解【转载自51CTO】

    2019独角兽企业重金招聘Python工程师标准>>> Java的反射机制 工厂模式综合讲解 1.什么叫反射 Java.lang.reflect包下 正常情况下我们可以通过类实例化一 ...

  6. java反射机制(三)---java的反射和代理实现IOC模式 模拟spring

    IOC(Inverse of Control)可翻译为"控制反转",但大多数人都习惯将它称为"依赖注入".在Spring中,通过IOC可以将实现类.参数信息等配 ...

  7. [Java基础] 反射机制汇总

    引言 初学Java反射机制的时候,只是感觉很神奇,但是不知道学了该怎么用,所以过了一段时间就忘得差不多了:最近接触到了框架,在学习中遇到了反射,深深体会到了反射机制的神奇,回来复习了一下反射机制,写一 ...

  8. Java 利用反射实现C#的委托

    一, 观察者模式的缺点 在之前的博文的介绍过观察者模式了. 观察者模式可以让多个观察者同时观察1个被观察者. 也就说被观察者可以1次过执行所有观察者的update()方法. 再通俗d来讲, 就是多个观 ...

  9. sqlite字段是否存在_学习廖雪峰的JAVA教程---反射(访问字段)

    对任意的一个Object实例,只要我们获取了它的Class,就可以获取它的一切信息. 我们先看看如何通过Class实例获取字段信息.Class类提供了以下几个方法来获取字段: Field getFie ...

  10. 深入分析 Java 方法反射的实现原理

    2019独角兽企业重金招聘Python工程师标准>>> 方法反射实例 public class ReflectCase { public static void main(Strin ...

最新文章

  1. python中setup什么意思_Python unittest中setUp()和setUpClass()有什么区别?
  2. torch 和torchvision对应关系并附下载路径
  3. windows环境下redis.conf配置文件
  4. Xcode10新变化
  5. SQL Server通配符妙用
  6. Linux网络相关知识
  7. 第二话 最最最简单的计算机
  8. 【android开发】 修改控件Spinner内容的字体大小 颜色等属性
  9. CF986C AND Graph
  10. python社区版可以用库么_应用Python,你不但能够得到出色的小区适用和普遍的库集...
  11. JEECG V3版本组合查询实现方法
  12. golang(5)使用beego 开发 api server 和前端同学拆分开发,使用swagger
  13. python经典程序实例-Python简单基础小程序的实例代码
  14. python中mod运算符_自定义 Python 类中的运算符和函数重载(上)
  15. 算法:分离链表为两部分,小于某个值都在左边,大于等于某个值在右边 Partition List
  16. 2021电子设计竞赛题目_艾孜尔江
  17. 关于oracle误删数据如何进行恢复
  18. 支持向量机SVM和最小二乘支持向量机LSSVM
  19. 人人网(cookie登录)
  20. C语言快速 入门 一篇就够

热门文章

  1. R语言:异常数据处理
  2. C++ Primer 5th笔记(chap 13 拷贝控制)阻止拷贝
  3. 初等数论--整除--公因数一定是最大公因数的因数
  4. 美国大学生数学建模竞赛15大热点问题
  5. 【Opencv实战】趣味应用 | 用OpenCV自动给图片添加虚拟特效---平淡的生活需要技术的点缀~
  6. JavaScript流程控制之分支结构
  7. C++用FindFirstFile、FindNext递归遍历硬盘的文件
  8. 【Excel】日常记录
  9. Break,Continue,Return 傻傻分不清楚
  10. 项目: 推箱子图形化游戏 【C++ / C】