传智播客-Java基础加强-day2

原创 2011年01月11日 11:19:00

反射的基石:Class

Java程序中各个Java类属于同一类事物,描述这类事物的Java类就是Class

得到类的字节码的方法有三种:

Person.class   类名字节码

p1.getClass()   得到产生p1实例对象的类的字节码

Class.forName(“java.lang.String”)  得到加载的String类的字节码

例:

package cn.itcast.day1;

public class ReflectTest {

    public static void main(String[] args) throws Exception {

           String str="abc";

           Class cls1=str.getClass();      //得到产生str实例对象的String类的字节码

           Class cls2=String.class;    //得到String类的字节码

           Class cls3=Class.forName("java.lang.String");//得到自动加载的java.lang.String类的字节码

           System.out.println(cls1==cls2);//返回true

           System.out.println(cls1==cls3);//返回true

    }

}

常识:

九个预定义的Class实例对象 :八个基本类型跟viod

反射:就是把Java类中的各个元素映射成相应的Java类;例如:Java类中的MethodField等也是java类,java类中的MethodMethod类的一个实例对象

程序编译时和运行时不俩个不同的概念

反射会导致程序运行速度变慢

构造方法的快捷键:Ctrl+Alt+s

Constructor代表类中的构造方法

Constructor constructor1=String.class.getConstructor(StringBuffer.class);  //获得String对象参数为StrngBuffer.class的构造方法

String str2=(String) constructor1.newInstance(new StringBuffer("abc")); //创建String实例对象参数必须与获得的构造方法的参数类型相同

 

Field 代表类中的字段,即成员变量,例如:

package cn.itcast.day1;

public class ReflectPoint {//创建一个点的类

    private int x;

    public int y;

    public ReflectPoint(int x, int y) {

       super();

       this.x = x;

       this.y = y;

    }

}

(在同目录下另一个可运行的类中测试如下代码)

ReflectPoint p1=new ReflectPoint(3,5); //创建一个点实例对象参数为35

          

Field fieldY=p1.getClass().getField("y");//获得的产生p1的类中的成员y(变量y对象)

Object fy=fieldY.get(p1);  //获得实例对象p1中的成员y

System.out.println(fy);

          

Field fieldX=p1.getClass().getDeclaredField("x");//获得的产生p1的类中的私有成员x(变量x对象)

fieldX.setAccessible(true);//强制私有成员x可以访问

Object fx=fieldX.get(p1);  //获得实例对象p1中的成员x

System.out.println(fx);

 

 

反射实例:将一个类中的String成员中的字符b换成a

package cn.itcast.day1;

import java.lang.reflect.*;

public class ReflectTest {

    public static void main(String[] args) throws Exception {

 

       ReflectPoint p1=new ReflectPoint();

           changeStringValue(p1);

           System.out.println(p1);

    }

 

    private static void changeStringValue(Object obj) throws Exception {

       Field [] fields=obj.getClass().getFields();

       for(Field field:fields){

           if(field.getType()==String.class){//String类字节码在内存中只有一个,此处最好使用==而不是equals()

              String oldValue=(String)field.get(obj);

              String newValue=oldValue.replace('b', 'a');

              field.set(obj, newValue);

           }

       }

    }

   

}

 class ReflectPoint {//创建一个点的类

    public ReflectPoint() {}

    public String str1="ball";

    public String str2="basketball";

    public String str3="itcast";

    public String toString(){

       return str1+"--"+str2+"-"+str3;

    }

}

【备忘】2017最新java 32期基础就业班视频教程

2017最新java 32期基础就业班视频教程 下载地址  http://www.ai998.cn/thread-2648-1-1.html 课程目录 基础班     day01    ...
  • qq_38155396
  • qq_38155396
  • 2017年06月30日 11:47
  • 12102

传智播客 刘意_2015年Java基础视频-深入浅出精华版 笔记(day01~day10)(2015年11月17日20:51:59)

day01 win 7系统打开DOS有趣方法:按住shift+右键,单击“在此处打开命令窗口”(注意:在此处可以是任何的文件夹,不一定是桌面) 用DOS删除的文件不可以在回收站恢复?!! ...
  • juliantem
  • juliantem
  • 2015年08月30日 13:09
  • 3505

【备忘】2017最新传智播客黑马java 32期基础就业班视频教程

资源描述及截图:     北京黑马JavaEE就业32期 2016/7/17 星期日 开学典礼() 2016/7/18 ...
  • qq_38473487
  • qq_38473487
  • 2017年06月14日 10:49
  • 1546

传智播客崔希凡JavaWeb-day28-基础加强2-全部资料

  • 2014年12月08日 16:47
  • 193KB
  • 下载

传智播客-Java基础加强-day1

java常识:      Java ee的全称是Java2 Platform, Enterprise Edition      IDE(Integrated Development Environme...
  • aasspp1100
  • aasspp1100
  • 2011年01月10日 14:09
  • 692

传智播客-Java基础加强-day3

Method代表一个类中的成员方法:例如:Method methodCharAt=String.class.getMethod("charAt", int.class);//获得String对象内部的...
  • aasspp1100
  • aasspp1100
  • 2011年01月13日 00:08
  • 333

传智播客-Java基础加强-day11

银行业务调度系统:终于也看完了,感觉还是很吃力,自己反思可能是因为对Java类的陌生和设计思想的缺乏才会如此,接下来的学习必须加强练习,下面是对视频中几个设计实例的总结。面向对象分析与设计的案例:人在...
  • aasspp1100
  • aasspp1100
  • 2011年01月20日 23:31
  • 353

传智播客-Java基础加强-day6

泛型,jdk1.5新特性,常在集合,反射中使用没有使用泛型时,只要是对象,不管是什么类型的对象,都可以存储进同一个集合中.使用泛型集合,可以将一个集合中的元素限定为一个特定类型,集合中只能存储同一个类...
  • aasspp1100
  • aasspp1100
  • 2011年01月15日 00:18
  • 503

传智播客毕向东Java基础视频教程-day12-05-多线程(线程间通信-生产者消费者)

  • 2014年08月07日 12:50
  • 36.87MB
  • 下载

传智播客_Java培训_毕向东_Java基础源代码day03

  • 2012年10月22日 22:17
  • 11KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:传智播客-Java基础加强-day2
举报原因:
原因补充:

(最多只允许输入30个字)