您的位置:首页 > 职场人生

【黑马程序员】黑马入学准备篇:Java高新技术之 静态导入、可变参数、增强for循环、自动装箱、枚举

2014-09-17 12:45 996 查看
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

1、静态导入

普通的import导入语句可以导入一个类或者某个包中的所有类

静态导入import

static语句导入一个类中的摸个静态方法,或所有静态方法

Ps:个人觉得静态导入不要多用,可能会和自己写的方法分不清,或不知道到底是那个类的方法

package com.itheima.part_2;

import static java.lang.Math.*;//静态导入Math类中的所有静态方法

public class StaticImport_9_1 {

/**
* @param args
*/
public static void main(String[] args) {
System.out.println(max(3, 5));
System.out.println(abs(-29));
}

}


2、可变参数

可以接受的参数不固定,如:
System.out.println(add(2,3,5));
System.out.println(add(2,3,5,7));

可变参数的特点
只能出现在参数列表的最后
“...”位于变量类型和变量名之间,前后有误分隔符都可以
调用可变参数的方法时,编译器为该可变参数隐含创建一个数组,在方法体中艺术组的形式访问可变参数

package com.itheima.part_2;

public class VariableParameter_9_2 {

/**
* @param args
*/
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 = 0;
for (int i = 0; i < args.length; i++) {
sum += args[i];
}
return sum;
}
}

3、增强for循环

语法:
for(type 变量名:集合变量名){...}

注意事项:
迭代变量必须在()中定义
集合变量可以是数组或实现了Iterable接口的集合类

package com.itheima.part_2;

public class VariableParameter_9_2 {

/**
* @param args
*/
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 = 0;
for (int arg:args) {
sum += arg;
}
return sum;
}
}


4、基本数据类型的自动装箱与拆箱

自动装箱
Integer num1=12;

自动拆箱
System.out.println(num1 + 2);

基本数据类型的对象缓存:
Integer num1 = 12;

Integer num2 = 12;

System.out.println(num1 == num2);

输出结果为true;

Integer num3 = 137;

Integer num4 = 137;

System.out.println(num3 == num4);

输出结果位false;

Integer将-127~127这些较小的常用的整数对象缓存起来,要使用的时候就直接用这些对象,而不是重新创建一个。

这种设计模式叫享元模式 (flyweight )

有很多属性相同的小对象,把他们变成一个对象,不同的属性变成方法的参数 称之为外部状态,相同的称为内部状态

将一个基本类型的整数变成转换成一个包装类型的类型的对象,看是否也符合Integer num5 = Integer.valueOf(12);

Integer num6 = Integer.valueOf(12);

System.out.println(num5 == num6);

输出结果为 true;

Integer num7 = Integer.valueOf(137);

Integer num8 = Integer.valueOf(137);

System.out.println(num7 == num8);

输出结果为 false;

package com.itheima.part_2;

/*
自动装箱与拆箱
*/
public class AutoBox_9_3 {

public static void main(String[] args) {
Integer i = 3;
System.out.println(i + 12);
/*
* 享元模式 flyweight 有很多属性相同的小对象,把他们变成一个对象,
* 不同的属性变成方法的参数 称之为外部状态,相同的称为内部状态
*/
Integer i1 = 23;
Integer i2 = 23;
System.out.println(i1 == i2);

Integer i3 = 137;
Integer i4 = 137;
System.out.println(i3 == i4);

Integer i5 = Integer.valueOf(137);
Integer i6 = Integer.valueOf(137);
System.out.println(i5 == i6);

Integer i7 = Integer.valueOf(23);
Integer i8 = Integer.valueOf(23);
System.out.println(i7 == i8);

}

}


5、枚举

为什么要有枚举
level 2

用普通类来模拟枚举功能
私有的构造方法
每个元素分别用一个公有的静态成员变量表示
可以有若干够有方法或抽象方法,

枚举的基本应用
枚举是一种特殊的类,其中的每个元素都是该类的一个实例对象。

package com.itheima.part_2;

/*
JDK 1.5新特性
枚举
*/
public class EnumTest_9_4 {

public static void main(String[] args) {
WeekDayByClass wdc = WeekDayByClass.SUN;
System.out.println(wdc.nextDay().toString());
System.out.println(wdc.nextDay2());

WeekDayByEnum wde = WeekDayByEnum.FRI;
System.out.println(wde.toString());
System.out.println(wde.name());
System.out.println(wde.ordinal());
System.out.println(wde.getClass());
// valueOf(String str) 把一个字符串变成枚举对象的实例
System.out.println(WeekDayByEnum.valueOf("SUN").getClass());
System.out.println(WeekDayByEnum.values().length);

}
}

/**
* 用普通类来模拟枚举功能
*
* @author StephenHu
*
*/
abstract class WeekDayByClass {
private WeekDayByClass() {
}

public final static WeekDayByClass SUN = new WeekDayByClass() {

@Override
public WeekDayByClass nextDay2() {
return MON;
}
};
public final static WeekDayByClass MON = new WeekDayByClass() {

@Override
public WeekDayByClass nextDay2() {
return SUN;
}
};

// ....

public abstract WeekDayByClass nextDay2();

public WeekDayByClass nextDay() {
if (this == SUN)
return MON;
else
return SUN;
}

public String toString() {
return this == SUN ? "SUN" : "MON";
}
}

enum WeekDayByEnum {
// 在枚举值后面加上一堆小括弧来调用构造方法
SUN(1), MON(), TUE, WED, THI, FRI, SAT;

// 深入一:为枚举添加不同的构造方法()枚举实际就是一个类
// 注意:必须为private,必须写在枚举类型后面
private WeekDayByEnum() {
System.out.println("first");
}

private WeekDayByEnum(int day) {
System.out.println("second");
}
}

enum TrafficLamp {
// RED,GREEN,YELLOW三种类型
RED(30) {
@Override
public TrafficLamp nextLamp() {
return GREEN;
}
},
GREEN(20) {
@Override
public TrafficLamp nextLamp() {
return YELLOW;
}
},
YELLOW(3) {
@Override
public TrafficLamp nextLamp() {
return RED;
}
};
public abstract TrafficLamp nextLamp();

private int time;

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


------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐