以下为一些面试可能会问到的问题

1.抽象类为什么不能创建对象 

抽象类就是作为父类用来继承的,抽象类的抽象方法没有实现,就算创建了调用也没用,无法编译。

与具体的类比较: 

  1. 抽象类不能直接实例化,并且对抽象类使用new运算符会导致编译时错误。(虽然一些变量和值在编译时的类型可以是抽象的,但是其值必须为null,或者含有对非抽象类的实例的引用)
  2. 允许抽象类包含抽象成员
  3. 抽象类不能被密封

与接口比较:

相同点:
不能实例化对象,包含未实现的方法声明、派生类必须实现未实现的方法,抽象类是抽象方法,接口则是所有成员(不仅仅是方法包括其他成员)
不同点:

  1. 可以实现很多个接口,但只能继承一个抽象类(解决多重继承)
  2. 抽象类当中可以存在非抽象的方法,可接口不能(它里面的方法只是一个声明,必须用public来修饰没有具体实现的方法)
  3. 抽象类中的成员变量可以被不同的修饰符来修饰,可接口中的成员变量默认的都是静态常量。
  4. 抽象类是对象的抽象,然而接口是一种行为规范。
  5. 接口只能做方法声明,抽象类中可以作方法声明,也可以作方法实现。
  6. 接口是设计的结果,抽象类是重构的结果
  7. 抽象类和接口都是用来抽象具体对象的,但是接口的抽象级别较高
  8. 抽象类主要用来抽象类别,接口主要用来抽象功能

2.SQL查询语句关键字的执行顺序

书写sql语句时各关键字的顺序:
select   from  where  group by   having   order by

执行顺序:
from  where  group by  having  select  order by

from:从哪张表检索数据

where:设置条件,过滤表中数据

group by:将上面过滤出的数据,进行分组

having:对上面已经分组的数据进行过滤的条件

select:指定查看结果集中的那个列或列的计算结果

order by:设置查看返回数据的方式

 3.Statement和PreparedStatement的区别  

1.Statement用于执行静态sql语句,在执行时,必须指定一个事先准备好的sql语句,也就是说sql语句是静态的。

2.PrepareStatement是预编译的sql语句对象,sql语句被预编译并保存在对象中。被封装的sql语句代表某一类操作,语句中可以包含动态参数“?”,在执行时可以为“?”动态设置参数值。

 

3.使用PrepareStatement对象执行sql时,sql被数据库进行解析和编译,然后被放到命令缓冲区,每当执行同一个PrepareStatement对象时,它就会被解析一次,但不会被再次编译。在缓冲区可以发现预编译的命令,并且可以重用。

PrepareStatement可以减少编译次数提高数据库性能。

本文地址:https://blog.csdn.net/qq_45879990/article/details/107322702