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

 
                     
                                           (黑马程序员) JAVASE 增强

eclipse的使用

myeclipse是在eclipse之上的增强插件。二者都是java。eclipse是通过层级管理的方式进行管理项。经常用到的配置:

window---Preferences(首选项),配置对整个工作间起作用,切换workspace将失效。

          |--General:通用配置,这里设置不仅仅对java而是针对所有语言。

           |--Keys:快捷键的设置(Bind绑定),注意快捷键的冲突。

              |--Content Assist:内容助理。内容自动补齐就是它。

          |--Java:Java开发的常用选项配置。

           |--Compiler:编译器的选择现在选择1.6

           |--Installed JREs:运行环境的版本

           |--Editor:编辑器的设置。

              |--

      ---Open Perspective:打开透视图。

File---Swith Workspace:切换工作间,每个人可以建立一个自己的工作间,将加载这个工作间                         自己特有的配置,适应每个人工作的个性化需求。

    ---new:创建新的项目、类等等。

       每个类最好有包名:公司域名倒着写,如:cn.itcast.项目名.包名。

某个项目、包或者类,上右击:Refactor(重构),可以进行更名、移动等操作。

静态导入

就是将一个静态方法导入,然后可以不通过类名调用而直接可以方法名调用即可。也可以导入一个类中的所有静态方法。

 Code:

   import static  java.lang.Math.*;

重载和重写及可变参

overload:如果参数列表一样而返回值类型不一样是不可以的因为,调用方法时是通过参数列表去区分方法,此时就不知道调用的是哪个。而返回的值有可能完全不用。

override:如果子类中有一个和父类同名的方法但是父类中是私有的是否构成重载?也不构成,因为父类那个方法被私有后子类无法访问,此时子类中的方法相当于一个全新的方法。

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

注释快捷键:ctrl+/

增强for

增强for能迭代的集合,此集合务必实现了Iterable接口的类型。

拆装箱及享元模式

Integer i1 = 137;Integer i2 = 137;i1和i2二者是equals的,就是说是同一个对象的不同引用。而138就不是如此。也就是说在一个Byete之内是同一个,大于它就不是。

    因为int比较小时的值用得很多,故将其缓存提供引用即可,节省资源。这就是享元模式的应用。

枚举类型

实际就是限定自定义一个数据类型的取值在一个范围内,如果不在这个范围内则不可以编译通过。将问题提前到编译期。

如果想在一个类中编写哥哥枚举类和测试调用类,那么可以将枚举类定义成调用类的内部类。

枚举方法:

    values();转换成数组,可用于迭代定义的枚举类中的元素

    valueOf();带指定名称的指定枚举类型的枚举常量

    int ordinal();返回枚举常量的序数  

 Code:

  public enum WeekDay//枚举类,没有构造方法

  {

    SUN(1),MON,TUE,WED,THI,FRI,SAT;

    //枚举类中其他成员务必在枚举元素列表之后

    private WeekDay(){};

    //如果要调用这个构造方法必须在枚举元素后添上参数SUN(1)

    private WeekDay(int day){};

   }

  public enum TrafficLamp{

    RED(35){

        public abstract TrafficLamp()

         {

           return GREEN;

         }

       },

    GREEN(55){

         public abstract TrafficLamp()

         {

           return YELLOW;

         }

  

          },

    YELLOW(8){

            public abstract TrafficLamp()

              {

                return RED;

               }

         };

    public abstract TrafficLamp();

    private int time;

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

   }

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

反射

Class:一个类被类加载器加载到内存中,占用一片存储空间,这个空间中的内容就是类的字节码。Class代表某一个已经存在的类的字节码。我们就是通过这个字节码去产生各个java类对应的实例对象。Class不可以直接new实例对象。

如何得到各个字节码(如果已经在内存中存在则直接返回,如果内存中没有则将其加载并返回):

     类名.Class();System.class

     对象.getClass();new Date().getClass()

     Class.forName("类名");Class.forName("java.util.Date");

九个预定义Class实例对象:

   就是八个基本数据类型加一个Void.Class。

   Int.Class = Integer.TYPE;

   数组类型的Class实例对象

   Class isArray();

反射,就是将一个类的各个成员单独隔离出来包装成一个个对应的java类并缓存起来提供给外部使用。因为缓存性能较低。

Constructor类

得到某个类所有的构造方法:

Constructor[] con = Class.forName("java.lang.String").getConstructors();

得到某个类某个特定的构造方法(通过传入的参数类型和个数去确定):

Constructor con = String.class.getConstructor(StringBuffer.class);

构造方法反射的应用:

//new String (new StringBuffer("abc"));(1)

//下面code和(1)处功能一样

Constructor con = String.class.getConstructor(StringBuffer.class);

String str = (String)con.newInstance(new StringBuffer("abc"));//返回的是Object

成员变量反射的应用:

 class ReflectPoint 

  { pravite int x;

    public int y;

    ReflectPoint()

    {

     this x = x;

     this y = y;

     }    

   }

 ReflectPoint rp1 = new ReflectPoint(3,5);

 Field fieldY = rp1.getClass().getField("y");//在一个实例对象上用反射通过变量名获取ReflectPoint类中y的初始值

 Field fieldY = rp1.getClass().getField("x");//由于私有的变量,所有会报错

 fieldx.setAccessibile(ture);//强制设置x变量可以访问

注意:对私有变量的反射需要用getDeclaredField方法并结合setAccessibile(ture)强制设置变量可以访问

方法反射

//str1.charAt(1);

//通过方法名"charAt"和参数列表得到类中的某一个方法

Method mc = String.Class.getMethod("charAt",int.class);

mc.invoke(str1,1);// 如果传进来的第一个方法是静态方法则说明这是一个静态的方法
 
 
 


 

---------------------- android培训java培训、期待与您交流! ---------------------- 详细请查看:http://edu.csdn.net/heima