黑马程序员_反射

---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Android+IO开发S</a>、<a href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流! 

----------------------

一.eclipse使用技巧

1.透视图:多个小窗口的集合。java透视图、Debug透视图等

                   查看变量值:设置断点->Debug->在窗口中右键watch

2.包名:运用URL来起名字,例如 cn.itcast.xxx

3.配置快捷键方式:window-->preferences(首选项)->General->keys  切换工作间后要重新配置所有的属性

4.设置单个程序的javac和java:window-->preferences(首选项)->compiler(编译器)/Installed JREs(运行)

5.模版代码:window-->preferences(首选项)->java->Editor->templtes(模版)

6.导入工程:先把工程copy到当前workspace,然后File->import->General->Existing Projects into Workspace

                            如果jdk版本不同则可以通过BuildPath来设置新的java类库。

二.静态导入(JDK1.5新特性)

         import: 导入一个类或者某个包中所有的类。

         import static 包名.类名.; 导入某个类下的所有静态方法

三.可变参数(JDK1.5新特性)与增强for循环

         1.可变参数的特点:

·只能出现在参数列表的最后;

·...位于变量类型和变量名之间,前后有无空格都可以;

·调用可变参数的方法时,编译器为该可变参数隐含创建一个数组,在方法体中以数组的形式访问可变参数。

定义可可变参数的格式:

         publicstatic void method(int x,int... args )

         2. 增强for循环

                   格式:for(type 变量名:集合变量名){ ..... }

                  注意事项:迭代变量必须在( )中定义;集合变量可以是数组或者实现Iterable接口的集合.

                                               publicstatic void method(int x,int... args ){

                      int sum=x;

                      for(int arg : args){

sum+=arg;

}

return sum;

}

四.基本数据类型的自动拆箱与装箱(JDK1.5新特性)

         Integernum=12; 将基本数据类型自动封装成对象;

         注意:Integer num1=12;

                     Integer num2=15; 

         num1与num2是同一个对象,当num的值在-128到127之间是都相等,这是一中模式即享元模式(flyweigth)。

五.枚举(enum) (JDK1.5新特性) :枚举是一种特殊的类,其中每个元素都是该类的一个实例对象。

         用普通类实现枚举功能:

         ·私有构造方法

         ·每个元素分别用一个公有的静态成员表示

·可以有若干个公有方法或者抽象方法,采用抽象方法定义nextDay()就将大量的if else语句转换成了独立的类(匿名内部类)。

定义一个枚举类:

                  publicenum WeekDay{

           SUN,MON,TUE,WED,THR,FRI,SAT

}

    注意:枚举元素必须位于枚举体中的最开始部分,枚举元素列表的后要有分号与其他成员分隔。

         定义枚举类中的方法时,一般用抽象方法,然后创建元素的子类对象覆盖此方法。

枚举元素后面加上一对大括号{}来指定创建该元素实例对象时候所运用的构造函数。例SUN{};

           public enum TrafficLamp{

               RED(30){

                  public TrafficLampnextLamp()

                  {

                      returnGREEN;

                  }

               },

               YELLOW(10){

                  public TrafficLampnextLamp()

                  {

                      returnRED;

                  }

               },

               GREEN(20){

                  public TrafficLampnextLamp()

                  {

                      returnYELLOW;

                  }

               };

           public abstract TrafficLampnextLamp();

           private int time;

           private TrafficLamp(int time){this.time=time;};

}

    如果枚举只有一个成员是,就可以当作一种单例的实现方式。

六.反射

         1.获取各个字节码对应的实例对象

                   ·类名.class  

                   ·对象.getClass();

                   ·Class.forName(“类名”);

          2.Constructor类:代表某个类中的构造方法

·得到某个类中的所有的构造方法Constructor[]constructors=Class.forName("").getConstructors();

·得到某一个构造方法

          Constructorconstructor=Class.forName("").getConstructor();

·创建实例对象

    通常方式:String str=new String(new StringBuffer(""))

    反射方式:String str=(String)constructor.newInstance(new StringBuffer(""));

·Class.newIntance()方法

         该方法内部先得到默认的构造方法然后用该构造方法创建实例对象;

         3.Field类:代表某个类中的成员变量

                   getField()方法只能得到public修饰的成员变量的值;

          getDeclaredField()可以得到私有private修饰的成员变量,要想得到其值可以用setAccessible(true)方法显示(暴力反射)

                   Field fieldxx=对象.getClass().getField("xx");

                   fieldxx不是对象身上的变量,而是类上的变量。

                   注意:变量的修饰是public还是private

4.Method类:代表某个类中的成员方法。

         通常方式:对象.method();

         运用反射的方式调用某个类中的main方法:

         反射方式:Method method=类名.class.getMethod("方法名","方法的参数");

                              method.invoke(对象,参数); 如果是method.invoke(null,参数);则说明该方法是静态方法。

自定义程序调用mian方法时,jdk1.5为了兼容1.4 new String[]{"xx","xx","xx"} 不当做一个数组而是三个参数 应该按照1.4接收Object类型数组来定义即new Object[]{new String[]{"xx","xx","xx"}}

或者(Object) new String[]{"xx","xx","xx"}

5.数组的反射

         ·具有相同维数和元素类型的数组属于同一个类型,即具有相同的Class实例对象。

         ·基本类型的一维数组可以被当作Object类型使用,不能当作Object [] 类型使用;非基本类型的一维数组,既

       可以当作Object使用,又可以当作Object [] 类型使用。

         ·Arrays.alist()方法处理int[] 和String[]时的差异

                   String类型的可以直接列出数组中的元素;但是int(基本数据)类型的不可以,因为为了兼容jdk1.4,int类

型的不可以被当作一个Object[]类型使用。

                   ·Array工具类用于完成对数组的反射操作。

              ·hashCode()方法的作用:在一个数组中存储对象时,通过 hashCode 得到的哈希值来计算数组的索引位置常,

                                                                 然后根据这个索引位置进行存取。多个对象计算出来的索引位置相同时,用链表保存。

                   ·内存泄漏:是指在内存对象明明已经不需要的时候,还仍然保留着这块内存和它的访问方式(引用)。

                                               例如:在集合中存储对象时,存储完后改变某个对象的成员的属性,然后将该对象删除,结果不

                                               会删除掉集合中的该对象。

         6.反射的作用:实现框架功能

                   ·加载配置文件

                            InputStream ips=new FileInputStream("");

           Properties prop=new Properties();

           prop.load(ips);

           ips.close();

       ·获取配置文件:getRealPath();先得到总目录,然后获得其中的配置文件

 

 


---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Android+IOS开发</a>、<a href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流! 
----------------------
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值