马上期末了,这是我做错的题或感觉有意思的题,解释来自牛客评论区的大佬们,希望对大家有帮助,共同学习,备战✨期末✨!!!
(以防直接就看见答案,答案的字体调成了白色)
1.以下选项中,合法的赋值语句是()
A.a>1;
B.i++;
C.a= a+1=5;
D.y = int ( i );
B项,中间变量缓存机制。
等同于
temp = i;
i=i+1;
i=temp;
D项,y=(int) i;
正确答案:B
2.java有8种基本类型,请问byte、int、long、char、float、double、boolean各占多少个字节?
A.1 2 8 2 4 8 1
B.1 4 8 2 4 8 1
C.1 4 4 2 4 4 2
D.1 4 4 2 4 8 2
byte:8位 一个字节 int:32位 四个字节 long:64位 八个字节 char:16位 两个字节 float:32位 四个字节 double:64位 八个字节 boolean:8位 一个字节.
正确答案:B
3.关于Java中的数组,下面的一些描述,哪些描述是准确的:( )
A.数组是一个对象,不同类型的数组具有不同的类
B.数组长度是可以动态调整的
C.数组是一个连续的存储结构
D.一个固定长度的数组可类似这样定义: int array[100]
E.两个数组用equals方法比较时,会逐个便利其中的元素,对每个元素进行比较
F.可以二维数组,且可以有多维数组,都是在Java中合法的
B 数组长度是不能动态调整的
D 固定长度的数组定义如int array[]=new int(100);
E数组的equals方法是object的equals,比较的是内存地址
正确答案:ACF
4.在Java中,以下关于方法重载和方法重写描述正确的是?
A.方法重载和方法的重写实现的功能相同
B.方法重载出现在父子关系中,方法重写是在同一类中
C.方法重载的返回值类型必须一致,参数项必须不同
D.方法重写的返回值类型必须相同或相容。(或是其子类)
方法重载(overload):
1.必须是同一个类
2.方法名(也可以叫函数)一样
3.参数类型不一样或参数数量不一样方法的重写(override)两同两小一大原则:
- 方法名相同,参数类型相同
- 子类返回类型小于等于父类方法返回类型,子类抛出异常小于等于父类方法抛出异常
- 子类访问权限大于等于父类方法访问权限。
正确答案:D
5.下列关于修饰符混用的说法,错误的是( )
A.abstract不能与final并列修饰同一个类
B.abstract 类中不建议有private的成员
C.abstract 方法必须在abstract类或接口中
D.static方法中能直接处理非static的属性
A、abstract修饰的类,不可实例化,所以需要子类去继承,然后重写其中的抽象方法。但是final修饰类是不可继承的。两者属性相冲。
B、看清楚,人家说的是不建议有,不是不能有。
C、抽象类中可以没有抽象方法,但是抽象方法必须在抽象类中或者接口中
D、static不可以修饰非static的属性,因为类加载的时候,static属性比非static先初始化,那么一个存在的总不能访问一个没有存在的吧。
正确答案:D
6.以下关于构造函数的描述错误的是 ( )
A.每个类有且只能有一个构造函数。
B.构造函数是类的一种特殊函数,它的方法名必须与类名相同
C.构造函数的主要作用是完成对类的对象的初始化工作
D.一般在创建新对象时,系统会自动调用构造函数
一个类可以自定义无穷多个构造函数,选项第一个肯定就是错的了
构造函数不和类同名就不是构造了。
构造就是用来建立对象的,当然是在构造中做初始化了。
创建对象的时候JVM会默认调用构造方法 根据你的new对象的参数列表
正确答案:A
7.下面关于构造方法的说法不正确的是 ( )
A.构造方法也属于类的方法,可以创建对象的时候给成员变量赋值
B.构造方法不可以重载
C.构造方法没有返回值
D.构造方法一定要和类名相同
1.构造方法也是类的方法,可以在创建对象时为成员变量赋值
2.构造方法可以进行重载,但是参数列表必须不相同,不以返回值和访问级别进行区分
3.构造方法没有返回值
4.构造方法一定要与定义为public的类同名
正确答案:B
8.下列代码编译和运行的结果是()
public class Threads4{
public static void main(String[] args){
new Threads4().go();
}
public void go(){
Runnable r=new Runnable(){
public void run(){
System.out.print("foo");
}
};
Thread t=new Thread(r);
t.start();
}
}
A.编译错误
B.抛出运行时异常
C.输出:foo
D.代码正常运行,但是无输出
在java多线程中实现多线程的方式有两种
①extends Thread
②implements Runnable。
这两种情况是我们最常见的,还有一种是由第二种变形而来的直接new Runnable(){},我们都知道java的接口是不可以实例化的,但代码中的new Runnable(){xxx}确是实例化了,为什么? 接口和抽象类不可以实例化是对的,这个是java语法规范来的,而new Runnable(){}其实不是实例化Runnable接口来的,实际上一种匿名内部类。
正确答案:C
9.(多选)已知String a=“a”,String b=“b”,String c=a+b,String d=new String(“ab”) 以下操作结果为true的是()
A. (a+b).equals ( c )
B. a+b= =c
C. c= =d
D. c.equals(d)
String a = “a”;
String b = “b”;String str1 = “a” + “b”;//常量池中的对象
String str2 = a + b; //在堆上创建的新的对象
String str3 = “ab”;//常量池中的对象
String str4 = new String(“ab”) ; //一共会创建两个字符串对象一个在堆中,一个在常量池中(前提是常量池中还没有 “aaa” 象)。
System.out.println(str3 == str4);//false
System.out.println(str1 == str2);//false
System.out.println(str1 == str3);//true
System.out.println(str2 == str3);//false
- 直接使用
双引号
声明出来的String对象会直接存储在常量池中,否则在堆中,使用“==”进行比较时要注意存储位置;- Object 中的equals() 与 “= =” 的作用相同,但String类重写了equals()方法,比较的是对象中的内容。
正确答案:AD
10.运行下面代码,输出的结果是()
class A {
public A() {
System.out.println("class A");
}
{ System.out.println("I'm A class"); }
static { System.out.println("class A static"); }
}
public class B extends A {
public B() {
System.out.println("class B");
}
{ System.out.println("I'm B class"); }
static { System.out.println("class B static"); }
public static void main(String[] args) {
new B();
}
}
class A static
class B static
I’m A class
class A
I’m B class
class B
class A static
I’m A class
class A
class B static
I’m B class
class B
class A static
class B static
class A
I’m A class
class B
I’m B class
class A static
class A
I’m A class
class B static
class B
I’m B class
Java程序初始化顺序:
1.父类的静态代码块
2.子类的静态代码块
3. 父类的普通代码块
4. 父类的构造方法
5. 子类的普通代码块
6.子类的构造方法
正确答案:A