JavaWeb前的准备--Java基础增强
/**
引入增强for循环的原因:在JDK5以前的版本中,遍历数组或集合中的元素,需先获得数组的长度或集合的迭代器,比较麻烦!
因此JDK5中定义了一种新的语法——增强for循环,以简化此类操作。增强for循环只能用在数组、或实现Iterator接口的集合类上
语法格式:
for(变量类型 变量 :需迭代的数组或集合){
}
*/
//java中的增强for循环
int[] arry = {1,2,3,4};
for(int i : arr){
System.out.println{i};
}
//for循环只适合取值,而不能改变原数组中的元素。以下代码是不可行的
int arr[] = new int[5];
for(int num : arr){
num = 1;
}
System.out.println(arr[0]);//打印出的仍是初始值0
/**
从JDK 5开始, Java 允许为方法定义长度可变的参数。语法:
public void foo(int … args){
}
**/
public void sum(int ...nums){
//可变参数其实就可以看作一个长度可变的数组
int sum = 0;
for(int i : nums){
sum += i;
}
System.out.println(sum);
}
//注意以下的情况是错误的,因为可变数组的长度位置,故无法识别参数列表中后面的num
public void foo(int … args,int num){
}
//很明显,当改为以下代码就对了
public void foo(int num,int … args){
}
/**
*枚举类enum具有如下特性:
1、枚举类也是一种特殊形式的Java类。
2、枚举类中声明的每一个枚举值代表枚举类的一个实例对象。
3、与java中的普通类一样,在声明枚举类时,也可以声明属性、方法和构造函数,但枚举类的构造函数必须为私有的(这点不难理解)。
4、枚举类也可以实现接口、或继承抽象类。
5、JDK5中扩展了swith语句,它除了可以接收int, byte, char, short外,还可以接收一个枚举类型。
6、若枚举类只有一个枚举值,则可以当作单态设计模式使用。
**/
//例:设计一个Grade类,ABCDE,并能返回该等级的分数范围
enum Grade{
A("100-90"),B("89-80"),C("79-70"),D("69-60"),E("59-0");
private String value;//用以封装每个对象的分数
private void setValue(String value){
this.value = value;
}
private String getValue(){
return this.value;
}
}
public void print(Grade g){
String value = g.getValue();
System.out.println(value);
}
//带抽象方法的枚举类型
enum Grade{
A("100-90"){ //只要在枚举类型内实现该抽象方法即可
public String LocalValue(){
return "优";
}
}... //以此类推
private String value;//用以封装每个对象的分数
private Grade(String value){ //枚举的构造函数必须是私有的
this.value = value;
}
public String getValue(){
return this.value;
}
public abstract String LocalValue(){};
}
public void print(Grade g){
String value = g.LocalValue();
System.out.println(value);
}
/**
枚举类型的常用方法:
1、name()
2、ordinal()
3、valueof(Class enumClass, String name)
4、values() 此方法虽然在JDK文档中查找不到,但每个枚举类都具有该方法,它遍历枚举类的所有枚举值非常方便。
*/
//测试常用方法
System.out.println(Grade.C.name()); //得到C的名称
System.out.println(Grade.C.ordinal()); //得到C在枚举类中的位置
String str = "A"; //该字符串必须是枚举类中存在的枚举值
Grade g = valueof(str); //有三种重载的方法
System.out.println(g);
Grade[] gs = Grade.values(); //得到所有枚举值
for(Grade g1 : gs){
System.out.println(g1);
}