黑马程序员--高新技术--可变参数,增强for循环,枚举

时间:2023-02-18 11:16:06

----------------------Android培训Java培训、期待与您交流! ---------------------- 

可变参数:适用于参数个数不确定,类型确定的情况,java把可变参数当做数组处理。
public class VaribalParameter {
public static void main(String[] args) {
// TODO Auto-generated method stub
int sum=add(3,4,5,9); //类型确定,参数个数可变
int sum2=add(3, 4,5,9,11,23,99,100);
System.out.println(sum);
System.out.println(sum2);
}

//定义求和方法中 第二个变量为可变参数
public static int add(int a,int ...args)
{//调用可变参数的方法时,编译器为该可变参数隐含创建一个数组,
//在方法体中以数组的形式访问可变参数
int sum=a;
// 注释整个段落:选中 Ctr+shift+/
for(int i=0;i<args.length;i++)
{
sum=sum+args[i];
}
return sum;
}
}
/* 可变参数的特点:
只能出现在参数列表的最后;
...位于变量类型和变量名之间,前后有无空格都可以;
调用可变参数的方法时,编译器为该可变参数隐含创建一个数组,在方法体中以数组的形式访问可变参数。
*/

增强for循环

for ( type 变量名:集合变量名 )  { … }

public class ForDemo {
public static void main(String[] args) {
int[] array=new int[]{12,32,97,94,72,13};
System.out.print("采用普通for循环遍历打印:");
for(int i=0;i<array.length;i++)
{
System.out.print(array[i]+"\t");
}

System.out.print("\n采用增强for循环遍历打印:");
for(int arr:array)
{
System.out.print(arr+"\t");
}
}
}
/*
* 注意事项:
迭代变量必须在( )中定义!
集合变量可以是数组或实现了Iterable接口的集合类
*/

缺点:
  对于数组,不能方便的访问下标值;
  对于集合,与使用Interator相比,不能方便的删除集合中的内容(在内部也是调用Interator).
除了简单遍历并读取其中的内容外,不建议使用增强的for循环。

 

枚举
枚举就是要让某个类型的变量的取值只能为若干个固定值中的一个,否则,编译器就会报错。枚举可以让编译器在编译时就可以控制源程序中填写的非法值,普通变量的方式在开发阶段无法实现这一目标。
public class EnumTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println(Week.Friday);
System.out.println(Week.MONDAY);

Week sun=Week.Saturday;
System.out.println("枚举name---"+sun.name());
System.out.println("枚举ordinal---"+sun.ordinal());
System.out.println("枚举getClass---"+sun.getClass());
System.out.println("枚举valueOf---"+sun.valueOf("Saturday"));
}
//定义一个枚举
public enum Week
{
MONDAY,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday
}

//枚举像普通的类一样可以添加属性和方法,可以为它添加静态和非静态的属性或方法
public enum SeasonEnum
{
//注:枚举写在最前面,否则编译出错
spring, summer, autumn, winter;

private final static String position = "test";
public static SeasonEnum getSeason()
{
if("test".equals(position)){
return spring;
}
else
{
return autumn;
}
}
}
}

带抽象方法的枚举
//定义个交通灯枚举,带上抽象方法的枚举
public enum TrafficLamp
{
RED(30) {//每个元素通过TrafficLamp子类完成抽象方法
@Override
public TrafficLamp nextLamp() {
// TODO Auto-generated method stub
return GREEN;
}
},
GREEN(45){
@Override
public TrafficLamp nextLamp() {
// TODO Auto-generated method stub
return YELLON;
}
},
YELLON(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;
}
}

 

----------------------Android培训Java培训、期待与您交流! ----------------------