黑马程序员_高新技术1

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

Eclipse模板代码配置

         Preference下【Java>>Editor>>Templates

         try{}finally{}配置示例:

         try{

                   $(line_selection)

}

finally{

         $(cursor) 

}

静态导入

         importstaticjava.lang.Math.max;//导入类下的某个静态方法。

         importstaticjava.lang.Math.*;//导入类下的所有静态方法。

可变参数与for循环增强

         //可变参数方法

         publicstatic int add(int x,int… args){//int b…只能在最后一个。

                   //方法实现体。

                   //在方法中以数组的形式来使用args变量。

         }

        

         增强for循环。

         for(inta : args){

                   //循环体

}

增强for循环的被迭代集合或数组必须实现Iterable接口,意思是该集合是可迭代的。否则使用增强for会出现编译错误。

基本数据类型的自动拆箱与装箱

         Integernum1 = 2;//5.0版本后的jdk自动装箱语法

         System.out.println(num1+ 3);// 5.0版本后的jdk自动拆箱语法

         对于基本数据类型,自动装箱会将-128~127之间的数据自动缓存起来。

Integer i1 = 12;

Integer i2 = 12;

I1 == i2 ?//true,享元模式(flyweight),一个字节的数据被缓存了。

Integer i1 = 128;

Integer i2 = 128;

I1 == i2 ?//false

享元模式:有很多个小的对象,他们有很多属性相同,把他们变成一个对象。那些不同的属性把他们变成方法的参数称之为外部状态。那些相同的属性称之为这个对象的内部状态。

枚举

         枚举原理,使用匿名内部类实现:

         package com.test;

public abstract class WeekDay{

   private WeekDay() {

     

   }

  

   public static WeekDaySUM = new WeekDay() {

      public WeekDaynextDay() {

         return MON;

      }

   };

  

   public static WeekDayMON = new WeekDay() {

      @Override

      public WeekDaynextDay() {

         return SUM;

      }

   };

  

   public abstract WeekDaynextDay();

  

   @Override

   public StringtoString() {

      return this == SUM? "SUM" : "MON";

   }

}

         实现带有构造函数的枚举:

         package com.test;

public enum WeekDay {

   SUM, MON, TUS,WED, THI,FRI, SAT;

  

   private WeekDay() {

     

   }

  

   private WeekDay(inti) {

     

   }

}

实现带抽象方法的枚举

package com.text.lamp;

public enum TrafficLamp {

   RED(30) {

      @Override

      public TrafficLampnextLamp() {

         return GREEN;

      }

   },

   GREEN(45) {

      @Override

      public TrafficLampnextLamp() {

         return YELLOW;

      }

   },

   YELLOW(5) {

      @Override

      public TrafficLampnextLamp() {

         return RED;

      }

   };

   public abstract TrafficLampnextLamp();

  

   private int time;

  

   /**

    * 构造方法。

    * @param time

    */

   private TrafficLamp(inttime) {

      this.time = time;

   }

}

        

         枚举只有一个成员时,就可以作为一种单例的实现方式。

反射

         jdk1.2以后出现了反射的机制。  

      Class.forName()方法作用:

返回字节码,加载方式有两种,一种是这份字节码已经加载过待在虚拟机里了直接返回,还有一种是java虚拟机中还没有这份字节码,则用类加载器去加载,把加载进来的字节码缓存在内存中。

1.      对象.getClass();

2.      类名.class;

3.      Class.forName(“类全路径限定名”);//Class.forName(“java.lang.String”)

        

Class对象的isPrimitive()方法判断某个类型是否是基本类型。

int.class == Integer.TYPE;//true, Integer.TYPE返回包装类的基本类型Class对象

只要在源程序中出现的类型,都有各自的Class实例对象。

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

Field类的getFIeld方法只能拿到可见的字段。

getDeclaredField方法可以拿到private字段。

可使用对象setAccessibletrue.则可以去到私有成员的值。

Field类小示例:

private static void changeFieldValue() throwsIllegalAccessException {

      Useruser = new User();

      user.setAge(1002);

      user.setUsername("abddeb");

      Field[]fields = user.getClass().getDeclaredFields();

      for(Field field : fields) {

         field.setAccessible(true);

         if(field.getType() == String.class) {

            StringvalString = (String)field.get(user);

            StringnewVal = valString.replace('b', 'a');

            field.set(user,newVal);

         }

      }

      System.out.println(user.getAge());

      System.err.println(user.getUsername());

}

静态方法反射调用:

methodObj.invoke(null,””);//因为是静态方法不需要对象调用,第一个参数传空。

为了兼容jdk1.4,以数组作为方法参数被反射调用时,不能直接传入对应的一个数组对象(java会自动将数组元素拆开),此时应该对传入的数组对象再打包一次,例如:

class MethodTest{

public static void myMethod(String[] args){

}

}

反射调用:

Method method = MethodTest.class.getMethod(“myMethod”,String[].class);

Method.invoke(null,new Object[]{new String[]{“111”,”222”}});

或者:

Method.invoke(null,(Object){new String[]{“111”,”222”}});

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

Object[] a = new String[]{};//编译通过。

System.out.println(Arrays.asList(a));

System.out.println(Arrays.asList(newString[]{"2","3"}));

HashSet添加完数据后,不要对元素中参与hashCode运算的属性进行修改,否则hashCode发生改变,当要删除该元素时将出现无法找到该元素的现象,这是会导致内存泄露的一个情况。

框架与框架要解决的核心问题:框架与工具类有区别,工具类被用户的类调用,而框架则是调用用户提供的类。

使用类加载器加载资源文件:

现有类目录结构如下:工程根路径/bin/com/test/reflect/ReflectTest.java

资源文件路径:工程根路径/bin/com/test/reflect/config.properties

则在ReflectTest.java中调用资源文件有如下几种写法

1.  InputStream ips = new FileInputStream("bin/com/test/reflect/config.properties");//使用IO的绝对路径形式。

2.  InputStream ips =ReflectTest.class.getResourceAsStream("config.properties");//class直接找资源的方法,当前路径为ReflectTest.java类文件所在路径。

3.  InputStream ips =ReflectTest.class.getClassLoader().getResourceAsStream("com/test/reflect/config.properties");//使用类加载器找到classpath路径的方法。推荐并常用的方法。

4.     InputStream ips = ReflectTest.class.getResourceAsStream("/com/test/reflect/config.properties");//此方法为相对于根路径的全路径写法。

JavaBean内省

         英文:IntroSpector

         作用:对JavaBean进行操作。

        

         JavaBean:属性xxx,get方法getXxx(),set方法setXxx();

         属性描述符:PropertyDescriptor

         StringpropertyName = “x”;

         PropertyDescriptorpd = new PropertyDescriptor(propertyName,对象的class);

         MethodmethodGetX = pd.getReadMethod();

         ObjectretVal = methodGetX.invoke(对象);//调用对象的get方法,返回属性值

         MethodmethodSetX = pd.getWriteMethod();

         methodSeX.invoke(对象,属性值);//调用对象的set方法,设置属性值

         Introspector类的getBeanInfo方法返回BeanInfo对象。

         BeanInfo对象的getPropertyDescriptors方法返回属性描述符数组。

BeanUtils工具包

         Apache的开源项目;

         BeanUtils:会将类型转换为字符串。

         PropertyUtils:会得到属性原始的类型。

         该工具包可以对属性链式设置值。

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

详细请查看:http://edu.csdn.net/heima/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值