承接上文知识点 Java知识点总结(七)
编译时异常 运行时异常
NullPointerException:空指针异常 ArrayIndexOutOfBoundsException:数组下标越界 NumberFormatException:数字转换异常 IllegalArgumentException:参数不匹配异常 InstantiationException:对象初始化异常 ArithmeticException:算术异常
异常捕捉:try…catch…finally,异常抛出:throws。
继承一个异常类,通常是RumtimeException或者Exception
会执行,如果有finally,在finally之后被执行,如果没有finally,在catch之后被执行
Try块必须存在,catch和finally可以不存在,但不能同时不存在
Throw写在代码块内,throw后面跟的是一个具体的异常实例 Throw写在方法前面后面,throws后面跟的是异常类,异常类可以出现多个
Error和Exception都是java错误处理机制的一部分,都继承了Throwable类。 Exception表示的异常,异常可以通过程序来捕捉,或者优化程序来避免。 Error表示的是系统错误,不能通过程序来进行错误处理。
有,log4j是用来日志记录的,记录一些关键敏感的信息,通常会将日志记录到本地文件或者数据库中。记录在本地文件中,会有频繁的io操作,会耗费一些系统资源。记录在数据库中,会频繁地操作数据库表,对系统性能也有一定的影响。但是为了程序安全以及数据的恢复或者bug的跟踪,这点资源消耗是可以承受的。
由低到高:debug、info、wran、error
Java反射
通过new创建对象的效率比较高。通过反射时,先找查找类资源,使用类加载器创建,过程比较繁琐,所以效率较低
Coillection、Map。
List:线性表、Set:无序集合。
顺序存储、可以有重复值。
无须存储、不能有重复值。
ArrayList与LinkedList都实现了List接口。 ArrayList是线性表,底层是使用数组实现的,它在尾端插入和访问数据时效率较高, Linked是双向链表,他在中间插入或者头部插入时效率较高,在访问数据时效率较低
Array与ArrayList都是用来存储数据的集合。ArrayList底层是使用数组实现的,但是arrayList对数组进行了封装和功能扩展,拥有许多原生数组没有的一些功能。我们可以理解成ArrayList是Array的一个升级版.
以键值对存储数据 元素存储循序是无须的 不允许出现重复键
加载数据库驱动类 打开数据库连接 执行sql语句 处理返回结果 关闭资源
使用PreparedStatement类,而不是使用Statement类
使用CallableStatement
数据库连接是非常消耗资源的,影响到程序的性能指标。连接池是用来分配、管理、释放数据库连接的,可以使应用程序重复使用同一个数据库连接,而不是每次都创建一个新的数据库连接。通过释放空闲时间较长的数据库连接避免数据库因为创建太多的连接而造成的连接遗漏问题,提高了程序性能。
Dbcp,c3p0等,用的最多还是c3p0,因为c3p0比dbcp更加稳定,安全;通过配置文件的形式来维护数据库信息,而不是通过硬编码。当连接的数据库信息发生改变时,不需要再更改程序代码就实现了数据库信息的更新。
按功能来分 输入流(input),输出流(output) 按类型来分 字节流,字符流
File FileInputSteam, FileOutputStream BufferInputStream BufferedOutputSream PrintWrite FileReader FileWriter BufferReader, BufferedWriter ObjectInputStream ObjectOutputSream
以字节为单位输入输出数据,字节流按照8位传输 以字符为单位输入输出数据,字符流按照16位传输
性质不同 final为关键字; finalize()为方法; finally为区块标志,用于try语句中; 作用 final为用于标识常量的关键字,final标识的关键字存储在常量池中(在这里final常量的具体用法将在下面进行介绍); finalize()方法在Object中进行了定义,用于在对象“消失”时,由JVM进行调用用于对对象进行垃圾回收,类似于C++中的析构函数;用户自定义时,用于释放对象占用的资源(比如进行I/0操作); finally{}用于标识代码块,与try{}进行配合,不论try中的代码执行完或没有执行完(这里指有异常),该代码块之中的程序必定会进行;
抽象类: 抽象方法,只有行为的概念,没有具体的行为实现。使用abstract关键字修饰,没有方法体。子类必须重写这些抽象方法。 包含抽象方法的类,一定是抽象类。 抽象类只能被继承,一个类只能继承一个抽象类。 接口: 全部的方法都是抽象方法,属型都是常量 不能实例化,可以定义变量。 接口变量可以引用具体实现类的实例 接口只能被实现,一个具体类实现接口,必须实现全部的抽象方法 接口之间可以多实现 一个具体类可以实现多个接口,实现多继承现象
wait():让线程等待。将线程存储到一个线程池中。 notify():唤醒被等待的线程。通常都唤醒线程池中的第一个。让被唤醒的线程处于临时阻塞状态。 notifyAll(): 唤醒所有的等待线程。将线程池中的所有线程都唤醒。
