美文网首页
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