黑马程序员——java新特性

来源:互联网 发布:mysql 字符转日期函数 编辑:程序博客网 时间:2024/05/30 13:41

———–android培训、java培训、java学习型技术博客、期待与您交流!————

1 静态导入

Import语句--可以导入一个类或某个包中所有的类Import static语句--可以导入一个类中的某个静态方法或所有的静态方法    比较两个数的最大值可以用Maht类中的方法Math.max(8,9);    此时需要导入import  Java.lang.Math*:    如果想直接调用max(8,9);    此时需要导入import static Java.lang.Math.max:及导入包中的静态方法,就可以直接使用
//普通导入import   java.lang.Math;public class Text{    public static void main(String[] args)    {        int a=20,b=30;        System.out.println(Math.max(a,b));    }}//静态导入import  static java.lang.Math.max;public class Text{    public static void main(String[] args)    {        int a=20,b=30;        System.out.println(max(a,b));    }}

2 可变参数

 一个方法接受的参数个数可以不固定  可变参数的特点:   -->只能出现在参数列表的最后      public static void add(intx,int...args)   -->...(三个点  )位于变量类型和变量名之间,前后有无空格都可以   -->调用可变参数的方法时,编译器为该可变参数隐含创建一个数组,在方法体以数组的形式访问可变参数

3 增强for循环

    for(type 变量名:集合变量名)      {循环体}注意事项:    -->迭代变量必须在()中定义    -->集合变量可以是数组或实现了Iterator接口的集合
public class Text{    public static void main(String[] args)    {        int[] arry=new int[]{2,4,6,8,10};        for(int i:arry)//循环遍历        {            System.out.println(i);        }    }}

4 基本数据类型的自动装箱和自动拆箱

自动装箱:在jdk1.5之前Integer i=3;这样写是报错的(因为两边的数据类型根本不一致)在jdk1.5之后Integer i=3;这样写没有问题,因为系统把3这个基本的数据类型自动封装成Integer对象

 自动拆箱: Integer i=3; i+3;//i是Integer对象在1.5之前是不能这样写的,因为两个数的数据类型不一致 但是在1.5之后,这是可以的,系统自动把Integer对象i转换成int类型的

享元设计模式:(flyweight)

有很多个小的对象,它们有好多相同的属性,就把这些相同的属性变成一个对象,那些不同的属性把它们变成方法的参数这些参数称之为外部状态,那些相同的属性称之为这个对象的内部状态

5 枚举(enum)
用普通的java类来模拟枚举原理

package javaText1;/*  1、私有的构造方法     2、每个元素分别用一个公有的静态成员变量表示     3、可以有若干公有方法或抽象方法。采用抽象方法定义nextDay就将大量的if.else语句转移成了一个个独立的类。*/public abstract class WeekDay{    private WeekDay(){};//空的构造方法    public final static WeekDay SUN_DAY =new WeekDay()    {        @Override        public WeekDay nextDay()        {            return Mun_DAY;        }    };//类中的成员变量(是该类的一个对象),是通过内部类实现的    public final static WeekDay Mun_DAY =new WeekDay()    {        @Override        public WeekDay nextDay()        {            return SUN_DAY;        }    };//类中的成员变量(是该类的一个对象),是通过内部类实现的    public abstract WeekDay nextDay ();//抽象方法    public String toString ()    {      return this==SUN_DAY?"SUN_DAY":"Mun_DAY";      }//重写了toString方法}
 枚举类的基本定义(用到关键字enum)   修饰符 enum 类名     {枚举元素}  以及枚举类中常用的方法:
public class enumText{    public static void main(String[] args)    {        WeekDay  sunDay =WeekDay.SUN_DAY;//通过类名调用静态成员变量        System.out.println(weekDay);//输出枚举常量名        System.out.println(weekDay.name());//输出对象名        System.out.println(weekDay.getClass());//输出对应类        System.out.println(weekDay.toString());//输出枚举对象名        System.out.println(weekDay.ordinal());//输出此对象在枚举常量的次序        System.out.println(WeekDay.valueOf("WED"));//将字符串转化为枚举常量        System.out.println(WeekDay.values().length);//获取所以的枚举元素,并打印其长度    }    //定义枚举类 public enum WeelDay    {        SUN,MON,TUE,WED,THI,FRI,SAT;//这是枚举的元素    }}

带有构造方法的枚举类
需要说明的是在枚举类中怎么使用带参数和不带参数的构造方法?
使用带参数构造
在枚举元素的后边加上一对小括号里边写上对应有参数的构造方法参数类型的参数
使用无参的构造方法
在枚举元素后边什么都没有以及在枚举元素后边只加上一对小括号,都是调用的是没有参数的构造方法

public class emun1 {    public static void main(String[] args) {        WeekDay weekDay=WeekDay.MON;    }    //定义枚举内部类    public enum WeekDay{        SUN(),MON(1),TUE,WED,THI,FRI,SAT;//分号可有可无,但如果下面还有方法或其他成员时,分号不能省。        //枚举类中的枚举元素必须写在第一行        //无参构造器        private WeekDay(){            System.out.println("First");        }        //带参数的构造器        private WeekDay(int day){            System.out.println("Second");        }    }}

实现带有抽象方法的枚举类

package javaText1;public class enum_abstrac{    public static void main(String[] args)    {        TrafficLamp lamp=TrafficLamp.Green;        System.out.println(lamp.nextLamp());    }    //定义enum类    //类中的三个成员变量是该enum(抽象类)类的子类对象,用的是内部类来实现的.并且要重写TrafficLamp类中的抽象方法    //还定义了一个带参数的构造方法,在创建enum元素的对象的时候,调用带参数的构造方法    public  enum TrafficLamp    {        Read(50) {            @Override            public TrafficLamp nextLamp()            {                // TODO Auto-generated method stub                return Green;            }        },        Green(35) {            @Override            public TrafficLamp nextLamp()            {                // TODO Auto-generated method stub                return yellow;            }        },        yellow(5){            @Override            public TrafficLamp nextLamp()            {                // TODO Auto-generated method stub                return Read;            }        };        public abstract TrafficLamp nextLamp();//定义一个抽象方法        private int time;        private TrafficLamp(int time)//定义带一个参数的构造方法        {            this.time=time;        }    }}

———–android培训、java培训、java学习型技术博客、期待与您交流!————

0 0