java小白基础(四)

31、java异常分类
java异常分类如图所示:
在这里插入图片描述
Error:
Error类是指java运行时系统的内部错误和资源耗尽错误。应用程序不会抛出该类对象。如果出现了这样的错误,除了告知用户,剩下的就是尽力使程序安全终止。
Exception(RuntimeException和CheckedException)
RuntimeException:比如NullPointerException和ClassCastException,它是那些可能在java虚拟机正常运行期间抛出的异常的超类。如果出现这样的异常,一定是程序员的错误。
CheckedException:检查异常,一般是外部错误,这种异常都发生在编译阶段,java程序会强制编译器去捕获此类异常,也就是会出现要求你把这段可能出现异常的程序进行try-catch,该类异常一般包括以下几个方面:

  • 试图在文件结尾处读取数据
  • 试图打开一个错误格式的URL
  • 试图根据给定格式的字符串查找class对象,而这个字符串表示的类并不存在

32、Throw和Throws的区别
在这里插入图片描述
在这里插入图片描述
33、java反射
概念:运行时动态的获取类的信息和操作类的方法和属性。
获取Class对象方法:class.getClass()、class.forName()
java反射的功能:

  • 在运行时判断任意一个对象所属的类
  • 在运行时构造任意一个类的对象
  • 在运行时判断任意一个类所具有的成员变量和方法
  • 在运行时调用任意一个对象的方法

34、序列化
序列化可以将对象的状态写在流里进行网络传输、或者保存到文件、数据库等系统里。
注意:
(1)如果一个类能被序列化,那么它的子类也可以被序列化;
(2)被static修饰的属性和transient修饰的属性不会被序列化;
(3)对象的类名、属性会被序列化,但方法不会被序列化。

35、 Comparable接口和Comparator接口
在这里插入图片描述
36、LinkedHashMap与HashMap的区别

  1. LinkedHashMap 是HashMap 的子类
  2. LinkedHashMap 中的Entry 增加了两个指针before 和after,它们分别用于维护
    双向链接列表。
  3. 在put 操作上,虽然LinkedHashMap 完全继承了HashMap 的put 操作,但是在细
    节上还是做了一定的调整,比如,在LinkedHashMap 中向哈希表中插入新Entry的同时,还会通过Entry 的addBefore 方法将其链入到双向链表中。
  4. 在扩容操作上,虽然LinkedHashMap 完全继承了HashMap 的resize 操作,但是
    鉴于性能和LinkedHashMap 自身特点的考量,LinkedHashMap 对其中的重哈希过
    程(transfer 方法)进行了重写
  5. 在读取操作上,LinkedHashMap 中重写了HashMap 中的get 方法,通过HashMap
    中的getEntry 方法获取Entry 对象。在此基础上,进一步获取指定键对应的值。

37、Enumeration 接口和Iterator 接口的区别有哪些?
Enumeration 速度是Iterator 的2 倍,同时占用更少的内存。但是,Iterator 远远比Enumeration 安全,因为其他线程不能够修改正在被iterator 遍历的集合里面的对象。同时,Iterator 允许调用者删除底层集合里面的元素,这对Enumeration 来说是不可能的。

38、&与&&的区别
(1)&和&&都可以用作逻辑与运算符,表示逻辑与(and),当运算符两边的表达式的结果都为true时,整个运算结果才为true,否则,只要有一方为false,则结果为false。
(2)&&还具有短路的功能,即如果第一个表达式为false,则不再计算第二个表达式。
(3)&还可以用作位运算符,当&操作符两边的表达式不是boolean类型时,&表示按位与操作。

39、 try{}后面有finally语句块执行问题
try{}里有一个return语句,那么紧跟在这个try后的finally{}里的code会不会被执行,什么时候被执行,在return前还是后?
eg:

public class Test
{
       publicstatic void main(String[] args)
       {
              System.out.println(new Test().test());;
       }
       staticint test()
       {
              int x = 1;
              try
              {
                     return x;
              }
              finally
              {
                     System.out.println("finally块执行:" + ++x);
              }
       }
}

程序输出:
finally块执行:2
1
看到上面程序中finally块已经执行了,而且程序执行finally块时已经把x变量增加到2了。但test()方法返回的依然是1,这就是由return语句执行流程决定的,Java会把return语句先执行完、把所有需要处理的东西都先处理完成,需要返回的值也都准备好之后,但是还未返回之前,程序流程会转去执行finally块,但此时finally块中的对x变量的修改已经不会影响return要返回的值了。
0000000000000000000000000000000000000000000000
如果finally块里也包含return语句,那就另当别论了,因为finally块里的return语句也会导致方法返回。

public class Test
{
       public static void main(String[] args)
       {
              System.out.println(new Test().test());;
       }
       staticint test()
       {
              int x = 1;
              try
              {
                     return x++;
              }
              finally
              {
                     System.out.println("finally块执行:" + ++x);
                     return x;
              }
       }
}

程序在执行returnx++;时,程序会把return语句执行完成,只是等待返回,此时x的值已经是2了,但程序此处准备的返回值依然是1。接下来程序流程转去执行finally块,此时程序会再次对x自加,于是x变成了3,而且由于finally块中也有return x;语句,因此程序将会直接由这条语句返回了,因此上面test()方法将会返回3。

40、java8新特性有哪些
(1)访问接口default关键字
在java里面,我们通常都是认为接口里面是只能有抽象方法,不能有任何方法的实现的,那么在jdk1.8里面打破了这个规定,引入了新的关键字default,通过使用default修饰方法,可以让我们在接口里面定义具体的方法实现。[主要是为了定义默认的方法]
(2)Lambda 表达式
格式: (parameters参数) -> expression表达式或方法体
带有参数变量的表达式,是一段可以传递的代码,可以被一次或多次执行
(3)函数式接口
(4)方法与构造函数引用
jdk1.8提供了另外一种调用方式::,当你需要使用方法引用时,目标引用放在分隔符::前,方法的名称放在后面,即ClassName::methodName 。例如Apple::getWeight就是引用了Apple类中定义的方法getWeight。
(5)Date Api更新
(6)流
定义:流是Java API的新成员,它允许我们以声明性方式处理数据集合(通过查询语句来表达,而不是临时编写一个实现)。就现在来说,我们可以把它们看成遍历数据集的高级迭代器。此外,流还可以透明地并行处理,也就是说我们不用写多线程代码了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值