面试简答题汇总(一)

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

(1)抽象类是什么?

抽象类是用来表征对问题领域进行分析,设计中得出的抽象概念,是对一系列看上去不同,但本质上相同的具体概念的抽象。

通常在编译语句中用abstract修饰的类是抽象类。在c++中,含有纯虚拟函数的类称为抽象类,它不能创建对象;在java中,含有抽象方法的类称为抽象类,它同样也不能创建对象。

抽象类是不完整的,它只能用作基类。在面向对象方法中,抽象类主要用来进行类型隐藏和充当全局变量的角色。

(2)抽象方法(由子类具体实现)

java中的抽象方法就是以abstract修饰的方法,这种方法只声明返回的数据类型,方法名称和所需的参数,没有返回方法体,也就是抽象方法只需要声明而不需要实现。抽象方法不能被调用。

(3)抽象类为什么不能创建对象?

首先,与具体的类进行比较:抽象类不能实例化,并且不能使用new创建对象(如果使用,会导致编译时错误)。虽然一些变量和值在编译时的类型可以为抽象的,但是,这些变量和值必须为null,或者说含有对非抽象类的实例的引用(此非抽象类是从抽象类派生出来的),允许抽象类包含抽象成员。

其次,与接口进行比较:

相同点:(1)抽象类和接口都不能直接实例化(创建对象);

               (2)抽象类的子类(或接口的实现类),都必须实现抽象类(或接口)中全部的抽象方法,才可以被实例化,否                 则,该类仍然为抽象类

不同点:(1)关键字不同,抽象类子类使用extends关键字实现抽象类;接口实现是使用关键字implements来实现接口

              (2)抽象类中可以有构造方法;接口中不能有构造方法

              (3)抽象类中既可以有抽象方法也可以有普通方法;接口中只能有抽象方法

              (4)权限修饰不同:抽象方法可以有public,protected和default这些修饰符;接口方法只能是public

              (5)抽象类中的变量可以是普通变量;接口中定义的变量只能是公共的静态变量

              (6)抽象方法可以继承单个类和实现多个接口;接口可以多继承接口

              (7)速度:抽象类比接口的速度要快,接口稍微有点慢,需要时间去寻找在类中实现的方法

注意:

(1)一个类中如果有抽象方法,那么这个类只能是抽象类

(2)抽象方法要被实现,所以不能是静态的,也不能是私有的

(3)接口中只能含有未被实现的方法,也叫抽象方法;但是不能用abstract关键字修饰

总结:总的来说

1.子类更具体,父类更抽象 直接创建父类对对象本身没有意义

2.如果创建的是父类对象在调用的时候,调用的父类中的方法而非子类的方法,它违背了多态的思想和设计

3.因为父类引用指向子类对象时,调用的方法时子类重写的方法,一般父类中的描述不够具体,并不是说抽象类的构造方法没有意义,那么在创建子类对象时需要先调用父类的构造方法

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

(1)MySql语法顺序

select[distinct]

from

join (如left join)

on 

where

group by

having

union

order by

limit

(2)MySql执行顺序,即在执行sql按照下面顺序进行执行

from

on

 join

where

group by

having

select

distinct

union

order by

3.Statement和PreparedStatement的区别

 (1)什么是Statement:Statement是java执行数据库操作的一个重要方法,用于在已经建立数据库连接的基础上,向数据库发送要执行的SQL语句。

(2)Statement对象用于将SQL语句发送到数据库中,实际上有Statement有三种对象,Statement它们都作为在给定连接上执行SQL语句的包容器:Statement,PreparedStatement(它是由Statement上继承来的),CallableStatement(它从PreparedStatement继承来的)。它们都专用于发送特定类型的SQL语句:Statement对象用于执行不带参数的简单SQL语句;PreparedStatement对象用于执行带或不带参数的预编译的SQL语句;CallableStatement对象用于执行对数据库已存储过程的调用。

总结如下:Statement每次执行sql语句,数据库都要执行sql语句的编译,最好用于仅执行一次查询并返回结果的情形,效率高于PreparedStatement.但存在sql注入风险。PreparedStatement是预编译执行的。在执行可变参数的一条SQL时,PreparedStatement要比Statement的效率高,因为DBMS预编译一条SQL当然会比多次编译一条SQL的效率高。安全性更好,有效防止SQL注入的问题,有更好的可读性和可维护性。对于多次重复执行的语句,使用PreparedStatement效率会更高一点。

(3)PreparedStatement: 数据库会对sql语句进行预编译,下次执行相同的sql语句时,数据库端不会再进行预编译了,而直接用数据库的缓冲区,提高数据访问的效率(但尽量采用使用?号的方式传递参数),如果sql语句只执行一次,以后不再复用。 从安全性上来看,PreparedStatement是通过?来传递参数的,避免了因sql而出现sql注入的问题,所以安全性较好。 在开发中,推荐使用 PreparedStatement

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值