Java枚举可以当形式参数吗_传智播客 Java网络公开课一静态导入枚举以及可变参数...

7月23听了张老师通过网络直播的公开课,这是7月23就业班课程的网络直播,终于能真实体验张老师最新上课方式。虽然内容是属于Java本身的,但是是基础增强课程。讲述的内容中有很多能让人豁然开朗,其中有些知识对以后了解框架的实现原理是很有帮助的。

最先提起的是eclipse的使用技巧:例如切换工作间,显示各种view,快捷键的位置:General->keys,设置alt+/键进行内容提示时,要注意解除alt+/键原来的绑定关系,直接输入alt+/就可以找到它的绑定关系,删除绑定关系时也可以使用remove binding这个按钮。还有其他很多快捷键在课程中都有提及,这些快捷键用熟练后,能提高开发效率。

接着进入JAVA本身。第一个讲述的比较简单,就是静态导入。有了静态导入,被引入的类中的静态方法就和在这个类中一样,不需要用类名来调用该方法,这样做好处之一就是减少了静态方法调用的代码量。如下面的例子,Math类中静态min和abs方法可直接在该类中调用,实现这种方式,只需要在import语句中加上static关键字就行。

import static java.lang.Math.*;;

public class StaticImport {

public static void main(String[] args) {

System.out.println(min(3, 9));

System.out.println(abs(3-9));

}

}

第二个讲到的是可变参数与for循环增强。可变参数的特点:只能出现在参数列表的最后,...位于变量类型和变量名之间,前后有无空格都可以。下面是一个整数与若干整数相加的例子:

public static void main(String[] args) {

System.out.println(add(1,2,3,5));

System.out.println(add(2,3,5));

}

public static int add(int x,int ...args)

{

int sum = x;

/*for(int i=0;i

{

sum += args[i];

}*/

for(int arg:args)

{

sum += arg;

}

return sum;

}

代码片断中的for循环增强语句与被注释掉的语句是一样的效果,首先就是引入的增强的for循环,这种语法格式能使遍历数组变得简洁,方便,不用像注释里的语句那样定义三个语句。然后就是可变参数列表了,有了它,就再也不用显示地编写数组作为函数的参数,当定义为可变参数形式时,编译器实际上会为你去填充数组。最终获取的仍然是一个数组,这也说明了为什么能用for循环增强方式来遍历的原因。

第三个讲到的就是枚举类型。为什么要有引入枚举类型,枚举类型是用来解决什么问题的?张老师在课程上做了讲解和归纳。比如要定义星期几或性别的变量,该怎么定义呢?假如用静态变量的方式定义,在开发阶段无法防止一些非法值。例如,假设用1-7表示星期几,有人不知道,可能会出现weekday = 0的情况。因此,为了在编译阶段就可以控制源程序中填写的非法值,枚举类型就引入进来了。枚举就是要让一个类型变量的取值为若干个固定的值,否则,编译器就会报错。初识枚举,首先要明确的是枚举是一种特殊的类。第一步认识普通枚举,参照java.awt.Color类,Color类中的静态变量都是Color类的实例对象。理解参照类后,枚举类中的每个成员都是该类的一个实例对象就应该容易理解了。第二步认识带方法的枚举,这张老师举了一个例子:定义了一个红绿灯的枚举类型,其中所带的next方法分别采用普通方法和抽象方法的方式来实现。枚举类型可以看做一个普通的类,因此也能够带构造方法。通常情况创建实例对象时是调用默认的构造方法,当类中写了带参数的构造方法后,也应该添上默认的不带参数的构造方法,否则跟普通类一样,编译器不会自动添加默认的构造方法,这将导致使用默认构造方法生成对象时产生错误。

public enum TrafficLamp

{

RED(15){

public TrafficLamp next2()

{

return GREEN;

}

},

GREEN(30){

public TrafficLamp next2()

{

return YELLOW;

}

},

YELLOW(5){

public TrafficLamp next2()

{

return RED;

}

};

private int time;

private TrafficLamp(){}

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

public abstract TrafficLamp next2();

public String toString()

{

return name() + ":" + time;

}

public TrafficLamp next()

{

if(this.name().equals("RED"))

{

return GREEN;

}

else if(this.name().equals("GREEN"))

{

return YELLOW;

}

else

{

return RED;

}

}

}

上面代码中用到的name方法是获取枚举类型实例对象的名字。一个实践经验是,把枚举中的成员方法或变量放在枚举元素的前面,编译器报告错误。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值