Java高级部分笔记-------Java5.0的新特性

  • 静态导入

1.1  JDK 1.5 增加的静态导入语法用于导入类的某个静态属性或方法。使用静态导入可以简化程序对类静态属性和方法的调用。

1.2 语法:Import static 包名.类名.静态属性|静态方法|*

1.3 例如:

StaticImport.java

package com.itcast.staticimport;
import static java.lang.Math.max;
import static java.lang.Math.abs;
public class StaticImport {
	public static void main(String[] args) {
		System.out.println(max(15,19));
		System.out.println(abs(41));
	}
}
//output:19
         41
//

      

  • 自动拆箱和装箱

        2.1 JDK5.0的语法允许开发人员把一个基本数据类型直接赋给对应的包装类变量,或者赋给Object类型的变量,这个过程称为自动装箱.

        2.2 自动拆箱和自动装箱与之相反,即把包装类对象直接赋给一个对应的基本类型变量.

        2.3 典型代码

package com.blog;

public class AutoBox {

	public static void main(String[] args) {
		Integer ibox=3;   //装箱
		System.out.println(ibox+12);  //拆箱
		Integer i2=13;
		Integer i3=13;
		//-128~127 true
		System.out.println(i2==i3);
		//other false
	}
}
//output:15
         true
~~//

  • 增强for循环

       3.1引入增强for循环的原因:在JDK以前的版本中,遍历数组或者集合中的元素,需要先获得数组的长度或者集合的迭代器,比较麻烦.

      3.2 因此JDK5.0定义了一种新的语法---增强for循环,以简化次操作.增强for循环只能用在数组,或实现Iterator接口的集合类上.

     3.3 语法格式

           for(变量类型 变量  :需要迭代的数组或集合)

package com.blog;

public class ForLoop {
	public static void main(String[] args) {
		Integer arrs[] = {1,5,40,84};
		for(Integer arr: arrs){
			System.out.print(arr+",");
		}
	}
}
//output:1,5,40,84,

  • 可变参数

      4.1 测试JDK中具有可变参数的类Arrays.asList()方法。分别传多个参、传数组,传数组又传参的情况。

            注意:传入基本数据类型数组的问题。

       4.2  从JDK 5开始, Java 允许为方法定义长度可变的参数。语法:

public void foo(int … args){

}

              注意事项:

       4.3 调用可变参数的方法时, 编译器将自动创建一个数组保存传递给方法的可变参数,因此,程序员可以在方法体中以数组的形式访问可变参数,可变参数只能处于参数列表的最后, 所以一个方法最多只能有一个长度可变的参数

package com.blog;
         /**
          * Variable Paramter 
          * foreach
          * @author lisai
          * @version 1.0
          */
public class VariableParamter {
	public static void main(String[] args) {
		System.out.println(add(2,3));
		System.out.println(add(3,5,8,40));
	}
	public static int add(int x,int...paramters){
		int sum=x;
		for(int paramter:paramters){
			sum+=paramter;
		}
		return sum;
	}
}
//output:5
         56

  • 枚举类

        5.1 为什么需要枚举?

        一些方法在运行时,它需要的数据不能是任意的,而必须是一定范围内的值,此类问题在JDK5以前采用自定义带有枚举功能的类解决,Java5以后可以直接使用枚举予以解决。

        5.2 JDK 5新增的 enum 关键字用于定义一个枚举类。

        5.3  枚举类具有如下特性:

            枚举类也是一种特殊形式的Java类。

            枚举类中声明的每一个枚举值代表枚举类的一个实例对象。

            与java中的普通类一样,在声明枚举类时,也可以声明属性、方法和构造函数,但枚举类的构造函数必须为私有                的(这点不难理解)。

            枚举类也可以实现接口、或继承抽象类。

            JDK5中扩展了swith语句,它除了可以接收int, byte, char, short外,还可以接收一个枚举类型。

            若枚举类只有一个枚举值,则可以当作单态设计模式使用

       5.4 在自己看来枚举对象就相当于public static final声明的变量

package com.itcast.enums;
public class EnumTest {
	public static void main(String[] args) {
		WeekDay weekDay=WeekDay.MonDay;
		System.out.println(weekDay.next());
	}
}
abstract class  WeekDay{
	private WeekDay(){}
	public static final WeekDay SUNDAY=new WeekDay(){

		@Override
		public WeekDay next() {
			return MonDay;
		}
		
	}; 
	public static final WeekDay MonDay=new WeekDay(){

		@Override
		public WeekDay next() {
			return SUNDAY;
		}	
	}; 
	public abstract WeekDay next();
	@Override
	public String toString(){
		return this==SUNDAY?"SUNDAY":"MonDay";
	}
}
//带构造方法的枚举类
enum WeekDayEnum{
	SUNDAY(1),MONDAY;
	//构造方法必须私有
    private WeekDayEnum(){
	}
    private WeekDayEnum(int length){
    	
    }
}
//output:SUNDAY

  • 注解

注解(Annotation): @SuppressWarnings("deprecation")
                   @Override
       元注解:@Retention(RetentionPolicy.RUNTIME)
             @Target({ElementType.METHOD,ElementType.TYPE})
       注解生命周期阶段存在:Java源文件----->class字节码文件----->内存(运行时注解)
                   @Retention(RetentionPolicy.SOURCE)
                   @Retention(RetentionPolicy.CLASS)
                   @Retention(RetentionPolicy.RUNTIME)
                   Default存在class字节码文件
       为注解添加属性:
                   @Retention(RetentionPolicy.RUNTIME)
                   @Target({ElementType.METHOD,ElementType.TYPE})---作用在类,方法等上.
                   public @interface ItcastAnnotation {
	                     String color();
                   }
                   @ItcastAnnotation(color="蓝色")

package com.itcast.comment;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD,ElementType.TYPE})
public @interface ItcastAnnotation {
	String color();
}

package com.itcast.comment;
@ItcastAnnotation(color="蓝色")
public class AnnotationTest {
	@SuppressWarnings("deprecation")
	public static void main(String[] args) {
		System.runFinalizersOnExit(true);
		if(AnnotationTest.class.isAnnotationPresent(ItcastAnnotation.class)){
			ItcastAnnotation annotation=AnnotationTest.class.getAnnotation(ItcastAnnotation.class);
			System.out.println(annotation);
			System.out.println(annotation.color());
		}
	}
}

注解更多详细知识点:http://www.ibm.com/developerworks/cn/java/j-annotate1/

在学习Java高级部分,首先学习了Java5.0的新特性.虽然Java的更高级版本(8.0)出现,但是我觉得这些基础的知识是很有用的.这些知识都是在开发中频繁用到的.

  JDK 6.0的新添特性:http://bbs.tech.ccidnet.com/read.php?tid=312315&fpage=0&toread=&page=1

  相关API:http://blog.csdn.net/lanniao1/archive/2007/08/25/1759047.aspx

  JDK 7.0的新特性的相关介绍:http://www.360doc.com/content/12/1013/23/820209_241321372.shtml

最后,还是希望自己英文慢慢地变好,那样的话就可以直接读取Java官网的API来发现Java8新特性.----------------

你可能感兴趣的:(Java5.0的新特性..)