黑马程序员--java 静态导入、可变参数、数据类型的自动拆箱与装箱、枚举

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


静态导入

import语句可以导入一个类或某个包中的所有类,所谓导入不占用任何的java资源,只是让我们写java原程序的时候少些一些前缀而已。
静态导入(java 1.5以后提供的)导入类中的静态方法,例如import static java.lang.Math.*,这样我们就可以直接使用:System.out.println(max(3,6));//max();方法可以直接使用了。

可变参数
只能出现在参数列表的最后;...位于变量类型和变量名之间 前后有无空格都行;调用可变参数的方法时,编译器可为该可变量参数隐含创建一个数组,在方法体中以数组的形式访问可变参数
class VariableParameter
    {
        public static void main(String[] args)
         {
               System.out.println(add(2,3));
               System.out.println(add(2,3,5));
         }
    }
   public static int add(int x,int ... args)
   {
       int sum=x;
       for(int i=0;i<args.length;i++)
         {
              sum+=args[i];
         }
   }
 
增强for循环

for(type 变量名:集合变量名){...}
如上例:for(int arg: args)
           {
                sum+=arg;
           }
迭代变量必须在()定义;集合变量可以是数组或实现了Iterable接口的集合类

自动装箱与自动拆箱
class  AutoBox
{
   public static viod main(String[] args)
    {
      Integer iobj=3;/*自动把基本类型3装成了Integer类型,在赋给iobj(自动装箱)***在一个字节-128--127之内的数字,一旦包装成Integer对象是将它们缓存起
来,节省空间。因为数字小,出现的几率大,没必要每一个数字对应一个对象,这是一种设计模式,称为享元模式*/
            System.out.println(iobj+12);
            /*iobj是Integer类型,Integer不支持加法,它必须转换成基本类型整数才可以(自动拆箱)*/
 
              Integer i1=12;
              Integer i2=12;
            System.out.println(i1==i2); //true
              Integer i1=137;
              Integer i2=137;
            System.out.println(i1==i2); //false           
   }
}

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

枚举

使用枚举来规定某变量的值,也就是我们定义了一个新的类型并规定了它的值,以后使用该类型去定义变量时,变量的值就只能是那些已经规定好的值。而每一个枚举元素值都是一个实例对象。
***用抽象方法定义某些方法,就可以将大量的if else语句转移一个独立的实现了抽象方法的各个类中
枚举的定义及基本的使用:
public enum WeekDay{ 
/*枚举也是一个类,此处WeekDay就是一个类,其中的每一个元素都是它的实例对象。*/
              SUN,MON,TUE,WED,THI,FRI,SAT;
    }
    WeekDay weekDay2 = WeekDay.FRI; //静态的
           System.out.println(weekDay2);
           System.out.println(weekDay2.name());
           System.out.println(weekDay2.ordinal());
      //返回FRI在WeekDay取值中是第几个,从0开始算,应返回5.还有一个getClass方法,因为枚举为一个类,它的值为对象,若调用getClass()方法,应返回WeekDay。 
           System.out.println(WeekDay.valueOf("SUN").toString());
// WeekDay.valueOf("SUN"):将SUN变为WeekDay的实例对象。
           System.out.println(WeekDay.values().length);
/* WeekDay.values()返回一个WeekDay类型的数组,数组的值就是WeekDay所能取的值,也就是它的所有对象。便于进行遍历。*/
枚举中de构造方法使用:
public enum WeekDay{
              SUN(1),MON(),TUE,WED,THI,FRI,SAT;
/*元素列表为第一句,并且都是静态的,所以会自动调用相应的构造函数。只要用到该枚举其中的每个元素的构造方法就会被调用。元素后有大括号,并且其中有参数时,会调用有参的构造函数,否则会调用无参数的构造函数*/
              private WeekDay(){System.out.println("first");} //构造方法必须是私有的。
             private WeekDay(int day){System.out.println("second");}
}

带有抽象方法的枚举
public enum TrafficLamp{
   RED,GREEN,YELLOW;
   public abstract TrafficLamp nextLamp();

}

因为这个枚举中有抽象方法,所以不能用new来产生新的对象。只能用其子类来产生RED,GREEN,YELLOW等对象。
枚举只有一个成员时,就可以作为一种单例的实现方式。



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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值