l 测试JDK中具有可变参数的类Arrays.asList()方法。分别传多个参、传数组,传数组又传参的情况。
• 注意:传入基本数据类型数组的问题。
l 从JDK 5开始, Java 允许为方法定义长度可变的参数。语法:
publicvoid foo(int … args){
}
l 注意事项:
• 调用可变参数的方法时, 编译器将自动创建一个数组保存传递给方法的可变参数,因此,程序员可以在方法体中以数组的形式访问可变参数
• 可变参数只能处于参数列表的最后, 所以一个方法最多只能有一个长度可变的参数
@Test
public void testsum()
{
sum(1,2,3,5);
}
public void sum(int ...nums)
{
int sum=0;
for(int s:nums)
{
sum+=s;
}
System.out.println(sum);
}
//注意可变参数 可以这样写 public voidsum(int x,int …nums) 但是不可这样写public void sum(int ..nums,int x)
//也可以传递数组
@Test
public void testasList() {
List list = Arrays.asList("1", "2", "3");
System.out.println(list);
String[] str = { "1", "2", "3", "4" };
list = Arrays.asList(str);
System.out.println(list);
int[] i = { 1, 2, 3, 4, 5 };
list = Arrays.asList(i);
System.out.println(list);//这种语法是错误的
//aslist方法中只能放对象,不能放基本数据类型
Integer[] it={1,1,2,3};
list=Arrays.asList(it);
System.out.println(list);
}
l 为什么需要枚举?
• 一些方法在运行时,它需要的数据不能是任意的,而必须是一定范围内的值,此类问题在JDK5以前采用自定义带有枚举功能的类解决,Java5以后可以直接使用枚举予以解决。
l JDK 5新增的enum 关键字用于定义一个枚举类。
public class Demo1 {
public void test()
{
print(Grade.A);
}
public void print(Grade g)
{
}
}
enum Grade{ //相当于一个类
A,B,C,D,E; //相当于一个对象
}
枚举的构造方法 ,字段和方法.
public class Demo2 {
public static void main(String[] args) {
Demo2 d=new Demo2();
d.print(Grade1.A);
}
public void print(Grade1 g)
{
Stringstr=g.getValue();
System.out.println(str);
}
}
enum Grade1{
A("100-80"),B("79-60"),C("59-0");
String Value;
private Grade1(String value)
{
this.Value=value;
}
public String getValue()
{
return this.Value;
}
}
带抽象方法的枚举
import org.junit.*;
public class Demo1 {
@Test
public void test()
{
this.print(Grade.A);
}
public void print(Grade g)
{
String str=g.localGrade();
System.out.println(str);
}
}
enum Grade{
A("100-90"){
@Override
public String localGrade() {
return "优";
}
}
,B("89-80"){
@Override
public String localGrade() {
return "良";
}
}
,C("79-70"){
@Override
public String localGrade() {
return "一般";
}
}
,D("69-60"){
@Override
public String localGrade() {
return "差";
}
}
,E("59-0"){
@Override
public String localGrade() {
return "不及格";
}
};
String Value;
private Grade(String value)
{
this.Value=value;
}
public String getValue()
{
return this.Value;
}
public abstract String localGrade();
}
//枚举的构造函数必须是私有的private
Enum 的常用方法
public void test2()
{ String name= Grade.C.name();
System.out.println(name);
int range=Grade.C.ordinal();
System.out.println(range);
String str="C";
Grade s=Grade.valueOf(str);
System.out.println(s);
Grade []gs=Grade.values();
for(Grade g: gs)
{
System.out.println(g);
}
}
l 练习:请编写一个关于星期几的枚举WeekDay,要求:
• 枚举值:Mon,Tue,Wed,Thu,Fri,Sat,Sun
该枚举要有一个方法,调用该方法返回中文格式的星期
public class Demo2 {
public static void main(String[] args) {
Demo2 d = new Demo2();
d.print(Week.Mon);
}
@Test
public void print(Week w) {
w.p();
}
}
enum Week {
Mon {
@Override
public void p() {
System.out.println("星期一");
}
},
Tue {
public void p() {
System.out.println("星期二");
}
},
Wed {
public void p() {
System.out.println("星期三");
}
},
Thu {
public void p() {
System.out.println("星期四");
}
},
Fri {
public void p() {
System.out.println("星期五");
}
},
Sat {
public void p() {
System.out.println("星期六");
}
},
Sun {
public void p() {
System.out.println("星期日");
}
};
public abstract void p();
}