黑马程序员_技术加强之反射

------ android培训 java培训 期待与您交流! ----------


 反射的基石Class类:
 java中各个java类属于一类事物,各个java类都有自己的方法、属性、所属的包、类名等。
 我们用Class类来描述这一类事物。

 Class类的对象就是一个类在内存中所对应的字节码,表示的是一个类
 九个预定义Class实例对象
 boolean,byte,char,short,long,int,float,double和void :void.class;


 反射就是把java类中的各种成分映射成相应的java类。//reflect

import java.lang.*;
class Person
{
 Person(){}
 public String name;
 public int age;

}


class  fanshe1
{
 public static void main(String[] args) throws Exception
 {
  
          Person p=new Person();
    p.getClass();//获取对象所在位置的字节码

    Class c=Class.forName("Person");
    //返回与带有给定字符串名的类或接口相关联的 Class 对象(Class的对象即是类)。
    

    //确定此对象所表示的类或者接口所实现的接口
    Class[] d=p.getClass().getInterfaces();
    Class[] e=c.getInterfaces();

   

    System.out.println(p.getClass());
    System.out.println(c);
    System.out.println(Person.class);

    String a=c.getName();
    //getName()以String的形式放回该Class对象所对应的实体(类、接口、数组类、基本类型和void)名称


          String s1=new String();
    Class c1=s1.getClass();//获取String类在内存中的字节码;类在内存中以字节码的形式存储
    Class c2=String.class;
    Class c3=Class.forName("java.lang.String");

    sop(c1==c2);
    sop(c1==c3);//true :一个类型在类中只有一个字节码

    sop(c1.isPrimitive());//是否是基本数据类型 false //String 是一个类
    sop(int.class.isPrimitive());//true
    sop(int.class==Integer.class);//false,Integer是int的包装类,各有各的字节码
    sop(int.class==Integer.TYPE);//true,包装类.Type用于获取包装类的基本类型字节码
   
    sop(int[].class.isPrimitive());//false:只要在源程序中出现的数据类型,都有各自各Class实例对象
    sop(int[].class.isArray());//true

          //构造方法:用反射实现:String s=new String(new StringBuffer("abc"));
    //Constructor con1=String.class.getConstructor(StringBuffer.class);
    //String str1=(String)con1.newInstance(new StringBuffer("abc"));//返回的类型是Object,需要强制类型转换(由高到低)
    //sop(str1.charAt(2));

    //成员变量(字段)Field
    fieldTest f=new fieldTest("3",5);
    Field field=f.getClass().getField("b");
    //Object obj=field.get(f);
    Field field2=f.getClass().getDeclaredField("a");//获取声明的字段(包含私有)
    field2.setAccessible(true);//声明允许访问私有
    sop(field.get(f));
    sop(field2.get(f));

    //Method str1.charAt(1);

    Method me=String.class().getMethod("charAt",int.class);//方法名:哪一个构造方法
    System.out.println(me.invoke(str1,1));//"abc" 输出b

       replaceTest(f);

 }
 public static void replaceTest(Object obj)
 {
  Field[] fie=obj.getClass().getFields();//获取所以字段
  for(int i=0;i<fie.length;i++)
  {
   if(fie[i].getType()==String.class)
   {
    String oldValue=(String)fie[i].get(obj);
    String newValue=oldValue.replace('b','a');
    fie[i].set(obj,newValue);
   }
  }
  
 }
 public static void sop(Object obj)
 {
  System.out.println(obj);
 }
}

class fieldTest
{
 private String a;
 public int b;

 public String str1="aabcde";
 public String Str2="bbaa";
 public fieldTest(String a,int b)
 {
  this.a=a;
  this.b=b;
 }

 public String toString()
 {
  return str1+":"+str2;
 }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
系统根据B/S,即所谓的电脑浏览器/网络服务器方式,运用Java技术性,挑选MySQL作为后台系统。系统主要包含对客服聊天管理、字典表管理、公告信息管理、金融工具管理、金融工具收藏管理、金融工具银行卡管理、借款管理、理财产品管理、理财产品收藏管理、理财产品银行卡管理、理财银行卡信息管理、银行卡管理、存款管理、银行卡记录管理、取款管理、转账管理、用户管理、员工管理等功能模块。 文中重点介绍了银行管理的专业技术发展背景和发展状况,随后遵照软件传统式研发流程,最先挑选适用思维和语言软件开发平台,依据需求分析报告模块和设计数据库结构,再根据系统功能模块的设计制作系统功能模块图、流程表和E-R图。随后设计架构以及编写代码,并实现系统能模块。最终基本完成系统检测和功能测试。结果显示,该系统能够实现所需要的作用,工作状态没有明显缺陷。 系统登录功能是程序必不可少的功能,在登录页面必填的数据有两项,一项就是账号,另一项数据就是密码,当管理员正确填写并提交这二者数据之后,管理员就可以进入系统后台功能操作区。进入银行卡列表,管理员可以进行查看列表、模糊搜索以及相关维护等操作。用户进入系统可以查看公告和模糊搜索公告信息、也可以进行公告维护操作。理财产品管理页面,管理员可以进行查看列表、模糊搜索以及相关维护等操作。产品类型管理页面,此页面提供给管理员的功能有:新增产品类型,修改产品类型,删除产品类型。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值