黑马程序员——JDK1.5新特性

------- android培训java培训、期待与您交流! ----------

 

静态导入

静态导入语法

import static 包名.类名.方法名/属性名/*;

 

作用: 静态导入可以将一个类中的静态属性和方法导入到当前类中,那么在使用的时候就想自身的方法一样调用, 而不用通过类名.属性/方法调用.

 

示例:

package com.itcast.jdk5;

//静态导入了Sum类中全部静态属性和静态方法
import static com.itcast.bean.Sum.*;
//可以指定导入的某一个静态属性或静态方法, 导入静态方法只写方法名就可以
//import static com.itcast.bean.Sum.sum;

import com.itcast.bean.Sum;
public class StaticImport {
	public static void main(String[] args) {
		//直接使用Sum中的属性
		a = 10;
		b = 20;
		
		//直接调用Sum中的方法
		int result = sum();
		
		//打印结果
		System.out.println(result);
	}
}

package com.itcast.bean;

public class Sum {
	
	public static int a;
	public static int b;
	
	public static int sum() {
		return a + b;
	}
}


 

可变参数

可变参数语法

变量类型

注意: 类型后面只能跟3个点,前后可以有空格, 只用在方法中的形式参数,并且只能是最后一个参数

 

可变参数就是一个数组, 传入几个参数数组的大小就是几, 在访问这个参数的时候通过遍历数组的形式访问

 

代码示例

package com.itcast.bean;

public class VariableParameter {
	public static void main(String[] args) {
		int result = sum(3, 5, 7, 9);
		System.out.println(result);
	}

	// 定义一个接收可变参数的求和方法
	public static int sum(int a, int... is) {
		// 将a的值先赋给变量sum
		int sum = a;
		// 以循环数组的形式将可变参数is的每个值与sum累计相加
		for (int i = 0; i < is.length; i++) {
			sum += is[i];
		}
		return sum;
	}
}


 

增强for循环

增强for循环语法

for (type arg : args) {……}

 

增强for循环又称为for-each循环,里面需要循环的参数(args)必须是集合或者数组,而且必须实现了Iterator接口,因为增强for循环其实就是迭代获得数组或集合中的每一个元素(arg)

 

代码示例:

package com.itcast.bean;

public class ForE {
	public static void main(String[] args) {
		//定义一个数组
		int[] arr = {1, 5, 3, 65, 32, 2};
		
		//增强for循环迭代打印每个元素
		for (int i : arr) {
			System.out.println(i);
		}
	}
}


 

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

每个基本数据类型都会对用一个包装类,下面是八种基本数据类型的包装类

byte                    Byte

short                  Short

int                       Integer

long                    Long

char                    Chracter

float                   Float

double               Double

boolean             Boolean

 

包装类是将基本数据类型转换为了类对象,比如Integer in = new Integer(3); 这时候in就有了一个值为3,这就是自动装箱

 

自动装箱

Integer in = 3; 这个表达式直接将3传给了Integer对象,这里是自动装箱, 就是在底层会有一个自动的将基本类型的3包装成了一个对象

 

自动拆箱

Integer in = 3; int a = in; 这个表达式是将Integer对象的值直接赋给了int类型的引用,这里在底层也是将Integer类型自动转换为了int型数据,这个叫自动拆箱

 

注意: 每个对象用”==”比较都会返回false,但是在Integer类中底层是维护了一个字节的数据池,也就是说如果创建的对象的值范围在-128~127之间,对象会直接指向数据池中的数据, 比如Integer in1 = 127; Integer in2 = 127; System.out.println(in1 ==in2);返回结果会是true, 因为两个对象都指向了数据池中的同一数据,这个叫做享元设计模式, 如果超出了byte范围的数字比较那么就是false,因为它们在各自的对象中都创建了自己的数据

代码示例

package com.itcast.bean;

public class AutoBox {
	public static void main(String[] args) {
		// 直接将基本类型数据赋给包装类型, 自动装箱
		Integer in1 = 127;
		Integer in2 = 127;

		// 将包装类对象与基本数据进行运算会先转换成int再运算, 自动拆箱
		System.out.println(in1 + 3);

		// 比较两个对象的是否相等, 127在byte范围内, 会返回true;
		System.out.println(in1 == in2);

		// 将两个对象的值都换成128再比较, 超出了byte范围, 会返回flase;
		in1 = 128;
		in2 = 128;
		System.out.println(in1 == in2);
	}
}


 

枚举

枚举语法

enum 类名

 

枚举也是一个类, 只不过普通的类是以class修饰的,枚举是以enum修饰的

 

枚举内可以定义枚举元素, 枚举元素都是静态的, 每个元素之间用”,”隔开,如果元素后面没有其它的代码, 那么可以不写”;”,如果变量后面有代码, 那么必须写”;”,比如

enum WeekDay {

         MON,SUN        //如果下面定义了方法,那么必须在结尾处写”;”

}

上面的枚举定义了两个元素, 它们分别都是WeekDay的对象

 

枚举内可以定义构造方法, 构造方法一定是private修饰的,默认存在无参的, 也可以定义有参的,使用有参构造方法时, 只需要在变量的后面加括号传入参数就可以了

 

可以在枚举中定义普通的成员变量和方法,也可以定义抽象方法, 但是它的元素必须实现这个抽象方法,因为元素就是枚举本身的对象, 所以可以通过在元素后面写匿名内部类来实现抽象方法

 

如果枚举内只有一个枚举元素, 那么这个元素可以视为是单例的, 因为它是本身的对象,并且是静态的, 而且构造方法是私有的,

 

代码示例

package com.itcast.jdk5;

public class EnumTest {
	public static void main(String[] args) {
		// 创建枚举对象
		TrafficLamp red = TrafficLamp.RED;
		TrafficLamp green = TrafficLamp.GREEN;
		TrafficLamp yellow = TrafficLamp.YEELOW;

		// 分别打印三个枚举元素的time
		System.out.println(red.time);
		System.out.println(green.time);
		System.out.println(yellow.time);

		// 调用元素中的方法并打印
		System.out.println(red.nextLamp());
		System.out.println(green.nextLamp());
		System.out.println(yellow.nextLamp());
	}
}

enum TrafficLamp {
	// 定义三个枚举元素, 并实现抽象方法, 这里用的是匿名内部类
	RED {
		public TrafficLamp nextLamp() {
			return GREEN;
		}
	},
	GREEN(10) {
		public TrafficLamp nextLamp() {
			return YEELOW;
		}
	},
	YEELOW(20) {
		public TrafficLamp nextLamp() {
			return RED;
		}
	};

	// 普通的成员变量
	int time;

	// 无参构造方法调用普通的方法
	private TrafficLamp() {
		print();
	}

	// 有参方法传入一个值
	private TrafficLamp(int time) {
		this.time = time;
	}

	public void print() {
		System.out.println("12345");
	}

	// 定义抽象方法, 返回下一个元素
	public abstract TrafficLamp nextLamp();
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值