Java教程

Java基础3

本文主要是介绍Java基础3,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

1.关于final关键字的总结

  1. 对于一个final变量,如果是基本数据类型的变量,则其数组一旦在初始化之后便不能更改;如果是引用类型的变量,则再其初始化之后便不能在让其指向另一个对象。
  2. 当用final修饰一个类的时候,表明这个类不能被继承。final类中的所有成员方法都会被隐式地指定为final方法。
  3. 使用final方法的原因有两个。第一个原因是把方法锁定,以防止任何继承类修改它的含义;第二个原因是效率。

2.介绍一下Synchronized锁,如果用这个关键字修饰一个静态方法,锁住了什么?如果修饰成员方法,锁住了什么?

  • Synchronized是Java关键字,当他用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码。
  • 锁静态方法:用法是锁的是类,线程想要执行对应同步代码,需要获得类锁。
  • 修饰成员方法:线程获取的是当前调用的Sy'n

3.Synchronized与lock的区别

  • Lock是一个接口;而synchronized是Java中的关键字,是内置的语言实现的。
  • synchronized在发生异常的时候,会自动释放线程的锁,因此不会导致死锁现象产生;
  • Lock在发生异常时,如果没有主动通过unlock()去释放锁,则可能会造成死锁现象;
  • 使用Lock的时候,需要在finally块中释放锁。
  • Lock可以让等待锁的线程响应中断,而synchronized不行,使用synchronized时,等待线程会一直等下去,不能够去响应中断。
  • 通过Lock可以知道有没有成功获取锁,而synchronized无法办到。

4.介绍一下volatile

volatile关键字是用来保证有序性和可见性。有序性实现的是通过插入内存屏障来保证的。

5.列举一下Object类的方法

  • clone()创建并返回此对象的一个副本;
  • finalize()当垃圾回收器确定不存在对该对象的更多引用的时候,由对象的垃圾回收器调用此方法。
  • getClass()返回一个对象的运行类;
  • notify()唤醒在此对象监视器上等待的单个线程;
  • toString()返回该对象的字符串表示;

6.Comparable和Comparator接口是干什么的?

Comparable接口只包含了一个compareTo()方法,这个方法可以给两个对象排序。

Comparator接口包含了compare()和equals()两个方法;compare()用来给两个输入参数排序,返回负数,0,正数表明第一个参数是小于,等于,大于第二个参数。

7.final,finally,finalize的区别

  • final用于声明属性,方法,类,分别表示属性不可变,方法不可覆盖,类不可继承。
  • finally是异常处理语句结构的一部分。
  • fianlize是Object类的一个方法,在垃圾收集器执行的时候会被调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源。

8.Java语言异常处理的五个关键词

用try来指定一块预防所有“异常”的程序。紧跟在try后面,应包含一个catch字句来指定你想要捕捉的“异常”类型。throw语句用来明确抛出一个“异常”,throws用来表明一个成员函数可以抛出的各种异常。finally为确保一段代码不管发生什么异常,都被执行一段代码。

9.内部类可以使用他包含类的成员吗?有没有什么限制?

一个内部类对象可以访问创建它的外部类对象的内容。内部类如果不是static的,那么它可以访问创建它的外部类对象的所有属性;内部类如果是static的,即为nested class,那么它只可以访问创建它的外部类对象的所有static属性。

一般普通类只有public或package的访问修饰,而内部类可以实现static,protected,private等访问修饰,当从外部类继承的时候,内部类是不会被覆盖的。

10.请问Query接口的list方法和iterate方法有什么区别?

  1. list()方法无法利用一级缓存和二级缓存(对缓存只写不读),它只能开启查询缓存的前提下使用查询缓存;iterate()方法可以充分利用缓存,如果目标数据只读或者读取频繁,使用iterate()方法可以减少性能开销。
  2. list()方法不会引起N+1查询问题;而iterate()方法可能会引起;

11.BIO,NIO,AIO有什么区别?

  • BIO(BlockingI/O):同步阻塞I/O模式,数据的读取写入必须阻塞在一个线程内等待其完成。适合低负载、低并发的应用程序
  • NIO(Non-blocking/New I/O):NIO是一种同步非阻塞的I/O模型,支持面向缓冲的,基于通道的I/O操作方法。用于高负载、高并发的应用
  • AIO:异步非阻塞模型
这篇关于Java基础3的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!