高新技术(一)
2013-12-30 14:29
197 查看
高新技术(一)1.静态导入这是自JDK1.5后的新特性● import语句可以导入一个类或者某个包中的所有类● import static语句导入一个类中的某个静态方法或所有静态方法举一个简单的例子:
import static java.lang.System.out;//导入java.lang包下的System类的静态方法out; public class HelloWorld{ public static void main(String[] args){ out.print("Hello World!");//既是在这里不用再写成System.out.println("Hello World!")了,因为已经导入了这个静态方法out。 } }2.可变参数可变参数:适用于参数个数不确定,类型确定的情况,java把可变参数做数组处理。注意:可变参数必须位于最后一项。当可变参数个数多余一个时,必将有一个不是最后一项,所以只支持有一个可变参数。因为参数个数不定,所以当其后边还有相同类型参数时,java无法区分传入的参数属于前一个可变参数还是后边的参数,所以只能让可变参数位于最后一项。可变参数的特点:(1)只能出现在参数列表的最后; (2)...位于变量类型和变量名之间,前后有无空格都可以;(3)调用可变参数的方法时,编译器为该可变参数隐含创建一个数组,在方法体中一数组的形式访问可变参数
public class Varable { public static void main(String [] args){ System.out.println(add(2,3)); System.out.println(add(2,3,5)); } public static int add(int x,int ...args){ int sum=x; for(int i=0;i sum+=args[i]; } return sum; } }3.增强for循环●语法:for(type 变量名:集合变量名){...}注意事项:●迭代变量必须在()中定义!●集合变量可以是数组或实现了Iterable接口的类我们不妨还是拿上面可变参数的方法进行举例。
public class Varable { public static void main(String [] args){ System.out.println(add(2,3)); System.out.println(add(2,3,5)); } public static int add(int x,int ...args){ int sum=x; for(int i:args){ sum+=args[i]; } return sum; } }更加简明,快捷。4.基本类型的自动拆箱与自动装箱Java中有八大基本类型,每一个基本类型都对应一个类,在JAVASE5.0之后, java虚拟机会自动调用封装类中的方法实现你需要的基本数据类型,而不用你手工进行转换1.自动拆箱(Auto unBoxing)系统自动将 类 转换成 基本数据类型Integer i=12;2.自动装箱(Auto Boxing)系统自动将 基本类型 转换成 类System.out.println(i+3); 5.享员模式享元模式是指“运用共享技术有效地支持大量细粒度的对象。”我们可以理解为:当细粒度对象的数量特别多时运行的代价相当高,此时运用共享技术可大大降低运行的成本。举一个简单的例子:Integer i1=28;Integer i2=28;System.out.print(i1==i2);结果会是true,在Integer对象是-128-127范围内时,它们使用同一个对象。享员模式是一种设计模式,当对象粒度微小,而又使用频繁的时候,我们让这个对象成为一种共享状态。它的重点在于分离与不变,内部状态的不变和外部状态的分离。比如说Word书写过程中,英文字母一个就26个,它们是固定的,但同时它们可能出现在不同的地方。每一个英文字母本身是不会变化的,但是在外部显示时它们将出现在不同地方,即外部状态是坐标。这样一种设计模式,可以较少对象数量,节省内存空间。 6.枚举在java中枚举的实质是一个类 但是默认是没有构造方法的 但是我们可以为其添加构造方法但是必须是私有的 .方法列表要在元素列表之下 。其实在 Java类中定义枚举就是定义内部类 .内部类和外部类 根据权限的不同 访问修饰符也不一样。
public enum WeekDay //枚举其实就一个类 也有方法 { MON ,TUS,WED ,THI,FRI,SAT,SUN ;//可以加;也可以不加 }1)我们可以在Main方法中对Java中的枚举进行如下操作 WeekDay day=WeekDay.MON ; System.out.println(day); //自动重载了toString()方法 System.out.println(day.name());//输出枚举对象的名字 System.out.println(day.ordinal());//输出在枚举中的顺序基于0 System.out.println(WeekDay.valueOf("SAT").toString()); //通过传递一个参数字符串来构造一个对象静态方法 System.out.println(WeekDay.values().length);//静态方法获得一个枚举常亮 2) 我们然后修改 枚举的定义如下
public enum WeekDay //枚举其实就一个类 也有方法 { MON(1),TUS,WED(3),THI,FRI,SAT,SUN ;//可以加;也可以不加 private WeekDay(){System.out.println("不带参数的构造方法!");} private WeekDay(int i){System.out.println("带参数的构造方法 !");} }只要程序一运行构造函数就会调用 这是因为Java中的枚举元素 都会自动生成静态对象所以在程序加载的时候构造函数便会被执行 。如果我们想分别调用枚举的构造方法 ,那么我们只需要在枚举元素后面增加上相应的参数即可 。一定要注意 枚举的构造函数一定要是私有 。。枚举和类的声明是一样的 。。3)利用枚举实现 TrafficLamp转向灯 : //枚举元素就是一个个枚举类的实例 但是在这里我们对于枚举的元素其实是外部类的子类 我们通过匿名内部类 来创建枚举对象 并且实现其抽象方法
public enum TrafficLamp{GREEN(){public TrafficLamp nextLamp(){return YELLOW ;}},YELLOW(){public TrafficLamp nextLamp(){return TrafficLamp.RED ;}},RED(){public TrafficLamp nextLamp(){return GREEN ;}} ;public abstract TrafficLamp nextLamp() ;//定义一个抽象方法那么这个类只能被继承了}在Main中调用
TrafficLamp tr=TrafficLamp.YELLOW ;System.out.println(tr);System.out.println(tr.nextLamp());System.out.println(tr.nextLamp().nextLamp()); //到下一个转向灯4)我们经常说到Singleton, 也就是单例模式。这个单例模式要求在程序的运行时候,一个程序的某个类,只允许产生一个实例, 这个类就是一个单例类。在Java中可以通过枚举来实现单例模式,单例模式 就是一个对象唯一的概念。