zoukankan      html  css  js  c++  java
  • java学习day20-API-新特性

    IO资源释放

    概念:
    IO里为了资源一定会被释放,通常要写在finally语句块中,但是写起来非常复杂繁琐。

    ​ jdk7的新特性,把IO释放资源过程进行了优化,可以实现IO的自动资源管理。

    代码案例

    //这个类用来测试IO释放资源
    public class Test2_IO {
        public static void main(String[] args) {
    		 method();//jdk7.0前
             method2();//jdk7.0后
        }
        //jdk7.0后--try with resources
        private static void method2() {
            try(
                //读取资源
                InputStream in = new BufferedInputStream ( new FileInputStream("D:\iotest\1.txt")  );
                //写出资源
                OutputStream out = new BufferedOutputStream (  new FileOutputStream("D:\iotest\2.txt")   );
            ) {
                //边读边写
                int b;//记录读取到的数据
                while ((b = in.read()) != -1) {
                    out.write(b);
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        //jdk7.0前
        private static void method() {
            //因为finally里已经变量的作用范围,所以需要把变量的作用范围扩大。
            InputStream in = null;
            OutputStream out = null;
            try {
                //读取资源
                in = new FileInputStream("D:\iotest\1.txt");
                //写出资源
                out = new FileOutputStream("D:\iotest\2.txt");
                //边读边写
                int b;//记录读取到的数据
                while ((b = in.read()) != -1) {
                    out.write(b);
                }
            } catch (Exception e) {
                e.printStackTrace();
            } finally {//我有  必须要  执行的代码。
                //释放资源  --  怎么保证资源一定会被释放!!!
                try {
                    in.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
                try {
                    out.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
    

    集合工具类

    为Collection集合提供的工具类,提供了丰富的方法

    常用方法

    方法名 解释
    addAll(Collection<? super T> c, T... elements) 将所有指定的元素添加到指定的集合。
    max(Collection<? extends T> coll) 求集合中元素的最大值
    min(Collection<? extends T> coll) 求集合中元素的最小值
    static void``reverse(List<?> list) 反转指定列表中元素的顺序。
    sort(List<T> list) 对指定的列表进行排序。
    static void``swap(List<?> list, int i, int j) 交换指定列表中指定位置的元素。

    案例

    //这个类用来测试 集合工具类 Collections
    public class Test3_Collection {
        public static void main(String[] args) {
            List<Integer> list = new ArrayList<>();
            //1、没用工具类前,需要一个个往里添加元素
            //        list.add(1);
            //        list.add(2);
            //        list.add(3);
            //2、用了工具类,一次性向,指定集合中添加多个元素
            Collections.addAll(list,1,2,3,4,5);
            System.out.println(list);//[1, 2, 3, 4, 5]
    
            System.out.println( Collections.max(list)  );//获取指定集合中的最大值
            System.out.println( Collections.min(list)  );//获取指定集合中的最小值
    
            Collections.reverse(list);//把指定集合中的元素 反转
            Collections.sort(list);//给指定集合排序,从小到大
            Collections.swap(list,2,4);//将指定集合中的指定下标元素进行交换
    
            System.out.println(list);//[1, 2, 5, 4, 3]
    
        }
    }
    

    线程池

    概念:
    多线程可以提高程序的执行效率,因为提高了CPU的使用率。
    线程池优化了多线程的操作,比如:线程池提供已经new好的线程,并且会自动回收。实现线程的复用性。
    Executors工具类:辅助创建线程池

    创建对象 解释
    static ExecutorService newCachedThreadPool() 新建带有缓存的线程池
    static ExecutorService newFixedThreadPool(int nThreads) 新建固定大小的线程池
    static ExecutorService newSingleThreadExecutor() 创建一个线程

    ExecutorService工具类:执行一个或多个异步任务
    void execute(Runnable command) 在未来某个时间执行给定的命令

    测试案例

    //这个类用来测试 线程池
    public class Test4_ThreadPool {
        public static void main(String[] args) {
            //1、创建线程池对象 -- 参数是 线程池的大小(线程数)
            ExecutorService pool = Executors.newFixedThreadPool(3);
            //2、利用线程池执行线程任务
            //execute();//参数需要Runnable接口类型  --  我们直接传入  匿名对象+匿名内部类
            for (int i = 0; i < 3; i++) {  //4、循环3次,就会执行3次,因为execute执行了3次。
                pool.execute( new Runnable() {
                    @Override
                    public void run() {
                        for (int i = 0; i < 100 ; i++) {
                            System.out.println(Thread.currentThread().getName()+"==="+i);
                            //3、线程名:
    			//pool-1-thread-3===80   pool-1-thread-2===41  pool-1-thread-1===8
                        }
                    }
                }
           );
            }
    
        }
    }
    

    可变参数

    是jdk种的一个新特性,可以传入多个参数,可变参数本质上是一个数组,但是要出现在参数列表的最后位置

    案例演示

    package cn.tedu.bubble;
    
    import java.util.Arrays;
    
    //这个类用来测试 jdk新特性 -- 可变参数:反射中用到了Class工具类有体现!!
    public class Test5_Variable {
        public static void main(String[] args) {
            add(1,2);
            add(1,2,3);
            add(1,2,3,4,5);
        }
        //是方法名相同,但是参数列表不同的方法  --  叫方法的重载  --  出现的目的是提高程序的灵活性
        //1、...就是可变参数的体现,体现了参数的个数  省略不管。
        private static void add(int b,int...a) {//3、可变参数必须是参数列表中的最后一个
            //2、可变参数,为什么传入几个参数  a接收呢?---本质上a是数组  --  [I@1b6d3586
            System.out.println(a);
            System.out.println(Arrays.toString(a));//[1, 2, 3, 4, 5]
        }
    
    }
    

    lambda表达式

    Lambda 表达式(lambda expression)是一个匿名函数,Lambda表达式基于数学中的λ演算得名,直接对应于其中的lambda抽象(lambda abstraction),是一个匿名函数,即没有函数名的函数

    Lambda表达式:优化了匿名内部类的编写

    Lambda表达式要求接口中,只能有一个抽象方法。

    语法:(参数列表) -> {语句或语句块}

    代码展示

    public class Test6_Lambda {
        public static void main(String[] args) {
            //2、利用匿名对象  +  匿名内部类,使用接口的功能
            Demo d = new Demo(){
                @Override
                public void save() {
                    System.out.println("save()...");
                }
            } ;
            d.save();
            //3、Lambda表达式优化匿名内部类
            //      Demo d2 = (参数列表) -> { 方法体  } ;
            Demo d2 = () -> {  System.out.println("save()...lambda");  } ;
            //3.1、Lambda表达式没参数
            d2.save();
            Demo2 demo2 = (int x,int y) -> {  System.out.println(x+y); } ;
            //4、Lambda表达式有参数
            demo2.add(1,2);
            //4.1、把实参1 和 2 传递给了形参 x 和 y ,并打印求和的结果
    
            Demo3 demo3 = (int m,int n)->  { return m+n ;  } ; 
            //5、Lambda表达式有参数 有返回值,通过return把值返回
            System.out.println( demo3.add(5,10)  );
            //5.1、把实参5 和 10 传递给了形参 m 和 n ,求和,并返回结果
        }
    }
    interface Demo3{
        int add(int a,int b);
    }
    interface Demo2{
        void add(int a,int b) ;
    }
    //1、准备接口:Lambda表达式要求接口中,只能有一个抽象方法。
    interface Demo{
        void save ();
    }
    
  • 相关阅读:
    struts1 Hibernate3初学
    java学习笔记
    改良程序需要的11个技巧
    SharePoint 2010 PowerShell 系列 之 应用总结
    PowerPivot for excel 100 Create KPI
    Sharepoint 2010 控件系统 之 扩展 SaveButton
    Entity Framework 5 一个模型多个关系图 期待已久了
    PowerPivot for Sharepoint 2010 配制及常见错误
    SharePoint 2010 PowerShell 系列 之 应用总结 (二)
    Sharepoint 2010 控件系统 之 TextField、LookupField、NoteField、RichTextField、SaveButton
  • 原文地址:https://www.cnblogs.com/liqbk/p/12975973.html
Copyright © 2011-2022 走看看