马上期末了🐌,这是我做错的题或感觉有意思的题,解释来自牛客评论区的大佬们,希望对大家有帮助💪,共同学习,备战🐱🏍✨期末✨🐱🏍!!!
(以防直接就看见答案,答案的字体调成了白色)
1.(多选)在使用super和this关键字时,以下描述错误的是()
A.在子类构造方法中使用super()显示调用父类的构造方法,super()必须写在子类构造方法的第一行,否则编译不通过
B.super()和this()不一定要放在构造方法内第一行
C.this()和super()可以同时出现在一个构造函数中
D.this()和super()可以在static环境中使用,包括static方法和static语句块
1、super()表示调用父类构造函数、this()调用自己的构造函数,而自己的构造函数第一行要使用super()调用父类的构造函数,所以这俩不能在一个构造函数中会出现重复引用的情况。
2、super()和this()都必须在构造函数第一行,所以这一点也表明他俩不能在一个构造函数中。
3、this()和super()都指的是对象
,所以,均不可以在static环境中使用。包括:static变量,static方法,static语句块(里面不能使用非static类型的)。
正确答案:BCD
2.下列方法中哪个是执行线程的方法? ()
A.run()
B.start()
C.sleep()
D.suspend()
run()方法用来执行线程体中具体的内容
start()方法用来启动线程对象,使其进入就绪状态
sleep()方法用来使线程进入睡眠状态
suspend()方法用来使线程挂起,要通过resume()方法使其重新启动
正确答案:A
3.下列程序的运行结果
public static void main(String args[]) {
Thread t = new Thread() {
public void run() {
pong();
}
};
t.run();
System.out.print("ping");
}
static void pong() {
System.out.print("pong");
}
A.pingpong
B.pongping
C.pingpong和pongping都有可能
D.都不输出
若调用start,则先执行主线程的,后执行子线程的,即结果为pingpong
若调用run,相当于函数调用,顺序执行,即结果为pongping
正确答案:B
4.以下代码执行后输出结果为( )
public class Test {
public static void main(String[] args) {
System.out.println("return value of getValue(): " +
getValue());
}
public static int getValue() {
try {
return 0;
} finally {
return 1;
}
}
}
A.return value of getValue(): 1
B.return value of getValue(): 0
C.return value of getValue(): 0return value of getValue(): 1
D.return value of getValue(): 1return value of getValue(): 0
根据官方的
JVM规范
:
如果try语句里有return,返回的是try语句块中变量值。
详细执行过程如下:1.如果有返回值,就把返回值保存到局部变量中;
2. 执行jsr指令跳到finally语句里执行;
3.执行完finally语句后,返回之前保存在局部变量表里的值。
如果try,finally语句里均有return,忽略try的return,而使用finally的return.
正确答案:A
5.问这个程序的输出结果
package Wangyi;
class Base
{
public void method()
{
System.out.println("Base");
}
}
class Son extends Base
{
public void method()
{
System.out.println("Son");
}
public void methodB()
{
System.out.println("SonB");
}
}
public class Test01
{
public static void main(String[] args)
{
Base base = new Son();
base.method();
base.methodB();
}
}
A.Base SonB
B.Son SonB
C.Base Son SonB
D.编译不通过
这类多态问题中,无论向上或向下转型,都记住一句话就可以了。
编译看左边,运行看右边。
意思编译时候,看左边有没有该方法,运行的时候结果看 new 的对象是谁,就调用的谁。
正确答案:D
6.(多选)Java的体系结构包含( )。
A.Java编程语言
B.Java类文件格式
C.Java API
D.JVM
Java体系结构包括四个独立但相关的技术:
Java程序设计语言
Java.class文件格式
Java应用编程接口(API)
Java虚拟机(JVM)
我们再在看一下它们四者的关系:
当我们编写并运行一个Java程序时,就同时运用了这四种技术,用Java程序设计语言编写源代码,把它编译成Java.class文件格式,然后再在Java虚拟机中运行class文件。当程序运行的时候,它通过调用class文件实现了Java API的方法来满足程序的Java API调用
正确答案:ABCD
7.请写出程序的输出结果。
public class Test
{
public static void main(String[] args)
{
int x = 0;
int y = 0;
int k = 0;
for (int z = 0; z < 5; z++) {
if ((++x > 2) && (++y > 2) && (k++ > 2))
{
x++;
++y;
k++;
}
}
System.out.println(x + ”” +y + ”” +k);
}
}
A.432
B.531
C.421
D.523
&&当第一个条件不成之后,后面的条件都不执行了,而&则还是继续执行,直到整个条件语句执行完为止。
++x是先x=x+1再进行运算;x++是进行运算再x=x+1
正确答案:B
8.定义有StringBuffer s1=new StringBuffer(10);s1.append(“1234”)则s1.length()和s1.capacity()分别是多少?
A.4 10
B.4 4
C.10 10
D.10 4
length() 返回当前长度
如果字符串长度没有初始化长度大,capacity返回初始化的长度
如果append后的字符串长度超过初始化长度,capacity返回增长后的长度
PS:
StringBuffer和StringBuilder的默认大小为16
ArrayList和LinkedList的默认大小10
正确答案:A
9.列表(List)和集合(Set)下面说法正确的是? ( )
A.Set中至多只能有一个空元素
B.List中至多只能有一个空元素
C.List和Set都可以包含重复元素的有序集合
D.List和Set都是有序集合
Set 不能有重复的元素,且是无序的,要有空值也就只能有一个(因为它不允许重复)。 List 可以有重复元素,且是有序的,要有空值也可以有多个,因为它可重复.
正确答案:A
10.在Jdk1.7中,下述说法中抽象类与接口的区别与联系正确的有哪些?
A.抽象类中可以有普通成员变量,接口中没有普通成员变量。
B.抽象类和接口中都可以包含静态成员常量。
C.一个类可以实现多个接口,但只能继承一个抽象类
D.抽象类中可以包含非抽象的普通方法,接口中的方法必须是抽象的,不能有非抽象的普通方法。
接口(interface)可以说成是抽象类的一种特例,接口中的所有方法都必须是抽象的。接口中的方法定义默认为public abstract类型,接口中的成员变量类型默认为public static final。另外,接口和抽象类在方法上有区别:
1.抽象类可以有构造方法,接口中不能有构造方法。
2.抽象类中可以包含非抽象的普通方法,接口中的所有方法必须都是抽象的,不能有非抽象的普通方法。
3.抽象类中可以有普通成员变量,接口中没有普通成员变量。
4. 抽象类中的抽象方法的访问类型可以是public,protected和默认类型
5. 抽象类中可以包含静态方法,接口中不能包含静态方法。
6. 抽象类和接口中都可以包含静态成变量,抽象类中的静态成员变量的访问类型可以任意,但接口中定义的变量只能是public static final类型,并且默认即为public static final类型。
7. 一个类可以实现多个接口,但只能继承一个抽象类。
【每日美图】