1.5新特性静态导入、增强for、可变参数、自动装箱拆箱、枚举
来源:互联网 发布:南大 知乎 编辑:程序博客网 时间:2024/06/05 03:47
第一 静态导入
一、概述:
1、import语句:是导入一个类或某个包中的所有类。
2、import static语句:导入一个类中的某个静态方法或所有静态方法。
3、特点:简化了书写,但是代码的阅读性较差。
import static java.lang.Math.*;/* * 1.5新特性 * 静态导入 */public class StaticImport {public static void main(String[] args) {System.out.println(abs(3 - 6));}}
第二 增强for循环
一、概述
1、语法:for(可加修饰符 type 变量名 : 集合){statement}
2、注意:迭代变量必须定义在()中,集合必须是实现Iterable接口的集合类,变量类型前可加修饰符,如final(可被局部内部类访问到)。
/* * 1.5新特性 * * 增强for循环 * 格式:for(可以添加修饰符 type 变量名 :集合){} * 这里的集合必须是实现了Iterable */public class EnhanceFor {public static void main(String[] args) {System.out.println(variableParameter(1, 2, 5, 8, 6));}/* * 可变参数的方法 可变参数只能放与最后 */public static int variableParameter(int x, int... arr) {int sum = 0;// 可变参数其实内部封装了数组,按照数组方式取值for (int num : arr) {sum += num;}return sum;}}
第三 可变参数
一、概述:所谓的可变参数就是参数个数不固定,就是方法的重载。
二、特点:
1、只能出现在参数列表的最后。
2、用…这三个点表示参数可以有很多,且这三个点位于变量类型和变量名之间,前后有无空格皆可。
3、调用可变参数的方法时,编译器为该可变参数隐含创建一个数组,在方法体中以数组的形式访问可变参数。
/* * 1.5新特性 * * 可变参数 */public class VariableParameter {public static void main(String[] args) {System.out.println(variableParameter(1, 2, 5, 8, 6));}/* * 可变参数的方法 * 可变参数只能放与最后 */public static int variableParameter(int x, int... arr){int sum = 0;//可变参数其实内部封装了数组,按照数组方式取值for(int i=0; i<arr.length; i++){sum += arr[i];}return sum;}}
四 自动装箱拆箱
一、概述:
1、自动装箱:Integer i = 3;
2、自动拆箱:i + 2;
3、对于基本数据类型的说明:整数在-128 ~ 127之间的数,包装成Integer类型对象,会存入常量池中的缓存,再创建同一个对象的时候,会直接使用前一个已有的值,因为这些小数值使用的频率很高,所以这些数值需要如此的使用以优化内存。
/* * 1.5新特性: * 自动装箱和拆箱 */public class AutoBox {public static void main(String[] args) {Integer i = 123;//自动装箱System.out.println(i);//自动拆箱Integer i1 = 127;Integer i2 = 127;System.out.println(i1 == i2);Integer i3 = 128;Integer i4 = 128;System.out.println(i3 == i4);/* * 享元模式: * 就是将小的,经常用的放在常量池中,可供分享,这样就不用建立那么多对象,优化内存 * 如正数的-128~127 */Integer i5 = Integer.valueOf(50);Integer i6 = Integer.valueOf(50);System.out.println(i5 == i6);Integer i7 = Integer.valueOf(-158);Integer i8 = Integer.valueOf(-158);System.out.println(i7 == i8);}}
4、享元模式(flyweight):
1)概述:如果很多很小的对象,他们有很多相同的属性,那么就可变为一个对象使用,这些属性称为内部状态,还有些不同的属性,作为方法参数植入,这些称为外部状态。这种优化内存,只创建一个对象的模式,称之为享元模式。
2)应用:
①、word中输入英文字母,可创建26对象,每个对象值是出现的位置不同(坐标),所以可用一个对象调用位置的方法:如,字母i:i.display(intx,int y),将高度重复使用的char类型的字母i封装成一个对象使用。
②、图标:window下的文件夹图标,只哟名称这个属性不同,包含了很多其他相同的属性,那么可以应用享元模式。
第五 枚举
一、概述:1、在实际编程中,往往存在着这样的“数据集”,它们的数值在程序中是稳定的,而且“数据集”中的元素是有限的。例如星期一到星期日七个数据元素组成了一周的“数据集”,春夏秋冬四个数据元素组成了四季的“数据集”。而在java中就是通过枚举对特定的"数据集"进行限定的。
2、枚举的作用:一些程序在运行时,它需要的数据不是任意的,而是必须在一定范围内的值举例说明,没有枚举的时候,就是通过自定义类来实现限定的,类似下面打印成绩的程序,但是成绩只有ABCDE五个等级,所以需要对其进行限定。
//没有枚举的时候:class Demo{public void test(){print(Gread.B);}public void print(Gread g){//打印成绩,只能接收ABCDE}}class Gread{private Gread(){}public static final Gread A = new Gread();public static final Gread B = new Gread();public static final Gread C = new Gread();public static final Gread D = new Gread();public static final Gread E = new Gread();}有了枚举:
enum Gread{A,B,C,D,E;}首先不明白不要紧,但是直观的效果就是简化了书写,让代码更加简单了。其实枚举简单的说就是限定条件,让特定的“数据集”不会超出预定的范围。
enum很像特殊的class,实际上enum声明定义的类型就是一个类,而且是一个不可被继承的final类,其中的元素都是类静态常量。而这些类都是类库中Enum类的子类(java.lang.Enum<E>)。它们继承了这个Enum中的许多有用的方法
二、枚举的特征及用法:
public class EnumTest {/** * @param args */public static void main(String[] args) {WeekDay2 weekday2 = WeekDay2.MON;System.out.println(weekday2.nextDay());WeekDay weekday = WeekDay.FRI;System.out.println(weekday);System.out.println(weekday.name());System.out.println(weekday.ordinal());System.out.println(WeekDay.valueOf("SUN"));System.out.println(WeekDay.values().length);// WeekDay.values(),返回数组TrafficLamp tf = TrafficLamp.GREEN;System.out.println(tf);}// (内部类)定义星期public enum WeekDay {SUN(1), MON(1, 1), TUE, WED, THL, FRI, SAT;// 元素列表// 其他成员只能放于元素列表之后private WeekDay() {System.out.println("first");}private WeekDay(int day) {System.out.println("second");}private WeekDay(int day, int d) {System.out.println("third");}}// 定义交通灯public enum TrafficLamp {// RED,GREEN,YELLOW;// 子类实现父类的抽象方法RED(30) {//调用构造函数,并覆盖父类中的抽象方法@Overridepublic TrafficLamp nextLamp() {return GREEN;}},GREEN(40) {@Overridepublic TrafficLamp nextLamp() {return YELLOW;}},YELLOW(5) {@Overridepublic TrafficLamp nextLamp() {return RED;}};private int time;// 构造方法private TrafficLamp(int time) {this.time = time;}//抽象方法,子类必须实现public abstract TrafficLamp nextLamp();}}
1、构造器:
1)构造器只是在构造枚举值的时候被调用。
2)构造器只有私有private,绝不允许有public构造器。这样可以保证外部代码无法重新构造枚举类的实例,因为枚举值是public static final的常量,但是枚举类的方法和数据域是可以被外部访问的。
3)构造器可以有多个,调用哪个即初始化相应的值。
2、所有的枚举类都继承了Enum方法,方法如下:
1)toString() ---> 返回枚举量的名称
2)ordina() ---> 返回枚举值在枚举类中的顺序,按定义的顺序排
3)getClass() ---> 获取对应的类名
静态方法:
1)valueOf(String e) ---> 转为类中对应的对象,即将字符串转为对象
2)values() ---> 获取数组,将元素放入一个数组中。
三、注意:
1、元素列表即所有的元素项目,必须放在整个类的最前面。
2、元素列表后要可有可无分号,但是元素后面还有其他项目时,必须加上分号。
3、枚举类中的方法为private
4、在元素后跟上(),就可指定要使用的构造方法,含参数。
5、枚举类中的每个元素都是它的一个子类对象,当枚举类中存在abstract方法,须在子类后加{},并在其中实现此方法。
四、总结:
1、匿名内部类比较常用
2、类的方法返回的类型可以是类的类型
3、类中可定义静态常量,常量的结果就是自己这个类型的实例对象
4、如果枚举只有一个成员,就可以作为一种单例的实现方式,对象只有一个。
- 1.5新特性静态导入、增强for、可变参数、自动装箱拆箱、枚举
- 黑马程序员<Java 1.5新特性>静态导入、增强for、可变参数、自动装箱拆箱、枚举
- java JDK1.5新特性(一) [静态导入] [可变参数] [增强for] [自动装箱拆箱] [枚举]
- JDK1.5新特性:静态导入、可变参数、增强for循环、自动装箱拆箱(享元设计模式)、枚举、注解、泛型、
- 黑马程序员-----------JdK1.5新特性(一)---可变参数,增强for循环,自动装箱与拆箱,静态导入,枚举
- 黑马程序员--枚举,增强for循环,可变参数,静态导入,自动拆箱和自动装箱
- 20.JDK1.5新特性(一)【静态导入】【可变参数】【自动装箱拆箱】【增强for循环】
- 20、java jdk 5.0新特性(静态导入&自动装箱和拆箱&增强for循环 &可变参数)
- 静态导入 可变参数 增强for循环 自动装箱 枚举
- jdk5.0新特性(泛型、枚举、静态导入、自动拆装箱、增强for、可变参数)
- Java JDK5.0的新特性 增强for循环 自动装箱/拆箱 可变参数 静态导入
- JAVA JDK1.5新特性<静态带入、可变参数、增强For循环、自动装箱及自动拆箱>
- 黑马程序员-----JDK1.5新特性-自动拆装箱、静态导入、枚举、可变参数、for循环增强
- 黑马程序员——Java1.5新特性之享元模式、增强for循环、可变参数、静态导入、自动装箱和拆箱
- 黑马程序员------java5的一些简单新特性(静态导入、可变参数、增强for循环、自动拆箱装箱及享元)
- 黑马程序员———JDK1.5新特性1、【静态导入】、【for循环增强】、【可变参数】,【自动拆箱装箱】
- day9 JDK 新特性--注解、新 for 循环、静态导入、自动装箱拆箱、泛型、可变长参数
- 静态导入,增强for循环,可变参数,枚举类,自动装箱/拆箱
- crontab
- JS HTML DOM
- Qt-关闭没有标题栏的程序
- 面试算法之排序算法集锦
- 从100PV到1亿级PV网站架构演变
- 1.5新特性静态导入、增强for、可变参数、自动装箱拆箱、枚举
- 百万级访问量网站的技术准备工作
- [Codecademy] HTML&CSS 第三课:HTML Basic II
- SICP 习题 (1.22) 解题总结
- j2se总结
- 新浪微博技术架构分析
- hdu 4706
- Android中Handler作用
- windows 子进程获取父进程的方法。