JAVA JDK(1)—— jdk5特性

今日一言:
有些人浅薄,
有些人金玉其外而败絮其中,
有天你会遇到一个彩虹般绚丽的人,
当你遇到这个人后,会觉得其他人知识浮云而已。
—— 《怦然心动》
  


JAVA JDK(1)—— jdk5特性

打算转到jdk11,但我jdk5-8的特性也没了解完。
其实jdk1.8jdk8以及java8指的都是同一样的,
只是怕jdk 1.x这样的表示会让人觉得都是一样的东西,所以才更名jdk x的形式。


参考资料:

目录:

  • jdk5
  • jdk6
  • jdk7
  • jdk8

JDK 5

1. 自动拆箱与装箱

类型包装器有:Double,Float,Long,Integer,Short,Character和Boolean

// 自动装箱
Integer integer = 200;

// 自动拆箱
int i = integer;

2. 枚举

枚举:把集合里的对象元素一个一个提取出来。枚举类型使代码更具可读性,理解清晰,易于维护。枚举类型是强类型的,从而保证了系统安全性。而以类的静态字段实现的类似替代模型,不具有枚举的简单性和类型安全性。

看以下代码:

    public static final int STATUS_OK = 0;
    public static final int STATUS_ERROR = 1;
    public static final int STATUS_WARNING = 2;

    private void verifyStatus(int status){
        switch (status){
            case STATUS_OK:
                System.out.println("It is OK!");
                break;
            case STATUS_ERROR:
                System.out.println("It is ERROR!");
                break;
            case STATUS_WARNING:
                System.out.println("It is WARNING!");
                break;
        }
    }

使用枚举:

public class testJava5 {

    public enum STATUS  {
        OK,
        ERROR,
        WARNING
    }

    private void verifyStatus(STATUS status){
        switch (status){
            case OK:
                System.out.println("It is OK!");
                break;
            case ERROR:
                System.out.println("It is ERROR!");
                break;
            case WARNING:
                System.out.println("It is WARNING!");
                break;
            default:
                throw new IllegalStateException("Unexpected value: " + status);
        }
    }

    public static void main(String[] args) {

        new testJava5().verifyStatus(STATUS.ERROR);

    }

}

优劣已然可知,而枚举还有很多用法。


3. 静态导入

在另外一个包新建一个类:

package indi.rcklos.testPackage;

public class staticImportTest {

    public static void printFunction(){
        System.out.println("my function is just to print a sentence.");
    }

}

main函数所对应的另外一个类:

import static indi.rcklos.testPackage.staticImportTest.*; // static import
import static java.lang.System.out; // static import

public class testJava5 {

    public static void main(String[] args) {
        printFunction();
        out.println("You can static import the class \'java.lang.System.out\' to print directly");
    }

}

4. 可变参数(Varargs)

形如C语言:

printf("我有一个整数[%d],我还有一个整数[%d],整数我想要多少就写多少[%d]\n",i1,i2,i3);

可变参数应用:

import static java.lang.System.out; // static import

public class testJava5 {

    /**
     * Count people From a family.
     * @param myName
     * @param otherPeopleName
     */

    public static void CountPeopleFromA_Family(String myName,String...otherPeopleName){
        out.println("There are " + (otherPeopleName.length + 1) + " people in this family.");
    }

    public static void main(String[] args) {
        String RCK = "RCK";
        String LOS = "LOS";
        String LittleFish = "小鱼";
        String BigFish = "大鱼";
        CountPeopleFromA_Family(LOS,RCK,LittleFish,BigFish);
    }

}

5. 内省(Introspector)

是 Java语言对Bean类属性、事件的一种缺省处理方法。例如类A中有属性name,那我们可以通过getName,setName来得到其值或者设置新 的值。通过getName/setName来访问name属性,这就是默认的规则。Java中提供了一套API用来访问某个属性的getter /setter方法,通过这些API可以使你不需要了解这个规则(但你最好还是要搞清楚),这些API存放于包java.beans中。
一 般的做法是通过类Introspector来获取某个对象的BeanInfo信息,然后通过BeanInfo来获取属性的描述器 (PropertyDescriptor),通过这个属性描述器就可以获取某个属性对应的getter/setter方法,然后我们就可以通过反射机制来 调用这些方法。

几乎没用过,占坑.


6. 泛型(Generic)

C++ 通过模板技术可以指定集合的元素类型,而Java在1.5之前一直没有相对应的功能。一个集合可以放任何类型的对象,相应地从集合里面拿对象的时候我们也 不得不对他们进行强制得类型转换。猛虎引入了泛型,它允许指定集合里元素的类型,这样你可以得到强类型在编译时刻进行类型检查的好处。

import static java.lang.System.out; // static import

public class testJava5 {


    static class GenericTest <T>{
        private T object;
        public void setObject(T obj){
            this.object = obj;
        }
        public void printClassOfObject(){
            out.println(object.getClass());
        }
    }

    public static void main(String[] args) {
        GenericTest<testJava5> genericTest = new GenericTest<testJava5>();
        genericTest.setObject(new testJava5());
        genericTest.printClassOfObject();
    }

}

7. For-Each循环

一定简化了for循环的使用。

不用for-each循环的写法:

    private static ArrayList<Integer> buildArrayList(){
        ArrayList<Integer> list = new ArrayList<Integer>();
        for ( int i = 0 ; i < 10 ; i++ ){
            list.add(i);
        }
        return list;
    }

    public static void main(String[] args) {
        ArrayList<Integer> list = buildArrayList();
        for ( int i = 0 ; i < list.size() ; i++ ){
            out.println(list.get(i));
        }
    }

使用for-each循环写法:

    private static ArrayList<Integer> buildArrayList(){
        ArrayList<Integer> list = new ArrayList<Integer>();
        for ( int i = 0 ; i < 10 ; i++ ){
            list.add(i);
        }
        return list;
    }

    public static void main(String[] args) {
        ArrayList<Integer> list = buildArrayList();
        forint i : list ){
            out.println(i);
        }
    }

posted @ 2020-05-18 22:19  RCKLOS  阅读(332)  评论(0)    收藏  举报