美文网首页
2019-08-17

2019-08-17

作者: 金城务工 | 来源:发表于2019-08-17 17:37 被阅读0次

    第三周 Java API

    2019.8.12

    学习多看源码

    System
    • System.curremtTimeMillis(),可以用来计算程序运行时间,t2-t1
    • arraycopy(src, srcPos, dest, destPos, length)
    Stirng
    • string中有一个final char[] value 数组储存字符,不可变
    • 字符串转码构造方法,String(byte[], String Charset),string.getBytes(),“UTF-8”
    • String.format()格式化
    • equals(),equalsIgnoreCase() 忽略大小写
    • startWith()、endWith()
    • indexOf,找不到返回-1;lastIndexOf:从后向前找
    • length()
    • replace、replaceAll、split、subString(begin)/(begin,end)不包括end
    • toUpperCase、toLowerCase,trim前后两端的空格
    • Character.isDigit()数字,isLetter()字母
    StringBuffer、StringBuilder
    • append(),拼接比较快,String不可变效率低
    • StringBuffer,加锁,线程安全,使用多线程环境
    Arrays
    • sort;binarySearch:对一个已排序的数字,二分查找;asList,stream
    Math
    • floor向下取整,ceil向上取整,round四舍五入
    • max,min,sqrt开方,pow幂
    • random,double型
    Random
    • nextInt(int bound),bound范围[0,bound),nextInt() 不带参生成的数有负数
    • Random(seed)有seed参数构造的,每次生成规律都一样,不带参以时间为seed更随机
    UUID
    • UUID.randomUUID().toString() 不知道为什么很慢,一秒多
    • 空的00: new UUID(0,0)
    Date、Calender
    • Date已弃用
    • get(Calender.YEAR)。。。,月从0开始,set()year。month。。。

    接口,集合

    2019.8.13
    Iterable
    • 实现迭代接口,对集合foreach循环,lang包

    • 实现 public Itereaor iterator()方法,util包

      • Iterator 得实现 public boolean hasNext():有没有下一个
      • public <T> next():获取下一个
    • 设计模式中的迭代器模式

      foreach遍历时候,删除会报错,迭代器实现,或者集合的removeIf()方法

      // 迭代器 遍历删除
      Iterator<String> iterator=list.iterator();
      while (iterator.hasNext())
      {
        String name=iterator.next();
        if(name.startsWith("t"))
            iterator.remove();
      }
      
      //// removeIf(t->t.startWith("t")) 实现
      
    • Collection的遍历

    • /**
      * Student实体类,重写了toString
      * Klass班级,内有个student数组
      * 
      */
      Klass impelements Iterable<Student>{
          //。。。add(),count计数 students[]
          @Override
          public Iterator iterator<Student>()
          {
              return new Iterator<Student>(){
                  int index=0;
                  @Override
                  public boolean hasNext(){
                      return index<count;
                }
                  public Student next()
                  {
                      return studens[index++];
                }
              };
        }
      }
      //lambda遍历klass1.forEach( System.out::println );
      
    Comparable
    • 可比较接口,有比较能力的实体直接实现
    • compareTo(T t),小于t 返回负数,等于0,大于整数
    • stu1.compareTo(stu2)
    Compartor
    • 提供比较策略,单独写个比较器类实现接口——>匿名内部类——>lambda
    • compare(T t1,T t2);t1>t2 返回整数,等于返回0,小于返回负数
    • equals()默认被父类Object实现了
    • 策略模式
    • 在需要保证顺序的集合中,存储的元素是具有比较能力
    Cloneable,克隆
    • 表示克隆能力,实体类中实现,不需要实现方法
    • 重写Object父类 clone(),扩大范围为public,super.clone(),抛异常直接调用;native 方法效率更高?
    • 浅拷贝,深拷贝
      • 浅拷贝:简单类型(数值型,String)直接拷贝值,引用类型拷贝地址
      • 深拷贝:全拷贝值,拷贝出独立的
    • 所有 引用属性 都需要实现接口,改变
    • 设计模式之原型模式
    集合框架
    • 处理若干元素(单个,键值对),也称容器

    • 泛型JDK1.7提供钻石语法,前面写了<T>,后面就不用写<>中的内容

    • Collection:add、contians()调用equals比较判断、size、isEmpty、remove()删除所有和对象equals的元素、retain(保留,删除剩余)、Object[] toArray()、T[] toArray()

      • List:ArrayList、LinkedList、Vector<—Stack
        • ordered有序,索引定位,search,允许重复
        • add(index,element),get(index),indexOf(),lastIndexOf(),remove(index),remove(obj)多个相同元素只会删一个,set(index,elment)修改,default void sort(Comparator<t> c),subList(fromIndex,toIndex)
        • index不能越界
      • Set:HashSet、TreeSet...
      • Queue
        • Deque
    • Map

      • HashMap:很复杂。。。
      • Hashtable...

    2019.8.14
    LinkedList
    • 实现了List,Deque,双向循环链表

    。。数到三cut。。。。。。。。。

    Vector
    • 实现和ArrayList差不多
    • 加锁,线程安全
    区别
    • ArrayList、Vector数组实现,连续存储;LinkedList双向循环链表
    • 数组查询快,增删链表快
    • Vector线程安全,效率低,有其它替代方案(JDK1.5)
    HashSet
    • 数学集合;不可重复;无序
    • hashMap实现
    • equals 和 hash比较重复,重复添加返回false
    • 重写equals()时,同时重写hashCode()
    • 快速去重 HashSet(Collection c)
    TreeSet
    • 基于TreeMap实现,红黑树,自平衡二叉查找树,左边小右边大
    • 保证顺序,元素实现了Comparable,或者构造时传入Comparator
    Map
    • put(key,value),get(key)

    • put key相同(hash和equals),会更新value

    • Collection values(),获取所有值,Set keySet()所有键

    • Set< Map.Entry<K,V> > entrySet()所有获取键值,遍历

      for(Map.Entry<K,V> m: map.entrySet)
      { System.out.print(m.getKey()+":"+m.getValue());
      }
      for(K key:map.keySet())
      {
          System.out.print(key+":"+map.get(key));
      }
      // lambda遍历
      map.forEach((key, value) -> {
                  System.out.println(key + ":" + value);
              });
      
    • Hashtable,和HashMap区别

      • Hashtable 加锁线程安全,效率低
      • Hashtable的 键值 都不能为null,HashMap可以,会对hash值赋0
      • HashTable继承了Dictioary类(已遗弃),HashMap继承AbstractMap
      • HashMap的初始容量为16,Hashtable为11,负载因子都为0.75
      • 迭代器不同,Map为Iterator,table为Enumerator,map迭代是修改元素会报错,table不会
    • Properties

      • Hashtable的子类;键值都是String

      • Store(oStream):存入文件;load(iStream,String 注释 ):载入配置

      • 文件采用 .properties 格式

      • 它是唯一一个能与IO流交互的集合,load(InputStream in)。。。

      • Properties prop=new Properties();
        prop.setProperty("key","value");
        // ...
        // 创建流
        FileWriter out=new FileWriter("prop.properties");
        prop.store(out,"注释信息");// 存入文件
        out.close();// 关闭流
        /*
        * 载入
        */
         // 创建流对象
        FileInputStream in = new FileInputStream("prop.properties");
        // FileReader in = new FileReader("prop.properties");
        prop.load(in);// 载入文件
        in.close();// 关闭流
        System.out.println(prop);
        
        
    • Collections

      • void reverse(List list):反转

      • void shuffle(List list):随机排序,洗牌

          for (int i=size; i>1; i--)
               swap(list, i-1, rnd.nextInt(i));// 
        
      • swap(list,int,int):交换list两个位置的元素

      • void sort(List list):按自然排序的升序排序,void sort(List list, Comparator c)

      • void swap(List list, int i , int j):交换两个索引位置的元素

      • void rotate(List list, int distance):旋转。当distance为正数时,将list后distance个元素整体移到前面。当distance为负数时,将 list的前distance个元素整体移到后面


    异常

    2019.8.15

    Throwable父类 :Exception,Error

    Exception:
    • RuntimeException,IOException,SQLException...

    • 可以捕获处理的

    • RuntimeException:

      • 属于运行时异常(非受检unchecked异常)

        其他异常为受检异常(checked),必须处理

      • IndexOutOfBoundsException、ClassCaseException,NullPointerException...

    关键字
    • try catch finally

      • 可以多重catch,按顺序catch
      • finally 正常异常都会执行,一般用于关闭资源(File,DateBase)
      try{
      
      } catch(ArrayIndexOutOfBoundsException e){
      
        //  e.printStackTrace();  定位错误
      
      }catch(ClassCaseException e){
          
      }catch(Exception e){
          
      }finally{
          
      }
      // JDK7  一个catch里多个异常时候 
      try{
          
      }catch(IOException|ClassNotFoundException e){
      }
      // 也可以只有try finally
        try{ 
        }finally{
        }
      
      
      
      
    • throw 一般在方法中,发生异常时,抛出一个异常实例

    • throws 用户方法声明时,表示该方法可能抛出异常,可以抛出多个

    受检异常于非受检异常区别
    • 受检异常,必须处理或者抛出
    • 非受检异常,语法上可以不处理
    自定义异常
    • 继承Exception 或者RunTimeException
    • 实现所有父类构造方法

    try catch的坑

    • 如果程序是从try代码块或者catch代码块中返回时,finally中的代码总会执行。而且finally语句 return语句执行之后** ,return返回之前 执行的。
    • finally 中有返回的时候,会返回finally中的,编译器会警告
    function1()
    {
        try{
            return 1; // 1/0
        }catch{
            return 2;
        }finally{
            return 3;
        }
        //都会返回3;
    }
    
    • 如果try和catch的return是一个变量时且函数的是从其中一个返回时,后面finally中语句即使有对返回的变量进行赋值的操作时,也不会影响返回的值
    function2()
    {
        int x=1; // Object obj=new Object();
        try{
            return x; 
        }catch{
            return x+1;
        }finally{
          ++x;  // obj=null;
        }
       return x; // 返回1;    返回obj不为空
    }
    

    try-with-resources

     try(
     
     InputStream is = new FileInputStream("...");
     
     OutputStream os = new FileOutputStream("...");
     
     ){ 
       // ...
     }catch(Exception e){
     
     }
     // 自动关闭
    
    • try块退出时,会自动调用res.close()方法,关闭资源
    • 语法:try()的括号中可以写多行声明,每个声明的变量类型都必须是Closeable的子类,用分号 ’ ; ‘ 隔开。就不需要finally了
    • Java 7 的编译器和运行环境支持新的 try-with-resources 语句,称为 ARM 块(Automatic Resource Management) ,自动资源管理。带有resources的try语句声明一个或多个resources。resources是在程序结束后必须关闭的对象。try-with-resources语句确保在语句末尾关闭每个resources。任何实现java.lang.AutoCloseable,包括实现了java.io.Closeable的类,都可以作为resources使用
    BigDecimal
    • 构造用String更精确,double还是不精确
    Eclipse
    • 选中代码,右键重构(refactor),生成方法(extract method)
    • Ctrl+Shift+T,查找类,包括源码

    IO

    2019.8.16

    操作文件系统;操作流:文件内容,网络编程

    File类
    • File.separator,分割符常量,目录的 ’ \ ‘ 或者 ‘ / ’

    • 相对路径,相对java项目根目录的路径

    • isFile,isDirectory

    • String[] list():得到文件夹里的文件名 ,目录名

    • File[] listFiles():获取文件,和目录

    • mkdir(),已存在返回false,只能创建单层目录;mkdirs()创建多层次目录

    • createNewFile() ;deleteOnExit()程序退出时删除

    • 打开本地文件夹弹窗

      Runtime.getRuntime().exec("cmd /c start explorer D:\\");
      
    InputStream,OutputStream
    • FileInputStream:read(byte[] data,int start,int length),读

    • FileOutputStream:write(byte[] data,int start,int length),写

    • close也会异常

      File file=new File("E:\\FileTest\\1.txt");
      File file2=new File("E:\\FileTest\\1.txt");
      
      Byte[] data=new Byte[1024];
      int len=0;
      try(
          // 构造也可以是string
        InputStream is=new FileInputStream(file);
          // 执行这句话就会创建文件
        OutputStream os=new FileOutputStream(file2);
      ){
        // 写入 流,流过就没了,read会从刚才位置开始,读入data
        while( (len=is.read(data,0,data.length)) !=-1 )
        {
            os.write(data,0,len);
        }
      }catch(Exception e){
          e.printStackTrace();
      }
      
    Reader,Writer
    • BufferReader(Reader r),BufferWriter(Writer w)字符独写,兄弟类FileWriter,FileReader,去构造
    • 装饰器模式
    Serializable
    • 可持续化接口:内存对象持久化,RMI远程方法调用

    • 对象写入硬盘,从硬盘读取对象

    • transient ,瞬时 标记后不能持久化

    • priavte static final long seriVersionUID,版本号,不加版本号,有默认版本号,修改class之后,两次版本号不同,反序列化会出错。保证反序列化版本一致。

    • ObjectOutputStream ( FileOutputStream(String)).writeObject(obj)

      ObjectInputStream ( FileInputStream(String)).redaObj()

    TODO

    ​ excel独写,断点续传


    2019.8.17
    Runtime
    • 查看内存,硬盘,系统监控

    • exec 调用命令行

    RandomAccessFile
    • 随机访问文件,从文件任意位置访问

    相关文章

      网友评论

          本文标题:2019-08-17

          本文链接:https://www.haomeiwen.com/subject/eweksctx.html