final关键字
- 1)当final修饰类的时候,表示该类不能够被继承
- 2)当final修饰方法的时候,表示该方法不能被子类覆写
- 3)final修饰基本类型变量,表示该变量只有一次赋值机会
- 4)final修饰引用,表示该引用只有一次指向对象的机会
throw和throws的区别
- 1) throws 出现在方法声明上,而throw通常都出现在方法体内。
- 2) throws 表示出现异常的一种可能性,并不一定会发生这些异常;throw则是抛出了异常,执行throw则一定抛出了某个异常对象。
运行时异常与非运行时异常的区别
- 1)运行时异常是不可查异常,不需要进行显式的捕捉
- 2)非运行时异常是可查异常,必须进行显式的捕捉,或者抛出
所有的异常都是由Throwable继承而来,我们来看他下面的两个子类Error和Exception。
Error类描述了Java运行时内部错误和资源耗尽错误。应用程序不抛出此类异常,这种内部错误一旦出现,除了告知 用户并使程序安全终止之外,再无能无力。这种情况很少出现。
我们需要关心的是Exception以及其子类。在Exception之下又分为两个分支,RuntimeException和IOException。
由于程序错误导致的异常属于RuntimeException;而如果程序本身没有问题,但由于像I/O错误这类问题导致的异 常属于IOException。 Java语言规范将派生于Error类或RuntimeException类的所有异常称为非受查异常;所有的其他异常称为受查异常。
反射
获取类对象的三种方式
- 1)Class.forName(“类的绝对路径”)
- 2)类名.class
- 3)对象.getClass()
除了类名.class方式获取类对象,其它任何方式获取类对象,都会导致类属性被初始化
如何通过反射机制创建对象
- 1)获取类对象
- 2)通过类对象调用
getConstructor()
方法得到该类的构造器 - 3)通过构造器调用
newInstance()
方法实例对象
getField
和getDeclaredField
的区别
- getField 只能获取public的,包括从父类继承来的字段。
- getDeclaredField 可以获取本类所有的字段,包括private的,但是不能获取继承来的字段。 (注: 这里只能获取到private的字段,但并不能访问该private字段的值,除非加上setAccessible(true))
PreparedStatement VS Statement
- 1)Statement 需要进行字符串拼接,可读性和维护性比较差。PreparedStatement 使用参数设置,可读性好,不易犯错
- 2)PreparedStatement有预编译机制,性能比Statement更快
- 3)防止SQL注入式攻击
excute 和 excuteUpdate的区别
- 1)execute可以执行查询语句,然后通过getResultSet,把结果集取出来。executeUpdate不能执行查询语句
- 2)execute返回boolean类型,true表示执行的是查询语句,false表示执行的是insert,delete,update等等。executeUpdate返回的是int,表示有多少条数据受到了影响
泛型通配符(? extends、? super、?)
- ?extends:该集合存放的元素是?extends所跟泛型,或者该类型的子类泛型,只能取而不能存
- ?super:该集合存放的元素是?super所跟泛型或者其父类泛型,只能存不能取
- ?:泛型通配符? 代表任意泛型。既然?代表任意泛型,那么换句话说,这个容器什么泛型都有可能,所以只能以Object的形式取出来,并且不能往里面放对象,因为不知道到底是一个什么泛型的容器。如果希望,又能插入,又能取出,就不要用通配符?。