![24cf6c9528be4ee07c1572246f65fd14.png](https://i-blog.csdnimg.cn/blog_migrate/940ea668d4fe17168f3bcdd6031a44f6.jpeg)
【训练大纲009】
上午学习目标:
1. 掌握冒泡排序
2. 掌握二分法查找
3. 掌握什么是异常,异常的处理方式
1. 冒泡排序的优化算法
(1) 冒泡排序的基础算法有哪些缺点?
答:冒泡排序的基础算法的缺点:
1、内层循环次数重复
2、在数组本身有序的情况下,外层循环重复
3、内层循环变量temp每次循环都要开辟空间
(2) 可以从哪几个方面来对基础算法进行优化?
答:1、减少内层循环的次数。
2、通过Boolean变量是否有序,本身有序的话就跳出循环。
3、将内层循环的局部变量temp放大循环外部声明,避免每次循环都需要开辟空间。
2. 二分法
(1) 折半查找算法的原理是什么?
答:二分法查找的原理是将升序排列的数组通过索引下标折半与所要查找的元素进行比较,这样依次查找。
(2) 简述如何进行折半查找?
答:首先将数组从小到大进行排序,然后将需要查找的key值与数组中间位置上的元素的值进行比较,如果相等,则检索成功。否则,若key小,则在数组前半部分中继续进行二分法检索,若key值大,则在数组的后半部分中继续进行二分法检索。这样经过一次比较就缩小一半的检索空间,如此进行下去,直到检索成功或检索失败。
3. 异常概念_分类
(1) 什么叫异常?
答:异常(Exception 也称例外),就是在程序运行过程中所发生的不正常的事件,他会中断正在运行的程序。
(2) 请简述异常的分类?
答:异常分为运行时异常和检查时异常
4. 异常处理方式之一_捕获异常
(1) 捕获异常所使用的关键字有哪些?
答:try,catch,finally。
(2) try-catch-finally有几种结合形式,每种组合形式的执行顺序是什么?
答:try-catch-finally有三种结合形式:
1、try-catch组合:正常情况执行try中的语句,异常情况执行catch中的语句
2、try-finally组合:先执行try中的语句,无论是否发生异常,都执行finally中的语句。
3、try-catch-finally组合:正常情况执行try和finally中的语句,异常情况中,如果类型相匹配,执行try-catch-finally中的语句,如果类型不匹配执行try-finally中的语句。
5. 异常处理方式之二_声明异常
(1) 继承关系中如何声明异常?
答:1、父类的方法声明了Exception类型的异常,子类在重写的时候可以声明也可以不声明,但是如果子类重写后的方法使用了super关键字调用父类的方法,那么要求必须对异常进行处理。
2、如果父类的方法没有异常,但子类一定会有Exception 或checked异常,要求子类必须自己使用try-catch处理,或者给父类的方法加上异常的声明。
3、如果子类在重写父类的方法时产生的异常是RuntimeException异常时,那么可以不用处理。
(2) throw与throws的区别是什么?
答:1、throws用于声明方法可能会产生的异常类型,而throw是手动抛出异常对象
2、throws写在方法名称后面,throw写在方法里面。
下午学习目标:
1.掌握简单的异常处理方案,以及自定义异常
2.掌握什么是包装类,以及包装类的用法
3.掌握自动装箱,拆箱
4.掌握StringBuffer,StringBuilder的用法
5.掌握什么String类,Date类的用法
1. 常见简单异常的解决办法
(1) 请你列举出五个常见的运行时异常?
答:1、算数异常
2、空指针异常
2、类型转换异常
3、数组下标越界异常
4、期望数据类型与输入不匹配异常
(2) 请你列举出五个常见的检查时异常?
答:1、操作数据库异常:SQLException
2、输入输出异常:IOException
3、方法未找到异常:NoSuchMethodException
4、类未找到异常:ClassNotFoundException
5、数组格式异常:DataFormatException
2. 自定义异常
(1) 为什么需要自定义异常?
答:在程序中,可能会遇到任何标准异常类都没有充分的描述清楚问题,这种情况下可以创建自己的异常类。
(2) 自定义异常的步骤是什么?
答:1、继承Exception或RuntimeException
2、定义构造方法
3、使用异常
3. 包装类的基本用法
(1) 为什么需要包装类?
答:Java并不是一个纯面向对象的语言。Java语言是一个面向对象的语言,但是Java中的基本数据类型却是不面向对象的。但是在我们实际使用中经常需要将基本数据类型转化成对象,便于操作。比如:集合的操作中。这时我们就需要将基本数据类型转换成对象。
(2) 包装类的继承关系是什么?
答:如图
![98b55135fac1065ef9cd82a12cc7a9dc.png](https://i-blog.csdnimg.cn/blog_migrate/73d11e64e507b66890f58723a3de8046.jpeg)
4. 自动装箱和拆箱
(1) 请你简述什么叫自动装箱?什么叫自动拆箱?
答:自动装箱就是基本数据类型自动封装到与它相同类型的包装类中,称为自动装箱
自动拆箱就是包装类对象自动转成基本数据类型的数据。
(2) 请你简述Integer类中的内部类IntegerCache的作用?
答:Integer内部类中IntegerCache创建了一个从[-128,127]之间一共256个Integer类型的对象储存到数组cache中。在进行自动装箱时会先到cache数组中查找是否有包含相同值的Integer对象,如果有则直接引用,而不会在内存中开辟新的空间。
5. String类底层分析_JDK源码分析
(1) String类的底层数据结构是什么?
答:String类的底层结构是数组。
(2) 为什么String类的值只能被共享不能被更改?
答:因为String类底层是一个被final修饰的value[]数组,也就是常量(即只能被赋值一次)。
6. StringBuilder,Stringbuffer用法_jdk底层源码分析
(1) StringBuffer与StringBuilder的异同点是什么?
答:1、共同点:底层数据结构都是char类型数组,都是可变字符串。
2、不同点:StringBuffer是jdk1.0版,线程同步的安全性高,但是多线程操作时效率低,StringBuilder是jdk1.5版,线程不同步,在多线程操作时安全性低,但效率高。
(2) String与StringBuffer的异同点是什么?
答:String是不可变字符序列,StringBuffer是可变字符序列,它们底层都是通过数组来实现的。
7. 不可变字符序列和可变字符序列的使用陷阱
(1) String为什么称为不可变字符?
答:因为String对象被创建后,这个对象的状态不能被改变,包括对象的成员变量等都不能改变。
(2) StringBuffer与StringBuilder为什么称为可变字符?
答:因为StringBuilder和StringBuffer类是对原字符串本身操作的,可以对字符串进行修改而不产生副本拷贝或者产生少量的副本。
8. java.uitl.Date类
(1) 日期时间相关类有哪些?
答:如图:
![b8d93b0dc2abae63589facc55fd2ee1a.png](https://i-blog.csdnimg.cn/blog_migrate/d55a3bdc8f1c0e889873d621bdf78481.jpeg)
(2) java.util.Date类的子类有哪些?位于哪个包中?
答:java.util.Date类的子类有:
1、java.sql.Date
2、java.sql.Time
3、java.sql.Timestamp
位于java.sql包中。