Java选择~答案及解析(3)

1、以下代码运行输出的是(编译错误)

public class Person{
	private String name = "Person";
	int age=0;
}
public class Child extends Person{
	public String grade;
	public static void main(String[] args){
		Person p = new Child();
		System.out.println(p.name);
	}
}
解析:
子类无法继承父类中的私有成员,但是子类对象的内存里是有父类成员的,有不代表可以用!!
name成员在父类Person中是私有属性的,不可以在子类中直接调用!!

Java中四种访问权限总结:
1、private: Java语言中对访问权限限制的最窄的修饰符,一般称之为“私有的”。
	被其修饰的属性以及方法只能被该类的对象访问,其子类不能访问,更不能允许跨包访问。

2、default:即不加任何访问修饰符,通常称为“默认访问权限“或者“包访问权限”。
	该模式下,只允许在同一个包中进行访问。

3、protected: 介于public 和 private 之间的一种访问修饰符,一般称之为“保护访问权限”。
	被其修饰的属性以及方法只能被类本身的方法及子类访问,即使子类在不同的包中也可以访问。

4、public: Java语言中访问限制最宽的修饰符,一般称之为“公共的”。
	被其修饰的类、属性以及方法不仅可以跨类访问,而且 允许跨包访问。

2、以下代码运行输出的是(编译错误)

class Base{
	public Base(String s){
		System.out.print("B");
	}
}
public class Derived extends Base{ 
	public Derived (String s){
		System.out.print("D");
	}
	public static void main(String[] args){
		new Derived("C");
	}
}
解析:
子类构造方法在调用时必须先调用父类的,
由于父类没有无参构造,所以必须在子类中显式调用,
修改子类构造方法如下即可:
	public Derived(String s){
        super("s");
        System.out.print("D");
    }

3、下面关于构造方法的说法不正确的是 (B)

A 构造方法也属于类的方法,可以创建对象的时候给成员变量赋值
B 构造方法不可以重载
C 构造方法没有返回值
D 构造方法一定要和类名相同

解析:
关于构造方法~
构造方法是用来初始化一个对象的,并为实例变量赋予合适的初始值。
 
构造方法必须满足以下语法规则:  
(1)方法名必须与类名相同;  
(2)不要声明返回类型;  
(3)不能被static、final、synchronized、abstract和native修饰;  
(4)构造方法不能被子类继承,所以用final和abstract修饰没有意义。  
(5)构造方法在父类中没有方法体,在子类中必须被重载。

4、在异常处理中,以下描述不正确的是(D)

A try块不可以省略
B 可以使用多重catch块
C finally块可以省略
D catch块和finally块可以同时省略

解析:
1、try~用于监听。
	将要被监听的代码(可能抛出异常的代码)放在try语句块之内,
	当try语句块内发生异常时,异常就被抛出。

2、catch~用于捕获异常。catch用来捕获try语句块中发生的异常。

3、 finally~finally修饰的语句块总是会被执行。
	它主要用于回收在try块里打开的物力资源(如数据库连接、网络连接和磁盘文件)。
	只有finally块,执行完成之后,才会回来执行try或者catch块中的return或者throw语句,
	如果finally中使用了return或者throw等终止方法的语句,则就不会跳回执行,直接停止。

4、throw~用于抛出异常。

5、throws~用在方法签名中,用于声明该方法可能抛出的异常。

5、下列描述中,错误的是(C)

A SQL语言又称为结构化查询语言
B java中”static”关键字表明一个成员变量或者是成员方法可以在没有所属的类的实例变量的情况下被访问
C 面向对象开发中,引用传递意味着传递的并不是实际的对象,而是对象的引用,因此,外部对引用对象所做的改变不会反映到所引用的对象上
D java是强类型语言,javascript是弱类型语言
E 面向对象的三大特性包括:封装,继承,多态

解析:
对象被值传递和引用传递的区别?

1、对象被值传递,意味着传递了对象的一个副本。
	因此,就算是改变了对象副本,也不会影响源对象的值。
2、对象被引用传递,意味着传递的并不是实际的对象,而是对象的引用。
	因此,外部对引用对象所做的改变会反映到所有的对象上。

6、下列哪种说法是正确的?(C)

A 实例方法可直接调用超类的实例方法
B 实例方法可直接调用超类的类方法
C 实例方法可直接调用本类的类方法
D 实例方法可直接调用其他类的实例

解析:
区别~
实例方法:也就是对象方法,没有 static 关键字。
类方法:也就是静态方法,用static关键字修饰,是属于整个类的方法。

使用static修饰某个方法的时候至少有如下三个含义:

1、调用这个方法的时候,应该使用类名做前缀,而不是某个对象名;

2、此方法在内存中的代码段将随着类的定义而分配和装载,不被任何一个对象专有。
	(而实例方法是属于某个对象的方法,在这个对象创建的时候对象的方法在内存就拥有自己专用的代码段。)

3、它只能处理属于整个类的成员变量,即只能处理static域。

7、以下代码段输出结果为:(false)

String str1="hello";
String str2="he"+ new String("llo");
System.out.println(str1==str2);
解析:
字符串比较时的两种方式:
1、==比较的是两个字符串的地址是否为相等(同一个地址),
2、equals()方法比较的是两个字符串对象的内容是否相同
	(当然,若两个字符串引用同一个地址,使用equals()比较也返回true)。
		方法使用如下:str.equals(anotherString)
		前一个是特定的字符串,后者可以是用户输入的。
题目中是分别给两个变量赋值相同的字符串,
这两个变量值相同,但是在栈中地址不同!!

8、程序读入用户输入的一个值,要求创建一个自定义的异常,如果输入值大于 10 ,使用 throw 语句显发异常,异常输出信息为 ”something’s wrong!” ,语句为(A)

A if(i>10)throw new Exception(“something’s wrong!”);
B if(i>10)throw Exception e(“something’s wrong!”);
C if(i>10) throw new Exception e(“something’s wrong!”);
D if(i>10)throw Exception( “something’s wrong!”);

解析:
自定义异常中不需要写那个e,并且题目中存在问题,
自定义的新异常名称不能与Java中定义的相同。应该另起别名~

9、以下关于集合类 ArrayList 、 LinkedList 、 HashMap 描述错误的(C)

A HashMap实现Map接口,它允许任何类型的键和值对象,并允许将null用作键或值
B ArrayList和LinkedList均实现了List接口
C 添加和删除元素时,ArrayList的表现更佳
D ArrayList的访问速度比LinkedList快

解析:
A、HashMap实现了Map接口的,它的Key和Value都可以是null,
	但是Hashtable中,Key和Value都不能是null。
B、ArrayList与LinkedList都实现了List接口,继承了AbstractList类。
C、ArrayList底层是动态数组是实现,随机位置添加和删除,
	都需要移动数组的数据,而LinkedList底层是双向链表,只需要修改Node节点的引用。
D、随机访问数组要比链表块。

下面放一张ArrayList和LinkedList的区别表:

在这里插入图片描述
10、关于 Java 线程,下面说法错误的是(C)

A 创建线程可以通过实现Runnable接口和继承Thread类
B java利用线程使整个系统成为异步
C 新线程一旦被创建,它将自动开始

解析:
A~创建线程的三种方法:
	(1)继承Thread类;(2)实现Runnable接口;(3)实现Collable接口。
B~可以利用线程使系统异步处理,也可加synchronized关键字使同步。
C~新线程需要覆写run()方法才能开始运行

猜你喜欢

转载自blog.csdn.net/Hannah_Hsq/article/details/88404482