黑马程序员--20--高新技术(一)

------- android培训java培训、期待与您交流! ---------- ------- Windows Phone 7手机开发.Net培训、期待与您交流! -------

l  静态导入(导入后不用 .方法,只用方法名) 1.5以后

Import static

导入一个类中的静态方法,或者所有静态方法!

 

l  Overload override的区别

重载:只有返回值不同,不行(同名方法,参数不同)

重写(覆盖):其他类以及实现的类

 

l  可变参数(只能出现在列表的最后)

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

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

例:function(int x , int… args)

 

l  增强for循环

格式:for( (可加修饰)type 变量名:集合变量名){…}

注意:迭代变量必须在()中定义。

       集合变量可以是数组或实现了Iterable 接口的集合类

 

l  自动装箱与自动拆箱 1.5

享元模式 flyweight  有很多个小的对象,有很多属性相同,把它们变成一个对象,不同的属性变成方法的参数(外部状态)

Ineteger  i1=12;

Ineteger  i2=12;  在一个字节类内(-128~127)小的整数在装箱的时候装成同一个对象

 

Integer i3 = Integer.valueOf(3);

Integer i4 = Integer.valueOf(3);

System.out.println(i3==i4);

 

l  枚举:jdk1.5以后的新特性

枚举就是让某个类型的变量的取值只能为若干个固定值中的一个,否则编译就会报错。枚举可以让编译器在编译时就可以控制源程序中填写的非法值,普通变量的方式在开发阶段无法实现这一目标。

 

用普通类如何实现枚举功能,定义一个weekday的类来模拟枚举功能

私有构造方法

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

可以有若干公有方法或抽象方法

public abstract class WeekDay {

    private WeekDay(){}

     public final static WeekDay SUN=new WeekDay(){

 

      public WeekDay nextDay() {

        // TODO Auto-generated method stub

        return MON;

      }};

     public final static WeekDay MON=new WeekDay(){

 

      public WeekDay nextDay() {

        // TODO Auto-generated method stub

        return SUN;

      }};

    

     public abstract WeekDay nextDay();

    

     public String toString(){

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

     }

 

1)枚举就相当于一个类,其中也可以定义构造方法,变量成员,普通方法和抽象方法。

2)枚举元素必须位于枚举体中的最开始部分,枚举元素列表的后要有分号与其他成员分隔,把枚举中的成员方法或变量放在枚举元素的前面,编译器会报错。

l  带构造方法的枚举

1、构造方法必须定义成私有的

2、如果有多个构造方法,在元素后面加括号选择构造方法

例子:

public enum WeekDay{

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

      private WeekDay   (){System.out.println("1");}

      private WeekDay(int day){System.out.println("2");}

   }

3、枚举元素MON()MON的效果一样,都是调用默认的构造方法。

l  案例:带方法的枚举

定义枚举TrafficLamp

实现普通的next方法

实现抽象的next方法,每个元素分别是由枚举的子类来生成的实例对象,这些子类采用类似内部类的方式进行定义。

增加表示时间的构造方法

public enum TrafficLamp{

      RED(30){

 

        @Override

        public TrafficLamp nextLamp() {

           // TODO Auto-generated method stub

           return GREEN;

        }

       

      },

      GREEN(45){

 

        @Override

        public TrafficLamp nextLamp() {

           // TODO Auto-generated method stub

           return YELLOW;

        }

       

      },

      YELLOW(5){

 

        @Override

        public TrafficLamp nextLamp() {

           // TODO Auto-generated method stub

           return RED;

        }

       

      };

      public abstract TrafficLamp nextLamp();

      private int time;

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

     

   }

 

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

 

u  反射:

Java程序中的各个java类,他们是否属于一类事物,描述这类事物的java类名就是Class

Person  p1 = new Person();

 

Class class1 =Person.class//字节码;

P1.getClass();

Class.forName(“java.lang.String”);

 

如何得到各个字节码对象对应的实例对象(Class类型)

1、类名.class 例如:Class class1 =Person.class//字节码1;

2、对象.getClass() 例如:P1.getClass();

3\Class.forName(“类名”) 例如:Class.forName(“java.lang.String”);//作用:返回类字节码

 

有两种形式可以得到字节码

1、字节码 已经加载到内存中,找到字节码返回;

2、没有加载到内存中,用类加载器加载到内存中,缓存字节码,用forName返回字节码。

int.class==Integer.TYPE

   

l  数组类型的Class实例对象

class.isArray()

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

String str1 = "abc";

      Class class1 =str1.getClass();

      Class class2 =String.class;

      Class class3 =Class.forName("java.lang.String");

      System.out.println(class1==class2);

      System.out.println(class1==class3);

     

      System.out.println(class1.isPrimitive());

      System.out.println(int.class.isPrimitive());//基本类型

      System.out.println(int.class==Integer.class);

      System.out.println(int.class==Integer.TYPE);//常量

      System.out.println(int[].class.isPrimitive());

      System.out.println(int[].class.isArray());

 

------- Windows Phone 7手机开发.Net培训、期待与您交流! ------- 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值