1:静态导入
以前的版本导入时是导入的一个类或者是导入某个包中的所有类
比如要用到随机数
publicstaticvoid main(String[] args) {
int num = (int) (Math.random()*10+1);
System.out.println(num);
}
静态导入就是导入一个类的一个静态方法或者是所有的静态方法
比如要用到很多随机数可以这么写
publicstaticvoid main(String[] args) {
int num0 = (int) (Math.random()*10+1);
int num1 = (int) (Math.random()*10+1);
int num2 = (int) (Math.random()*10+1);
int num3 = (int) (Math.random()*10+1);
System.out.println(num0);
System.out.println(num1);
System.out.println(num2);
System.out.println(num3);
}
也可以这么写
import static java.lang.Math.*
//。。。。。
publicstaticvoid main(String[] args) {
int num0 = (int) (random()*10+1);
int num1 = (int) (random()*10+1);
int num2 = (int) (random()*10+1);
int num3 = (int) (random()*10+1);
System.out.println(num0);
System.out.println(num1);
System.out.println(num2);
System.out.println(num3);
}
//。。。。。
再用到Math类下的任何静态方法就不用在写Math .了
注意点:如果是在jdk1.5一下的是不能这样写的
2:一个方法接受的参数不固定
例如一个整数相加的方法:
publicstaticint add(int a,int ...intArray){
int sum = 0;
for(int i=0;i<intArray.length;i++){
sum += intArray[i];
}
return sum;
}
这在以前的版本时会报错的(以前发现报错提示不知道是怎么回事,嘿嘿)
3:增强的for循环
例如上面整数相加的方法
publicstaticint add(int a,int ...intArray){
int sum = a;
for(int flag:intArray){
sum += flag;
}
return sum;
}
注意点:迭代的变量要在for()中定义,集合的变量可以是数组或者是实现了Iterable接口的集合类
4:基本数据的自动拆箱和装箱
在jdk1.5之前这样对8进行装箱操作Integer obj = 8;是不行的
必须这样写Integer obj = new Integer(8);
1.5支持Integer obj = 8;和System.out.println(obj+9);的装箱和拆箱的操作
5:享元模式(Flyweight Pattern)
Integer int1 = 100;
Integer int2 = 100;
System.out.println(int1 == int2);会输出true
Integer int3 = 1000;
Integer int4 = 1000;
System.out.println(int3 == int4);会输出false
把基本整形数据装箱成Integer时,如果这个数字在一个字节(-128—127)之内,那么这个数字就会被缓存起来,下次在有数字装箱时就会查找缓存中是否有这个数字,如果有就直接拿来用。这些小的整数因为使用频率比较高,改变的机会也比较小,缓存起来会节省内存空间。这就是享元模式。
比如在word文档不可能为所有的单词的每一个字符创建对象,这事就可以使用享元模式,只要创建26个字母对象就行了,大大减少了重复对象的数量。还比如电脑系统的文件图标,也是用了享元模式。
6:枚举
普通的枚举
public enum Weekday {
SUN, MON, TUE, WED,THU,FRI,SAT
}
或
public enum Weekday {
SUN, MON, TUE, WED,THU,FRI,SAT ;
}
在有属性或者是方法时必须要第二种即要在最后一个元素后家分号并且属性和方法也只能在元素的后面。
枚举可以为它添加静态和非静态的属性或方法,这象在一般的类中做的那样
枚举还可以添加构造方法,只不过这个构造方法必须是私有的保证构造函数只能在内部使用
public enum Weekday {
SUN, MON, TUE, WED,THU,FRI,SAT ;
private WeekDay(){}
}
枚举的每一个元素就是该枚举类的一个对象,如果这个对象有参数就要提供相应的构造方法
public enum Weekday {
SUN(0), MON, TUE, WED,THU,FRI,SAT ;
private WeekDay(){}
private WeekDay(int num){}
}
public enum Weekday {
SUN(0), MON(1,"星期一"), TUE, WED,THU,FRI,SAT ;
private WeekDay(){}
private WeekDay(int num){}
private WeekDay(int num ,String name){}
}
如果这时都让构造器打印出一句话
public enum Weekday {
SUN(0), MON(1,"星期一"), TUE, WED,THU,FRI,SAT ;
private WeekDay(){System.out.pritnln(“the first”);}
private WeekDay(int num){System.out.pritnln(“the second”);}
private WeekDay(int num ,String name){System.out.pritln(“the third”);}
}
那么无参元素就会调用无参构造器,拥有相应参数的元素会调用有相应参数的构造器
然而枚举在实际应用中是集合了有相同属性的元素,所以设置他们的属性一般是相同的
在获得枚举对象的属性时的方法都在java文档给出,这里不再啰嗦。
带有抽象方法的枚举
public enum Weekday {
SUN, MON, TUE, WED,THU,FRI,SAT ;
public abstract WeekDay nextDay();
}
因为这是一个抽象枚举不能自己创建对象,那么在哪里定义实例的代码呢?元素的后面
publicenum WeekDay {
SUN {
public WeekDay nextDay() {
returnnull;
}
},
MON {
public WeekDay nextDay() {
returnnull;
}
},
TUE {
public WeekDay nextDay() {
returnnull;
}
},
WED {
public WeekDay nextDay() {
returnnull;
}
},
THU {
public WeekDay nextDay() {
returnnull;
}
},
FRI {
public WeekDay nextDay() {
returnnull;
}
},
SAT {
public WeekDay nextDay() {
returnnull;
}
};
publicabstract WeekDay nextDay();
}
7:实现单实例的好方法:只有一个成员的枚举(这个好)。