美文网首页
java核心类库(下)

java核心类库(下)

作者: 极速魔法 | 来源:发表于2020-06-21 14:40 被阅读0次

    java核心类库(下)

    Throwable

    Error

    Expection

    • RuntimeExpection,非检测性异常
      1.ArthiMathicException
      2.ClassClastException
      3.NullPoniterException
      4.ArrayIndexOutofBoundsException
      5.NumberFormatException e.g. Integer.parseInt(“123a”)
    • IOExpection 和其它异常,统称其它异常

    自定义异常

    package com.lagou.task16;
    
    public class AgeException extends Exception {
    
        static final long serialVersionUID = 7818375828146090155L; // 序列化的版本号  与序列化操作有关系
    
        public AgeException() {
        }
    
        public AgeException(String message) {
            super(message);
        }
    }
    

    throws

    子类重写的方法 不能抛出更大的异常,不包括平级异常(子类重写的方法可以不抛出异常)

    父类不抛出异常子类重写方法 里面用try catch 处理。

    File

    File f = new File(“d:/a.txt”)
    f.exists()
    f.getName()
    createNewFile()
    delete() // 删除文件或删除目录,删除一层空目录
    listFiles(FileFilter fileFilter) // fileFilter接口

    IO流

    节点流 直接和流关联的

    处理流 建立在节点流基础上的流

    image

    FileReader

    int read() // 读取单个字节,返回读取的字符 int 表示 (char) 强转
    int read(char[] cbuf,int offset,int length) // The number of characters read

    FileInputStream

    available() //获取读取的文件大小 字节为单位

    DataOutPutStream/DataInputStream

    基本数据类型写入/读取 输出流

    序列化

    对象需要存储的信息有效组织成字节序列的转化过程

    版本号 反序列化 jvm会把传来的字节流中的serialVersionUID 与本地 实体类的serialVersionUID比较。

    transient

    修饰的成员变量不被序列化

    Thread

    线程的生命周期

    image

    Thread.currentThread() // 获取当前正在执行的线程

    Thread.sleep() // 重写父类Thread 的run() 方法不抛出异常,父类中没有抛出异常,子类重写不能抛出更大的异常

    getPriority() // 最大优先级 10 ,normal 5 优先级高的线程不一定先执行,获取到时间片机会更多

    子线程启动之前设置为守护线程

    子线程设为/守护线程/,主线程结束,子线程也随之结束

    synchronized 方法 等价 synchronized(this){ } ,this指代 target

    synchronized static 等价于 synchronized(xx.class) { }

    • 同步块对同一个锁对象引用
    • 减少同步范围提高并发效率

    当前线程进入wait() 阻塞状态,自动释放锁,要求在锁定的代码中调用

    Callable

    1. implements Callable 重写 call()方法,
    ThreadCallableTest tct = new ThreadCallableTest();
    FutureTask ft = new FutureTask(tct);
    Thread t1 = new Thread(ft); // 实例化Thread
    t1.start();
    
    ft.get() // 获取返回值
    

    反射

    运行阶段创建对象并调用方法

    Class类是描述类和接口的信息,也就是一种数据类型,Class实例由java虚拟机和类加载器自动构造完成,本质是加载到内存中的运行时类。

    获取Class对象

    1.数据类型.class
    2.对象.getClass()
    3.包装类.TYPE // 获取基本数据类型
    4.forName() // Class.forName(“java.lang.String”),要求完全限定名包名.类名,不能获取基本数据类型
    5.类加载器,

    ClassLoader class = ClassTest.class.getClassLoader();
    Class c = class.loadClass("java.lang.String");
    

    Constructor

    Class c1
    Constructor constructor  = 
    c1.getConstructor(String.class,int.class); // 有参数构造方法
    constructor.newInstance("zhangfei",30); // 调用构造方法
    
    getModifiers() //构造方法访问修饰符
    getName() // 构造方法名称
    getParameterTypes() // 构造方法参数类型
    
    

    Field

    /*
    1. 获取Class对象
    2. 获取有参数构造方法
    3. 有参构造得到实例对象
    4. 根据Class对象获取对应成员变量信息
    4. 根据Class对象获取对应成员变量信息
    
    */
    // 1. 获取Class对象
    Class c1 = Class.forName("xxx.Person");
    
    //2. 获取有参数构造方法
    Constructor cs = c1.getConstructor(String.class,int.class);
    
    //3. 有参构造得到实例对象
    Object object = cs.newInstance("zhangfei",30);
    
    // private String name 成员变量,传入成员变量名称
    Field field = c1.getDeclaredField("name");
    
    field.get(object);
    
    // 修改
    field.set(object,"guanyu");
    

    Method

    // 1.获取Class对象
    Class c1 = Class.forName("xxx.Person");
    
    //2. 获取有参数构造方法
    Constructor cs = c1.getConstructor(String.class,int.class);
    
    //3. 有参构造得到实例对象
    Object object = cs.newInstance("zhangfei",30);
    
    //4.Class对象获取对应的成员方法
    Method method = c1.getMethod("getName");
    
    // 5.调用方法 。表示object对象调用 method方法,也就是调用 getName方法
    method.invoke(object);
    
    
    getModifiers() 
    getReturnType() //返回值类型
    getName() //方法名称
    getParameterTypes() // 成员方法参数类型
    getExceptionTypes() // 异常类型
    

    相关文章

      网友评论

          本文标题:java核心类库(下)

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