黑马程序员_基础加强
来源:互联网 发布:淘宝卖家语言 编辑:程序博客网 时间: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");}}}
- 黑马程序员_基础加强
- 黑马程序员_基础加强
- 黑马程序员_基础加强_枚举
- 黑马程序员_基础加强_反射
- 黑马程序员_基础加强_注解
- 黑马程序员_基础加强_代理
- 黑马程序员_基础加强_枚举
- 黑马程序员_基础加强_注解
- 黑马程序员_基础加强_反射
- 黑马程序员_基础加强_注解
- 黑马程序员_java基础加强_代理
- 黑马程序员_基础加强path1
- 黑马程序员_基础加强path2
- 黑马程序员_基础加强path3
- 黑马程序员_基础加强小结
- 黑马程序员_基础加强(2) 枚举
- 黑马程序员_基础加强(3) 反射
- 黑马程序员_基础加强(5) 注解
- HTML5学习(3) SVG的学习及应用五 多点连线
- 调整图像亮度brightness,对比度contrast,饱和度saturation方法整理
- 使用screen报错Cannot open your terminal '/dev/pts/0' - please check. 解决方法
- 网上收集的关于SQL线程、进程、连接、.net连接池等方面的资料
- 求指教
- 黑马程序员_基础加强
- apache poi 设置单元格背景色
- MyEclipse10安装插件的几种方法
- 一个人的旅行(最短路)
- php链式调用
- 集成新浪微博Android SDK的方法
- SQL Server 2012 Always on Availability Groups安装Step by step 2
- Google的JavaScript压缩工具
- c++ 产生随机数