黑马程序员_基础加强

来源:互联网 发布:淘宝卖家语言 编辑:程序博客网 时间:2024/04/30 03:46

在JDK1.5出现了许多新特性,给程序员使用带来了许多方便,

新特性有静态导入,可变参数,增强for循环,基本数据类型的自动装箱及自动拆箱,枚举,泛型等。

1.静态导入:

        import static:将一个包中的所有静态成员导入

        import:将一个包导入,包括这个包中的类以及方法

 

 

一般导入举例:在下面的这个例子中,要想使用io包和net包中的类以及方法,如果不导入这两个包,系统就会在编译时期报错,程序无法进行下去。

import java.io.*;import java.net.*;class SendPort implements Runnable{private DatagramSocket ds;SendPort(DatagramSocket ds){this.ds = ds;}public void run(){try{BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));String line = null;while ((line = bufr.readLine()) != null){if("88".equals(line))System.exit(0);byte[] buf = line.getBytes();DatagramPacket dp = new DatagramPacket(buf, buf.length, InetAddress.getByName("127.0.0.1"), 10002);ds.send(dp);}ds.close();}catch (Exception e){throw new RuntimeException("发送端失败");}}}class RecPort implements Runnable{private DatagramSocket ds;RecPort(DatagramSocket ds){this.ds = ds;}public void run(){try{while (true){byte[] buf = new byte[1024];DatagramPacket dp = new DatagramPacket(buf, buf.length);ds.receive(dp);String ip = dp.getAddress().getHostAddress();String text = new String(dp.getData(), 0, dp.getLength());System.out.println("[" + ip + "]" + "\r\n" + text);}}catch (Exception e){throw new RuntimeException("接收端失败");}}}
静态导入:
import java.util.*;import static java.lang.System.*;//导入了System类中所有静态成员。import static java.util.Arrays.*;//导入的是Arrays这个类中的所有静态成员。class StaticImport {public static void main(String[] args) {int[] arr = {4,5,2,7};//未导入静态时//Arrays.sort(arr);//导入静态后sort(arr);//未导入//int index = Arrays.binarySearch(arr, 4);//导入后int index = binarySearch(arr, 4);out.println(Arrays.toString(arr));//不可省略Arrays,因为该类继承了Object,有自己的toString()方法//当省略后不知道该调用哪个toString方法。out.println(index);}public static void sop(Object obj){System.out.println(obj);}}

 

2.可变参数

1.5版本之前,一个方法的接收的参数需要几个,例如
public int get(int x){}

public int get(int x, int y, String str)

这时候就出现一个问题,当一个方法的参数列表中的参数个数不确定的时候,为了避免代码的臃肿,1.5版本的JDK就有了可变参数新特性

public int get(int...args)

public int get(int x, char...args)

当声明参数为可变参数的时候,编译器为该可变参数隐含创建了一个可变长度的数组,在方法体中以数组的形式访问可变参数。

可变参数只能出现在参数列表的最后,...位于变量类型和变量名之间,前后有无空格都可以。

这样大大简化了代码,不用写很多重载方法。

例如:

class Demo{public static void main(String[] args){System.out.println(add(2,3,4);//给x赋值2,  3和4被隐藏数组封装System.out.println(add(2,3,4,5);//给x赋值2,  3,4,5被隐藏数组封装System.out.println(add(2,3,4,5,6);给x赋值2,  3,4,5,6被隐藏数组封装}public static int add(int x, int...args){int sum = 0;for(int i = 0; i < args.length; i++){sum += i;}}}


3.增强for循环:与传统for循环相比,格式上简化了,但是功能也有局限性。增强for循环必须有要遍历的源才能循环。

class EnhanceFor{public static void main(String[] args){int[] arr = {7,4,2,9,1,3};//传统for循环for (int x = 0; x < arr.length; x++){System.out.println(arr[x]);}//增强for循环,必须有要遍历的对象才能执行for(int i : arr){System.out.println(i);}}}

 

4.基本数据类型的自动装箱及拆箱:对于经常使用的基本数据类型,为了方便调用,声明了基本数据类型的时候,系统会自动将该

                                                               基本数据类型封装成其所对应的对象,并存储在缓存池内,下次调用的时候会现在缓存池内查找,

                                                               这样对内存的操作就会减少。

 

装箱:int x = 12;//将12自动封装成了Integer对象,等价于Integer in = new Integer(12);
拆箱:Integer in = new Integer(4);//声明一个Integer对象
int num = in +3;//将Integer对象拆箱成基本数据类型进行求和

 

5.枚举:枚举就是让某个类型的变量的取值只能为若干个固定值中的一个,否则编译器就会报错。枚举可以让编译器在编译时就可以控制源程序

               中填写的非法值。普通变量的方式在开发阶段无法实现这一目标。枚举只有一个成员时,就可以作为一种单例的实现方式。

               用普通类实现枚举功能的方法:1.私有的构造方法

                                                                       2.每个元素分别用一个工友的静态成员变量表示

                                                                       3.可以有若干个工友方法或抽象方法

public class EnumTest{public static void main(String[] args){WeekDay weekDay = Weekday.MON;}public enum TrafficLamp{//交通灯的枚举RED(30){public TrafficLamp nextLamp(){return GREEN;}},GREEN(45){public TrafficLamp nextLamp(){return YELLOW;}},YELLOW(5){public TrafficLamp nextLamp(){return RED;}};public abstract TrafficLamp nextLamp();private int time;private TrafficLamp(int time){this.time = time;}}public enum WeekDay{SUN(1),MON,TUE,WEN,THU,FRI,SAT;private WeekDay(){System.out.println("first");}private WeekDay(int day){System.out.println("second");}}}


 


原创粉丝点击