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

1、执行如下程序,输出结果是( C)

class Test {
	private int data;
	int result = 0;
	public void m() {
		result += 2;
		data += 2;
	System.out.print(result + " " + data);
	}
}
class ThreadExample extends Thread {
	private Test mv;
	public ThreadExample(Test mv)  {
	this.mv = mv;
	}
	public void run() {
		synchronized(mv){
			mv.m();
		}
	}
}
class ThreadTest {
	public static void main(String args[]) {
		Test mv = new Test();	// 声明并初始化对data赋默认值 
		Thread t1 = new ThreadExample(mv);
		Thread t2 = new ThreadExample(mv);
		Thread t3 = new ThreadExample(mv);
		t1.start();
		t2.start();
		t3.start();
	}
}
  • A、0 22 44 6
  • B 、2 42 42 4
  • C、2 24 46 6
  • D、4 44 46 6
解析:
① 使用synchronized关键字加同步锁,使三个线程依次顺序操作m() 方法
② t1.start();	使得result=2,data=2,输出即为2 2 
	t2.start();	使得result=4,data=4,输出即为4 4 
	t3.start();	使得result=6,data=6,输出即为6 6 
③ System.out.print(result +" "+ data);
	是print()方法,不会自动换行,所以输出结果为2 24 46 6

2、要使对象具有序列化能力,则其类应该实现如下哪个接口(A)

  • A、java.io.Serializable
  • B 、java.lang.Cloneable
  • C、java.lang.CharSequence
  • D、java.lang.Comparable
解析:
A ~ 专门提供给类实现序列化的
B ~ 实现克隆方法的;Object.clone() 方法可以合法地对该类实例进行按字段复制
C ~ CharBuffer、String、StringBuffer、StringBuilder四个类都实现此接口,
		这样当处理String或者StringBuffer的类时就不用重载
D ~ 用于对实现它的每个类的对象进行整体排序
另外:
1、序列化是干什么的?
	为了保存在内存中的各种对象的状态,并且可以把保存的对象状态再读出来!
	虽然可以用自己的各式方法来保存Object States,
	但是Java提供一种较好的保存对象状态的机制,那就是序列化。
2、什么情况下需要序列化 ?
	a)当你想把内存中的对象保存到一个文件中或者数据库中时;
	b)当你想用套接字在网络上传送对象时;
	c)当你想通过RMI传输对象。

3. 下列选项中属于面向对象设计方法主要特征的是(A)

A 、继承
B 、自顶向下
C 、模块化
D 、逐步求精

解析:
A ~ 面向对象设计的*三大特征*为:封装、继承、多态,
		如果问到四大特征,那就是:封装、继承、多态、抽象
B ~ 算法中:分治法是自底向上的策略;动态规划是自顶向下的策略。
	面向过程的系统两种都采用,也就是“先局部再整体”和“先整体再局部”。
C ~ 模块化就是:把程序划分成独立运行且可以独立访问的模块,每个模块完成一个子功能,
	把这些模块集成起来构成一个整体,可以完成指定的功能满足用户的需求。
	前端使用模块化可以:降低耦合度,减少重复代码,提高代码重用性,并且更清晰。
D ~ 结构设计是一种应用最广泛的系统设计方法,
		是以“数据流”为基础,自顶向下、逐步求精和模块化的过程。

4、关于下列程序段的输出结果,说法正确的是:(B)

public class MyClass{
	static int i;
	public static void main(String argv[]{
	System.out.println(i);
	}

A 、有错误,变量i没有初始化
B 、0
C 、1
D 、null

解析:
int 型变量的默认初始值为0;
八大基本数据类型的默认值如下~
boolean(false)	short(0)	byte(0)	float(0.0F或0.0f)	
double(0.0)	long(0L)	char(‘\u0000’)

5、下列代码的执行结果是(1 和 1.0)

public class Test3{
	public static void main(String args[]){
		System.out.println(100%3);
		System.out.println(100%3.0);
	}
}
解析:
类型转换的问题,
前一个式子两个整型数据运算,结果为整型;
后一个式子一个整型和一个double型运算,结果应为double型

6、在基本 JAVA 类型中,如果不明确指定,整数型的默认是 int 类型,带小数的默认是 double 类型 。

7、方法通常存储在进程中的哪一区? (D)

A 、堆区
B 、栈区
C 、全局区
D 、方法区

解析:
堆区放真正的数据,对象的属性信息;
栈区存放局部变量;
全局区放全局变量;
另外,垃圾空间是指:没有任何栈内存指向的堆内存空间

8、不考虑反射,关于私有访问控制符 private 修饰的成员变量,以下说法正确的是(C)

扫描二维码关注公众号,回复: 5508476 查看本文章

A、可以三种类所引用:该类自身、与它在同一包中的其他类,在其他包中的该类的子类
B、可以被两种类访问和引用:该类本身、该类的所有子类
C、只能被该类自身所访问和修改
D、只能被同一个包中的类访问

解析:
private 修饰的变量,是私有变量。私有变量只能被本类自己所使用。
一个经典好玩的例子:刘备死了之后,阿斗继承刘备的所有东西,但是刘备的媳妇还是刘备的媳妇。
比喻 “私有变量被子类继承后,不能使用,不可修改。”

A ~ public权限
B ~ protected权限
D ~ 默认

9. Math.round(11.5) 等于多少 (). Math.round(-11.5) 等于多少 ? (12和-11)

解析:
1. round方法,在Math中有重载的,一个参数是float,一个是double,对应返回int和long值。返回值是当前值+0.5向下取整(-0.5 --> 0);
2. ceil方法,没有重载,参数就是double,返回值也是double,但是这个时候就有区别了,向上取整(-0.5 ---> -0.0),注意一下,负号是保留的,和round有区别的;
3. floor,和ceil一样,没有重载,参数和返回值都是double,向下取整(-0.5 --> -1.0)。

简单来说:
floor : 意为地板,指向下取整,返回不大于它的最大整数
ceil : 意为天花板,指向上取整,返回不小于它的最小整数 
round : 意为大约,表示“四舍五入”,而四舍五入是往大数方向入。

10、假设 A 类有如下定义,设 a 是 A 类的一个实例,下列语句调用哪个是错误的?(C)

public class A{
	public int i;
	static String s;
	void method1(){}
	static void method2(){}
}

A、System.out.println(a.i);
B、a.method1();
C、A.method1();
D、A.method2();

解析:
static修饰的变量为静态成员变量;
static修饰的方法为静态方法;
静态成员变量,静态方法可以直接通过类名或对象名去调用;
而非静态方法,应该是通过对象的实例化去调用。
即:C项应该是 a.method1();

猜你喜欢

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