Java5新特性:
可变参数属于数组的变形应用;
foreach循环:
目的:数组或者集合数据的输出;格式如下:
for(类型 变量:数组|集合){
//每一次循环会自动的将数组的内容设置给变量
}
public class test {
public static void main(String[] args) {
int data[] = new int[] { 1, 2, 3 };
for (int x : data) {
System.out.println(x);
}
}
}
用数组直接通过索引访问会比较麻烦,所以foreach避免了索引的麻烦;
静态导入:
例如导入包的时候:import static cn.mldn.util.MyMath.*; 将包静态导入,这些方法就好比在主类中定义的static 方法,在引用的时候就可以直接引用,不必在前面加上类名称,而是直接使用类里面的方法;
泛型:
问题引出:
当程序要求保存很多组不同数据类型的东西时,会考虑使用Object来保存不同类型的数据,Object里面的自动装箱自动拆箱操作提供了便利;这就要求在定义类里面的属性的时候,属性的类型是Object;
泛型技术的核心意义:类在定义的时候,可以使用一个标记,此标记可以表述类中属性或方法参数的类型,在使用的时候动态设置类型;
class Point<T> { // 设置一个标记,在使用的时候才知道它的类型
private T x;
private T y;
public void setX(T x) {
this.x = x;
}
public void setY(T y) {
this.y = y;
}
public T getX() {
return x;
}
public T getY() {
return y;
}
}
public class test {
public static void main(String[] args) {
Point<String> p = new Point<String>();
p.setX("哈哈哈");
String x = p.getX(); // 取出数据时,不需要向下转型
System.out.println(x);
}
}
如果想使用泛型,那么他能够采用的类型必须是类,即不能是基本类型,只能是引用类型;
对于泛型有两点说明:
- 如果在使用泛型类或者接口的时候,没有设置泛型具体类型,那么会出现程序编译时的警告,同时为了不出错,所有泛型将会使用Object表示;
- JDK1.7之后,声明的时候,后面可以不加类型,例如:Point<String> p = new Point<>();
通配符:
泛型接口:
interface IMessage<T>{ //设置泛型接口
public void print(T t);
}
泛型方法:
泛型方法不一定非要定义在支持泛型的类里面;也可以在不是泛型的类里面定义;
pubiic static <T> T fun(T t){ //T 的类型由传入的参数的类型决定
return t;
}
枚举:
介绍:
使用enum关键字来描述枚举;
enum Color{ //定义好了枚举类
RED,GREEN,BLUE; //此处为实例化对象
}
public class test {
public static void main(String[] args) {
Color red = Color.RED;
System.out.println(red);
}
}
使用枚举可以完全简化的代替多例设计模式;
用enum定义的枚举就相当于是一个类继承了Enum(是一个抽象类)类而已,
面试题:enum和Enum的区别?
- enum是一个关键字,Enum是一个抽象类;
- 使用enum定义的枚举就相当于一个类继承了Enum这个抽象类;
定义其他结构:
虽然枚举的定义比较简单,但是有一点要求:
- 枚举之中定义的构造方法不可用 public 声明;如果没有无参构造,请手工构造,传递参数;
- 枚举对象必须要放在首行,随后才可以定义属性、构造、普通方法
enum Color { // 定义好了枚举类
RED("红色"), GREEN("绿色"), BLUE("蓝色");
private String title;
private Color(String title) {
this.title = title;
}
public String toString() {
return this.title;
}
}
public class test {
public static void main(String[] args) {
for (Color c : Color.values()) {
System.out.println(c);
}
}
}
此时与多例设计模式就完全相同,而且代码更加的简洁;
枚举实现接口:
interface Message {
public String getTitle();
}
enum Color implements Message { // 定义好了枚举类
RED("红色"), GREEN("绿色"), BLUE("蓝色");
private String title;
private Color(String title) {
this.title = title;
}
public String toString() {
return this.title;
}
public String getTitle() {
return this.title;
}
}
public class test {
public static void main(String[] args) {
Message msg = Color.RED;
System.out.println(msg.getTitle());
}
}
枚举应用:
枚举属于高级的多例设计模式;