day22Java-JDK(5、7)新特性演示

博客
Java-(高级)

JDK(5、7)新特性演示

JDK5新特性
	1.自动装箱和拆箱
	2.泛型
	3.增强for循环
	4.静态导入
	5.可变参数
	6.枚举
JDK6新特性(很少见所以不写)
JDK7新特性
	1.二进制字面量
	2.数字字面量可以出现下划线
	3.switch 语句可以用字符串
	4.泛型简化
	5.异常的多个catch合并
	6.try-with-resources 语句
JDK5-自动装箱和拆箱

JDK5的新特性
自动装箱:把基本类型转换为包装类类型
自动拆箱:把包装类类型转换为基本类型

注意一个小问题:
在使用时,Integer x = null;代码就会出现NullPointerException。
建议先判断是否为null,然后再使用。

代码演示

public class IntegerDemo {
	public static void main(String[] args) {
		// 定义了一个int类型的包装类类型变量i
		// Integer i = new Integer(100);
		Integer ii = 100;
		ii += 200;
		System.out.println("ii:" + ii);

		// 通过反编译后的代码
		// Integer ii = Integer.valueOf(100); //自动装箱
		// ii = Integer.valueOf(ii.intValue() + 200); //自动拆箱,再自动装箱
		// System.out.println((new StringBuilder("ii:")).append(ii).toString());

		Integer iii = null;
		// NullPointerException
		if (iii != null) {
			iii += 1000;
			System.out.println(iii);
		}
	}
}
JDK5-泛型
JDK5-增强for循环
格式:
for(元素数据类型 变量 : 数组或者Collection集合) {
 			使用变量即可,该变量就是元素
}

好处:简化了数组和集合的遍历。
弊端: 增强for的目标不能为null。
如何解决呢?对增强for的目标先进行不为null的判断,然后在使用。

代码演示

public class NewJDK5 {
    public static void main(String[] args) {
        //定义字符串数组
        String[] strarr = {"格雷福斯", "影流之主", "至高之拳", "落日狂沙"};

        //使用增强for
        for (String s : strarr) {
            System.out.println(s);
        }
        System.out.println("--------------------------");

        //定义一个集合
        List<String> list = new ArrayList<>();
        //添加元素
        list.add("hello");
        list.add("world");
        list.add("java");
        //使用增强for遍历
        for (String s : list) {
            System.out.println(s);
        }
        System.out.println("--------------------------");

        ArrayList<String> list2 = null;
        //NullPointerException:报错空指针异常
        // 这个s是我们从list2里面获取出来的,在获取前,应该还要做一个判断(遍历的目标一定不能为null)
        // 说白了,这就是迭代器的功能
        if (list2 != null) {
            for (String s : list2) {
                System.out.println(s);
            }
        }
        System.out.println("--------------------------");

        //证明增强for是来代替迭代器的
        List<String> list3 = new ArrayList<>();

        list3.add("hello");
        list3.add("world");
        list3.add("java");

        //增强for
        for(String s: list3){
            if("world".equals(s)){
 //ConcurrentModificationException:并发修改异常(这个异常是在迭代器出现的,集合修改元素迭代器不知道,就会出现该异常)
                list3.add("javase");
            }
            System.out.println(s);
        }
    }
}
JDK5-静态导入

静态导入:
格式:import static 包名….类名.方法名;
可以直接导入到方法的级别

静态导入的注意事项:
A:方法必须是静态的
B:如果有多个同名的静态方法,容易不知道使用谁?这个时候要使用,必须加前缀。由此可见,意义不大,所以一般不用,但是要能看懂。

代码演示

import static java.lang.Math.abs;
import static java.lang.Math.pow;
import static java.lang.Math.max;
public class StaticImport {

    public static void main(String[] args) {
        //复杂的导入方式
        System.out.println(java.lang.Math.abs(-100));
        System.out.println(java.lang.Math.pow(123.45,12.43));
        System.out.println(java.lang.Math.max(20,30));
        System.out.println("-----------------------");

        //简单的导入当时
        System.out.println(Math.abs(-100));
        System.out.println(Math.pow(123.45,12.43));
        System.out.println(Math.max(20,30));
        System.out.println("-----------------------");


        //还有更简单的导入方式(静态导入)
        System.out.println(abs(-100));
        System.out.println(pow(123.45,12.43));
        System.out.println(max(20,30));

    }
}
JDK5-可变参数

可变参数:定义方法的时候不知道该定义多少个参数

格式:
 		修饰符 返回值类型 方法名(数据类型…  变量名){ 
  		}

注意:
这里的变量其实是一个数组
如果一个方法有可变参数,并且有多个参数,那么,可变参数肯定是最后一个(如果不放在后面,前面的参数都会被可变参包含进去,就会报错)
多参数举例:
public static int getSum(int x,int… y)
调用方法的时候
get(30,40,50,60,70)
默认第一个30对应int x;
后面所有对应int… y

代码演示

public class ArgsDemo {
    public static void main(String[] args) {
        //求两个数的和
        int a = 10;
        int b = 20;
        System.out.println(getSum(a, b));//30

        //求三个数的和
        int c = 30;
        System.out.println(getSum(a,b,c));//60

        //依上类推,不同求和参数变化,就要多写几个方法.怎么写一个方法满足所有需求呢?

        // 需求:我要写一个求和的功能,到底是几个数据求和呢,我不太清楚,但是我知道在调用的时候我肯定就知道了
        // 为了解决这个问题,Java就提供了一个东西:可变参数
        int d=40;
        System.out.println(getSum(a,b,c,d));//100
        int e =50;
        System.out.println(getSum(a,b,c,d,e));//150

    }
    //可变参方法
    //底层是数组实现的
    public static int getSum(int... i){
        int sum = 0;

        for(int x:i){
            sum+=x;
        }
        return sum;
    }
   /* public static int getSum(int a, int b) {
        return a+b;
    }

    public static int getSum(int a, int b,int c) {
        return a+b+c;
    }*/
}

写到可变参数,还得要介绍Arrays工具类中的一个方法,就是把数组转为集合(其实就是可变参的应用)
public static List asList(T… a):把数组转成集合

注意事项:
虽然可以把数组转成集合,但是集合的长度不能改变。

public class ArraysDemo {
    public static void main(String[] args) {

        String[] strarr = {"hello","world","java"};
        //List<String>  list = Arrays.asList(strarr);

        //Arrays工具类asList()方法就是可变参应用
        //List<String> list1 = Arrays.asList("hello");
        //List<String> list2 = Arrays.asList("hello","world");
        
        //虽然可以把数组转成集合,但是集合的长度不能改变(意思就是返回的集合可以修改,但是做增删是不可以的)
        List<String> list3 = Arrays.asList("hello","world","java");
        
        //Unsupported Operation Exception:不受支持的操作异常 
        //list3.add("javaee");
        
        //UnsupportedOperationException:不受支持的操作异常 
        //list3.remove(1);
        for(String s:list3){
            System.out.println(s);
        }
    }
}
JDK5-枚举
JDK7-二进制字面量
public class JDK7NEW {

    public static void main(String[] args) {
        // 二进制字面量
        int x = 0b100101;
        System.out.println(x);//37
    }
}
JDK7-数字字面量可以出现下划线

出现下划线其实就是方便看的,在实际开发中没实名特别大的意义。

public class JDK7NEW {
    public static void main(String[] args) {
        // 数字字面量可以出现下划线
        int y = 1_1123_1000;
        // 不能出现在进制标识和数值之间
        int z = 0x111_222;
        // 不能出现在数值开头和结尾
        int a = 0x11_22;
        // 不能出现在小数点旁边
        double d = 12.3_4;
    }
}
JDK7-switch 语句可以用字符串
public class ProxyTest {
    public static void main(String[] args) throws Exception {
        //创建键盘录入对象
        Scanner sc = new Scanner(System.in);

        //录入数据
        System.out.println("请输入你要判断的字符串:");
        String s = sc.nextLine();

        switch (s) {
            case "hello":
                System.out.println("你输入的是hello");
                break;
            case "world":
                System.out.println("你输入的是world");
                break;
            case "java":
                System.out.println("你输入的是java");
                break;
            default:
                System.out.println("没有找到你输入的数据");
                //break;
        }
    }
}
JDK7-泛型简化
public class JDK7NEW {
    public static void main(String[] args) {
        // 泛型简化
        ArrayList<String> array = new ArrayList<>();
    }
}
JDK7-异常的多个catch合并
JDK7出现了一个新的异常处理方案:
 		try{
  
  		}catch(异常名1 | 异常名2 | ...  变量 ) {
  			...
  		}
  
注意:这个方法虽然简洁,但是也不够好。
  			A:处理方式是一致的。(实际开发中,好多时候可能就是针对同类型的问题,给出同一个处理)类似的异常使用同一种处理方案。
 			B:多个异常间必须是平级关系。

代码演示

public class ExceptionDemo {
    public static void main(String[] args) {
        method();
    }
    public static void method() {
        int a = 10;
        int b = 0;
        int[] arr = {1, 2, 3};

        try {
            System.out.println(a / b);
            System.out.println(arr[3]);
        } catch (ArithmeticException | ArrayIndexOutOfBoundsException ae) {
            System.out.println("出问题了");
        }
        System.out.println("over");
    }
}
JDK7-try-with-resources 语句
try(必须是java.lang.AutoCloseable的子类对象){}
好处:
		资源自动释放,不需要close()了
		把需要关闭资源的部分都定义在括号就ok了
		主要是流体系的对象是这个接口的子类(看JDK7的API)

代码演示

public class JDK7NEW {
    public static void main(String[] args) {
        // try(必须是java.lang.AutoCloseable的子类对象){…}
        try {
            FileReader fr = new FileReader("a.txt");
            FileWriter fw = new FileWriter("b.txt");
            int ch = 0;
            while ((ch = fr.read()) != -1) {
                fw.write(ch);
            }
            fw.close();
            fr.close();
        } catch (IOException e) {
            e.printStackTrace();
        }

        // 改进版的代码
        try (FileReader fr = new FileReader("a.txt");
             FileWriter fw = new FileWriter("b.txt");) {
            int ch = 0;
            while ((ch = fr.read()) != -1) {
                fw.write(ch);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
城市应急指挥系统是智慧城市建设的重要组成部分,旨在提高城市对突发事件的预防和处置能力。系统背景源于自然灾害和事故灾难频发,如汶川地震和日本大地震等,这些事件造成了巨大的人员伤亡和财产损失。随着城市化进程的加快,应急信息化建设面临信息资源分散、管理标准不统一等问题,需要通过统筹管理和技术创新来解决。 系统的设计思路是通过先进的技术手段,如物联网、射频识别、卫星定位等,构建一个具有强大信息感知和通信能力的网络和平台。这将促进不同部门和层次之间的信息共享、交流和整合,提高城市资源的利用效率,满足城市对各种信息的获取和使用需求。在“十二五”期间,应急信息化工作将依托这些技术,实现动态监控、风险管理、预警以及统一指挥调度。 应急指挥系统的建设目标是实现快速有效的应对各种突发事件,保障人民生命财产安全,减少社会危害和经济损失。系统将包括预测预警、模拟演练、辅助决策、态势分析等功能,以及应急值守、预案管理、GIS应用等基本应用。此外,还包括支撑平台的建设,如接警中心、视频会议、统一通信等基础设施。 系统的实施将涉及到应急网络建设、应急指挥、视频监控、卫星通信等多个方面。通过高度集成的系统,建立统一的信息接收和处理平台,实现多渠道接入和融合指挥调度。此外,还包括应急指挥中心基础平台建设、固定和移动应急指挥通信系统建设,以及应急队伍建设,确保能够迅速响应并有效处置各类突发事件。 项目的意义在于,它不仅是提升灾害监测预报水平和预警能力的重要科技支撑,也是实现预防和减轻重大灾害和事故损失的关键。通过实施城市应急指挥系统,可以加强社会管理和公共服务,构建和谐社会,为打造平安城市提供坚实的基础。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值