经过了一段时间的学习,也整理了一些自己做过的、错过的习题,就打算另起一贴,每日将我日常学习的记录以习题的形式记录下来。
1.在 JAVA 编程中, Java 编译器会将 Java 程序转换为( )。
A.字节码
B.可执行代码
C.机器代码
D.以上都不对
解析:
编译器将Java源码编译成字节码.class文件,A正确。
类加载到JVM中后,执行引擎把字节码转化为可执行代码,B错误。
执行的过程中,可执行代码会被转换为机器代码,用于底层操作系统执行。
2.我们在程序中经常使用“System.out.println()”来输出信息,语句中的System是包名,out是类名,println是方法名。
A.正确
B.错误
解析:
System是java.lang中的一个类,out是System类中的一个静态成员变量,也是java.io.PrintStream类的对象,println()是java.io.PrintStream类的方法,所以题干错误。
3.以下哪项陈述是正确的?
A.垃圾回收线程的优先级很高,以保证不再使用的内存将被及时回收
B.垃圾收集允许程序开发者明确指定释放哪一个对象
C.垃圾回收机制保证了JAVA程序不会出现内存溢出
D.进入“Dead”状态的线程都将被垃圾回收器回收
E.以上都不对
解析:
垃圾回收线程的优先级非常低,A错。
垃圾收集器程序开发者只能推荐JVM进行回收,但何时回收,回收什么,程序员无法控制,B错。
垃圾回收机制只是保证将不再使用的JVM内存进行回收,对于程序bug导致的内存溢出则无法避免,C错。
进入Dead状态的线程还可以被恢复,所以不会被回收,D错。选E。
4.抽象类方法的访问权限默认是public。
A.正确
B.错误
解析:
在JDK1.8之前,抽象类的方法默认访问权限为protected
JDK1.8时,抽象类的方法默认访问权限变为default。
所以题干描述错误,B。
5.在JAVA中,假设A有构造方法A(int a),则在类A的其他构造方法中调用该构造方法和语句格式应该为()
A. this.A(x)
B. this(x)
C. super(x)
D. A(x)
解析:
this.A(x)为调用普通方法的写法,A错。
super(x)为调用父类构造方法的写法,C错。
A(x)为调用静态方法,D错。选B。
6.以下语法结构正确的是?
A. public class A extends B implements C
B. public class A implements A B
C. public class A implements B,C,D
D. public implements B
解析:
A为标准写法,public class A extends B implements C,正确。
B错误,implements 是实现接口类,而A同时是class又是implements,前后矛盾。
C正确,一个类可以实现多个接口。
D错误,implements是实现接口关键字,缺少定义或继承的类名。
选A,C。
7.下面那些情况需要使用抽象类?
A.当一个类的一个或多个方法是抽象方法时
B.当类是一个抽象类的子类,且不能为任何抽象方法提供任何实现细节或方法体时
C.当一个类实现多个接口时
D.当一个类实现一个接口,并且不能为任何抽象方法提供实现细节或方法时
解析:
1.一个类中存在抽象方法时,必须定义为抽象类
2.抽象类中的抽象方法必须由其子类实现,若子类不能实现则子类也必须是抽象类
3.类实现一个接口就必须实现其中所有的抽象方法,若该实现类不能实现接口中的所有方法则实现类定义为抽象类
选ABD
8.下列关于继承的描述正确的是()
A.在Java中允许定义一个子类的引用,指向父类的对象。
B.在Java中一个子类可以继承多个抽象类,在extends关键字后依次列出,用逗号隔开。
C.在Java中类的继承是通过extends关键字来描述的,而且只允许继承自一个直接父类。
D.在Java中抽象类之间不允许出现继承关系,所有的抽象类都相互独立。
解析:
父类的引用直接指向子类的对象,即向上转型;当子类的引用直接指向父类的对象时,则需要强制转换。A错。
类都是单继承。B错。
抽象类也可以继承。D错。选C。
9.下列叙述错误的是( )
A.在接口中定义的方法除了default和static关键字修饰的方法拥有方法体,其他方法都应是没有方法体的抽象方法(JDK1.8以后)
B.一个java类只能有一个父类,但可以实现多个接口
C.在类声明中,用implements关键字声明该类实现的接口
D.定义接口时使用implements关键字。
解析:
A、JDK8开始,接口中可以定义有方法体的方法,方法必须被default和static修饰。除此之外,其他方法都是抽象方法。正确。
B、Java的语法是单继承,但是继承可以传递。其实B更准确一点是只能有一个直接父类。正确。
C、继承用extends,实现用implements。先继承后实现。正确。
D、定义类是class,定义接口是interface。错误。
10.访问权限控制从最大权限到最小权限依次为:public、 包访问权限、protected和private 。( )
A.正确
B.错误
解析:
public>protected>默认(包访问权限)>private,因为protected除了可以被同一包访问,还可以被包外的子类所访问。所以描述错误。
11.一个文件中的数据要在控制台上显示,首先需要( )。
A. System.out.print (buffer[i]);
B. FileOutputStream fout = new FileOutputStream(this.filename);
C. FileInputStream fin = new FileInputStream(this.filename);。
D. System.in.read(buffer)。
解析:
一个文件中的数据要在控制台显示,首先需要获取文件中的内容,使用FileInputStream fin = new FileInputStream(this.filename);选C。
12.在一个基于分布式的游戏服务器系统中,不同的服务器之间,哪种通信方式是不可行的()?
A. 管道
B. 消息队列
C. 高速缓存数据库
D. 套接字
解析:
管道( pipe ):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。不同服务器之间进行通信时,不存在具有沁园关系的进程,所以不能使用管道的通信方式。A错。
13.有关finally语句块说法正确的是( )
A.不管catch是否捕获异常,finally语句块都是要被执行的
B.在try语句块或catch语句块中执行到System.exit(0)直接退出程序
C.finally块中的return语句会覆盖try块中的return返回
D.finally 语句块在 catch语句块中的return语句之前执行
解析:
如果try语句里有return,那么代码的行为如下:
1.如果有返回值,就把返回值保存到局部变量中
2.执行jsr指令跳到finally语句里执行
3.执行完finally语句后,返回之前保存在局部变量表里的值
如果try,finally语句里均有return,忽略try的return,而使用finally的return.
D中的描述,finally语句块应在catch语句块中的return语句执行完成前执行,return表达式的结果会被暂时保存起来,不会被改变,D错误。
14.下列哪些操作会使线程释放锁资源?
A.sleep()
B.wait()
C.join()
D.yield()
解析:
1.sleep()方法
在指定时间内让当前正在执行的线程暂停执行,但不会释放“锁标志”。不推荐使用。
sleep()使当前线程进入阻塞状态,在指定时间内不会执行。
2.wait()方法
在其他线程调用对象的notify或notifyAll方法前,导致当前线程等待。线程会释放掉它所占有的“锁标志”,从而使别的线程有机会抢占该锁。
当前线程必须拥有当前对象锁。如果当前线程不是此锁的拥有者,会抛出IllegalMonitorStateException异常。
唤醒当前对象锁的等待线程使用notify或notifyAll方法,也必须拥有相同的对象锁,否则也会抛出IllegalMonitorStateException异常。
waite()和notify()必须在synchronized函数或synchronized block中进行调用。如果在non-synchronized函数或non-synchronized block中进行调用,虽然能编译通过,但在运行时会发生IllegalMonitorStateException的异常。
3.yield方法
暂停当前正在执行的线程对象。
yield()只是使当前线程重新回到可执行状态,所以执行yield()的线程有可能在进入到可执行状态后马上又被执行。
yield()只能使同优先级或更高优先级的线程有执行的机会。
4.join方法
等待该线程终止。
等待调用join方法的线程结束,再继续执行。如:t.join();//主要用于等待t线程运行结束,若无此句,main则会执行完毕,导致结果不可预测。
15.类之间存在以下几种常见的关系:
A.“USES-A”关系
B.“HAS-A”关系
C.“IS-A”关系
D.“INHERIT-A”关系
解析:
USES-A:依赖关系,A类会用到B类,这种关系具有偶然性,临时性。但B类的变化会影响A类。这种在代码中的体现为:A类方法中的参数包含了B类。
关联关系:A类会用到B类,这是一种强依赖关系,是长期的并非偶然。在代码中的表现为:A类的成员变量中含有B类。
HAS-A:聚合关系,拥有关系,是关联关系的一种特例,是整体和部分的关系。比如鸟群和鸟的关系是聚合关系,鸟群中每个部分都是鸟。
IS-A:表示继承。
选A、B、C。D错。
16.关于容器下面说法正确的是? ( )
A.列表(List)和集合(Set)存放的元素都是可重复的。
B.列表(List)和集合(Set)存放的元素都是不可重复的。
C.映射(Map)<key,value>中key是可以重复的。
D.映射(Map)<key,value>中value是可以重复的。
解析:
列表(List)的元素是有 序、可重复的;
集合(Set)的元素是无序、不可重复的;
map的key不可重复,value是可以重复的。
选D。
17.关于C++/JAVA类中static 成员和对象成员的说法正确的是?
A.static 成员变量在对象构造时生成.
B.static 成员函数在对象成员函数中无法调用
C.虚成员函数不可能是static 成员函数
D.static 成员函数不能访问static 成员变量
解析:
static成员变量是在类加载的时候生成的,A错。
static成员函数既可以通过类名直接调用,也可以通过对象名进行调用。B错
虚函数是C++中的,虚函数不可能是static的,C正确。
static成员函数可以访问static成员变量,D错。
18.关于下面代码片段叙述正确的是()
byte b1=1,b2=2,b3,b6;
final byte b4=4,b5=6;
b6=b4+b5;
b3=(b1+b2);
System.out.println(b3+b6);
解析:
A.输出结果:13
B.语句:b6=b4+b5编译出错
C.语句:b3=b1+b2编译出错
D.运行期抛出异常
解析:
被final修饰的变量是常量,这里的b6=b4+b5可以看成是b6=10;在编译时就已经变为b6=10了
而b1和b2是byte类型,java中进行计算时候将他们提升为int类型,再进行计算,b1+b2计算后已经是int类型,赋值给b3,b3是byte类型,类型不匹配,编译不会通过,需要进行强制转换。
Java中的byte,short,char进行计算时都会提升为int类型。
19.DBMS 中实现事务持久性的子系统是()
A.安全性管理子系统
B.完整性管理子系统
C.并发控制子系统
D.恢复管理子系统
解析:
原子性:事务是一组不可分割的操作单元,这组单元要么同时成功要么同时失败(由DBMS的事务管理子系统来实现);
一致性:事务前后的数据完整性要保持一致(由DBMS的完整性子系统执行测试任务);
隔离性:多个用户的事务之间不要相互影响,要相互隔离(由DBMS的并发控制子系统实现);
持久性:一个事务一旦提交,那么它对数据库产生的影响就是永久的不可逆的,如果后面再回滚或者出异常,都不会影响已提交的事务(由DBMS的恢复管理子系统实现的)
选D。
20.对Collection和Collections描述正确的是
A.Collection是java.util下的类,它包含有各种有关集合操作的静态方法
B.Collection是java.util下的接口,它是各种集合结构的父接口
C.Collections是java.util下的接口,它是各种集合结构的父接口
D.Collections是java.util下的类,它包含有各种有关集合操作的静态方法
解析:
java.util.Collection 是一个集合接口。它提供了对集合对象进行基本操作的通用接口方法。Collection接口在Java 类库中有很多具体的实现。Collection接口的意义是为各种具体的集合提供了最大化的统一操作方式。
java.util.Collections 是一个包装类。它包含有各种有关集合操作的静态多态方法。此类不能实例化,就像一个工具类,服务于Java的Collection框架。
选B、D。
21.下面哪些赋值语句是正确的()
A.long test=012
B.float f=-412
C.int other =(int)true
D.double d=0x12345678
E.byte b=128
解析:
long和float,正常定义需要加l和f,但是long和float属于基本类型,会进行转化,所以不会报出异常。A、B正确。
boolean类型不能和任何类型进行转换,会报出类型异常错误。C错。
byte的取值范围是-128—127。报出异常,E错。
选ABD。
22.建立Statement对象的作用是?
A.连接数据库
B.声明数据库
C.执行SQL语句
D.保存查询结果
解析:
Statement对象用于执行不带参数的简单SQL语句。选C。
23.结构型模式中最体现扩展性的模式是()
A.装饰模式
B.合成模式
C.桥接模式
D.适配器
解析:
在GoF设计模式中,结构型模式有:
1.适配器模式 Adapter
适配器模式是将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
两个成熟的类需要通信,但是接口不同,由于开闭原则,我们不能去修改这两个类的接口,所以就需要一个适配器来完成衔接过程。
2.桥接模式 Bridge
桥接模式将抽象部分与它的实现部分分离,是它们都可以独立地变化。它很好的支持了开闭原则和组合锯和复用原则。实现系统可能有多角度分类,每一种分类都有可能变化,那么就把这些多角度分离出来让他们独立变化,减少他们之间的耦合。
3.组合模式 Composite
组合模式将对象组合成树形结构以表示部分-整体的层次结构,组合模式使得用户对单个对象和组合对象的使用具有一致性。
4.装饰模式 Decorator
装饰模式动态地给一个对象添加一些额外的职责,就增加功能来说,它比生成子类更灵活。也可以这样说,装饰模式把复杂类中的核心职责和装饰功能区分开了,这样既简化了复杂类,有去除了相关类中重复的装饰逻辑。 装饰模式没有通过继承原有类来扩展功能,但却达到了一样的目的,而且比继承更加灵活,所以可以说装饰模式是继承关系的一种替代方案。
5.外观模式 Facade
外观模式为子系统中的一组接口提供了同意的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
外观模式中,客户对各个具体的子系统是不了解的,所以对这些子系统进行了封装,对外只提供了用户所明白的单一而简单的接口,用户直接使用这个接口就可以完成操作,而不用去理睬具体的过程,而且子系统的变化不会影响到用户,这样就做到了信息隐蔽。
6.享元模式 Flyweight
享元模式为运用共享技术有效的支持大量细粒度的对象。因为它可以通过共享大幅度地减少单个实例的数目,避免了大量非常相似类的开销。.
享元模式是一个类别的多个对象共享这个类别的一个对象,而不是各自再实例化各自的对象。这样就达到了节省内存的目的。
选A。