JAVA基础必备(十二)—— 反射(一)

本文详细介绍了Java的反射机制,包括方法的反射、成员变量的反射以及构造函数的反射。通过实例展示了如何通过反射操作JavaBean的属性,如改变字符串属性值为大写,整型属性值加100。此外,还涵盖了数组的反射操作,以及如何通过反射调用方法和构造函数。文中还提供了三个实践作业,引导读者深入理解和应用反射技术。
摘要由CSDN通过智能技术生成
封装类
  因为java中基本数据类型不是面向对象的,
 java对所有的数据类型都提供了对应的类封装了该数据类型的一些操作
 int -----> Integer
 byte----->Byte
 short---->Short
 long---->Long
 boolean---->Boolean
 char---->Character
 float--->Float
 double--->Double
反射--->把java类的组成成分映射成java的类
面向对象里面,万事万物皆对象
  (java中类中静态的成员不是面向对象的
  java中基本的数据类型不是面向对象)
那么类也是对象!类是哪个类的对象?有一个类叫Class,
所有的类都是Class的对象,这个对象我们如何用代码来表达呢?
比如有class A{}
A类本身有实例对象  A a1 = new A();
A类本身也是实例对象---->A类的字节码对象--->如何表示

只要用到Class类就用到了反射技术。
为什么要用反射---->很多流行的框架,一个半成品,然后去调用你写的东西,就能使用了
那么当框架产生的时候,我们可能还没学编程呢,框架怎么能调用到我写的东西呢
只能通过动态加载类来通过编译,将来你的功能实现了,我就直接可以调用到,既然要用动态
加载就要用到Class肯定要用到反射



1.Class类的一些常用方法
  有了类的字节码对象,可以获取该类的所有信息
练习1:写一个Session类,在该类中添加一个方法
      void printClassMessage(Object obj)
      打印obj对象所属的类的所有public的方法
     ,包含方法的返回值类型,方法名称,参数类型列表
   所有的自己声明的成员变量,包括成员变量的名称和类型
   
   
2.方法的反射java.lang.Method
如何获取某一个方法---->方法名称和参数类型列表


1.方法的反射
  如何获取一个方法对象--->方法名称,参数列表
 练习1
 在Session类中添加一个方法
 public void changePropertyValue
 (String propertyName  Object obj)
 obj是一个标准JavaBean的对象
 如果propertName
 属性是字符串类型转换大写输出,
 如果propertyName是整型属性+100后输出
如User类有如下属性
String username, int age
那么
User user = new User("zhangsan",30);
changePropertyValue("username",user)--->打印ZHANGSAN
changePropertyValue("age",user)--->打印130



2.成员变量的反射
  如何获取成员变量   getField(成员变量的名称)
 field.get(obj)   field.set(obj,value)


构造函数的反射(用的不多)
  如何获取构造函数
  如果通过构造函数对象直接创建类的实体对象
 
数组的反射
    封装类
    Integer Byte Short Long Character Boolean
    Double Float
       自动的装箱和拆箱操作
       
  数组是一个对象--->引用类型
 
练习1 对print方法进行反射操作


作业1
写一个方法changeValue(Object obj)
 把obj对象的所有字符串属性值都变成大写
 把obj对象的所有整型属性值都+100
 通过方法的反射去完成  obj对象是标准JavaBean的对象
 如User(username,userage)
  User u = new User("zhangsan",30);
  chageValue(u)
  u.getUsername=====>"ZHANGSAN"
  u.getUserage=====>130
作业2
class A{
  private String name;
  private int age
  public A(){}
  public A(String name,int age)
  {
    this.name = name;
    this.age = age;
  }
}
打印该类的构造函数声明
并通过每个构造函数的反射来创建对象
作业3
class B
{
   public static void print(String[] s,int[] a)
   {
       对string拼接打印
   对a数组求和打印
   }
}
通过print方法的反射来操作该方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值