基础加强:JDK新特性

来源:互联网 发布:男性特点知乎 编辑:程序博客网 时间:2024/06/04 18:14
----------------------android培训java培训、期待与您交流! ---------------------- 
英语角:
javaw: java window 
ide  Integrated  Development  Environment  集成开发环境
templates:模板
pattern:模式,图案,样式
cursor:光标
ordinal: 顺序的,依次的
enumeration:枚举
一、Eclipse使用技巧
1、常用快捷键
  • Alt-down arrow: 将光标所在行或选中多行向下移动。Alt-up arrow会向上移动。
  • Ctrl+/: 对一行注释或取消注释。对于多行也同样适用。
  • Ctrl+1:自动修正(最经典的快捷键)
  • Ctrl+D: 删除当前行或者选中行 
  • Ctrl+Alt+↓ 复制当前行到下一行(复制增加) 。Ctrl+Alt+↑ 复制当前行到上一行(复制增加)
  • Ctrl+Shift+X 把当前选中的文本全部变成大写Ctrl+Shift+Y 把当前选中的文本全部变成小写
  • Alt+Shift+R 给变量重命名 (尤其是变量和类的Rename,比手工方法方便很多)
  • Alt+/:内容助手,提供任意可以搭配的内容,相当有用
  • Alt+Shift+Z:提供可选用的模板代码
2、自定义模板代码

步骤:Window--->Preferences--->Java--->Editor--->Templates  <====> Alt + Shift +Z

补充Name和Pattern(模式):

黑马程序员——Java基础加强笔记:JDK新特性 - 1340743130 - 李维林的博客
 调用该模块后line_selection是指选中行的位置, cursor是指光标的位置


二、JDK5的新特性

1、静态导入

     由于像Collections和Arrays这些工具类中只有静态方法,每次使用其中成员时都要用“类名.方法名”来调用。JDK1.5为了简化书写引入了静态导入。import static两个关键字一起使用,然后在文件中直接采用静态方法名来访问某个类下的静态成员从而省去“类名.”这个前缀。

     例如:

import static  java.util.Arrays.*;//导入的是Arrays这个类中的所有静态成员。import static java.util.Collections.*;//导入的是Collections这个类中的所有静态成员。

当静态导入后,在使用Collections和Arrays中的成员时可以直接使用。如:

class  StaticImport //extends Object{public static void main(String[] args) {int[] arr = {3,1,5};sort(arr);int index = binarySearch(arr,1);out.println(Arrays.toString(arr));//注意,虽然静态导入,但此处Arrays不可省略
/*因为类任何类都继承了Object类,Object中也有toString方法,并且不带参数。此处如果不写“Arrays.”JVM不知道改掉用谁中的toString方法。所以会报错。*/}}

2、可变参数
(1)、 可变参数数组的表现形式:数据类型… 参数名 (例如:private static int add(int ... args))
(2)、使用可变参数的实质:调用含有可变参数的方法时候,javac为可变参数部分隐含新建一个数组,所以使用可变参数的实质是把需要的参数打包成一个数组再调用以数组作为参数的方法。
(3)、可变参数数组的特点
  • 只能出现在参数列表的最后
  • ... 位于参数类型和参数名之间,前后有无空格都可以
  • 依据可变参数使用的实质,可以在可变参数所在的方法中以数组的形式来操作这个可变参数。
以前我们在操作多个参数的同类型函数时,需要定义多个重载方法,来应对不同参数。

public class Test { public static void main(String[] args) { System.out.println(add(2,3)); System.out.println(add(2,3,5)); } public static int add(int num1, int num2){ return num1 +num2; } public static int add(int num1, int num2, int num3){ return num1 +num2+ num3; }}

当出现可变参数数组之后,如上程序可以简化书写。

public static void printArrayII(int...args){    int sum =0;

       for(int i=0; i< args.length; i++)//以数组的形式操作可变参数

         sum+=args[i];

       return sum;

    }  

}

3、享元设计模式

Integer i1 =137;//自动装箱成整形对象

Integer i2 =137;//自动装箱成整形对象

//由于i1i2指向了两个new出来的堆内存的对象,所以两者的内存地址一定不同,所以 ==判断为false

System.out.println( i1==i2);//打印出false    

i1 =13;

//13在[-128, +127]之间,并且第一次出现,所以相当于i1 =new Integer(13);此时JVM就会将这堆内存的对象存放到缓存池

i2 =13;

/*这时,13再一次出现,JVM此时去缓存池中找有没有值为13的整形对象。发现有,就把这个i2指向这个堆内存的对象。 此时,i2i1指向了同一个地址的对象,所以 ==判断结果为true*/

System.out.println( i1==i2); //打印出true

享元模式思想的体现:

       当一个整数大小在一个字节B(-128~ +127)之间的时候,被自动包装为相应的对象,JVM就会将这些基本数据类型对应的对象存入缓存池中,以便程序的其他部分复用这个对象。因为Java认为值很小的对象使用频率很高。

       ——(享元)常用的东西,存放到公共空间,大家分享,节省内存

4、枚举

(1)枚举概述 

  • 枚举的出现让变量取固定的几个值(通过是优化构造函数,使枚举类的取值在构造时就确定下来),否则编译报错。
  • 每一个枚举成员在程序内部都是全局常量(被public static final修饰)
  • 枚举中的常量指向一个匿名内部类实例
  •  定义枚举元素时候不用书写类型,由enum关键字保证这个常量的类型

(2)枚举的好处
        在没有枚举类的时候,如果枚举常量值非常多的时候,这个方法中会存在大量的if...else if... else,而且静态全局常量很多,会使程序臃肿。JDK1.5出现枚举enum,可以直接定义枚举类型的常量来替代上面的模拟枚举类的中的书写内容

  • 省略public static final的书写形式
  • 省略私有化构造函数
  • 省略采用匿名内部类创建枚举常量的成员
(3)枚举中常用的方法

  • 获取
    • 获取成员的名字:name() 默认值就是枚举成员标示符名字(非静态)
    • 获取成员在所有枚举元素中排名:ordinal() 按照定义时候书写顺序排行(非静态)
    • 获取所有枚举成员构成的数组:values() (静态)

  • 转换
    • 字符串转化为枚举类型的元素:valueOf(Stringname)
(4)枚举特点

  1. 枚举成员常量必须位于枚举所有其他成员(构造函数,其他方法之前
  2. 定义枚举构造方法时,构造方法必须private修饰。
  3. 枚举成员之后加上( )调用相应的构造函数,() 为空调用的是枚举类的空参的构造函数。
  4. 枚举类型中有抽象方法时,必须同时要求每个枚举成员实现这个抽象方法否则编译报错。
  5. 由于enum这个关键字包含了abstract,所以可以直接在枚举类中添加抽象方法而不用为枚举类再添加abstract关键字
  6. 如果枚举只有一个成员,那么这个枚举类型就可以作为单例模式的一种实现方式。
(5)关于第4点,实现了枚举类中抽象方法的代码

package cn.itcast.day2;public enum TrafficLamp { RED(30){ @Override public TrafficLamp nextLamp() { return GREEN; } }, GREEN(45){ @Override public TrafficLamp nextLamp() { return YELLOW; } }, YELLOW(5){ @Override public TrafficLamp nextLamp() { return RED; } }; //每种灯持续照亮的时间长度 private int durTime; public abstract TrafficLamp nextLamp(); private TrafficLamp(){} private TrafficLamp(int durTime){ this.durTime =durTime; }}

0 0
原创粉丝点击