2019年11月6日 java1
考点1
关于容器下面说法正确的是? ( )
- A 列表(List)和集合(Set)存放的元素都是可重复的。
- B 列表(List)和集合(Set)存放的元素都是不可重复的。
- C 映射(Map)<key,value>中key是可以重复的。
- D 映射(Map)<key,value>中value是可以重复的。
正确答案: D
解析
- List列表的元素是有序的,可重复的
- 集合Set的元素是无序的,不可重复的
- map是使用的是键值对存放,key不重复,value是可重复的
考点2
以下关于继承的叙述正确的是
- A 在Java中类只允许单一继承
- B 在Java中一个类不能同时继承一个类和实现一个接口
- C 在Java中接口只允许单一继承
- D 在Java中一个类只能实现一个接口
正确答案: A
解析
- 类支持单继承,
- 接口支持多继承,一个接口可以有多个父接口,子接口扩展某个父接口,将会获得父接口里定义的所有抽象方法、常量。一个接口继承多个父接口时,多个父接口排在extends关键字之后。
考点3
以下会产生信息丢失的类型转换是( )
- A float a=10
- B int a=(int)8846.0
- C byte a=10; int b=-a
- D double d=100
正确答案: B
解析
精度丢失只会发生在从大范围到小范围的转换
上面四个选项,只有 B 是从 double 到 int,也就是从大范围到小范围。
float a=10.0; 是把 double 转车 float. 会损失精度. 正确的写法是 float=10.0f;
考点4
java Thread中,run方法和start方法的区别,下面说法错误的是?
- A 通过调用Thread类的start()方法来启动一个线程,这时此线程是处于就绪状态,并没有运行。
- B 他们都可以实现了多线程运行。
- C run方法是thread的一个普通方法调用。
- D 调用start方法后,一旦得到cpu时间片,就开始执行run()方法。
正确答案: B
解析
start方法和run方法的区别
1.start方法
用start方法来启动线程,是真正实现了多线程,
通过调用Thread类的start()方法来启动一个线程,这时此线程处于就绪(可运行)状态,并没有运行,一旦得到cpu时间片,就开始执行run()方法。但要注意的是,此时无需等待run()方法执行完毕,即可继续执行下面的代码。所以run()方法并没有实现多线程。
2.run方法
run()方法只是类的一个普通方法而已,如果直接调用run方法,程序中依然只有主线程这一个线程,其程序执行路径还是只有一条,还是要顺序执行,还是要等待run方法体执行完毕后才可继续执行下面的代码。
考点5
下面哪个选项正确创建socket连接?
- A Socket s = new Socket(8080);
- B Socket s = new Socket(“192.168.1.1”,8080)
- C SocketServer s = new Socket(8080);
- D Socket s = new SocketServer(“192.168.1.1”,8080)
正确答案: B
解析
创建客户端Socket
创建 Socket 肯定要知道服务器ip 和 port 啊
服务器的 ServerSocket 只需要开放端口号就行啦
也就是
服务器端:ServerSocket提供的实例 ServerSocket server = new ServerSocket(端口号)
客户端:Socket提供的实例 Socket client = new Socket(IP地址,端口号)
考点6
变量a是一个64位有符号的整数,初始值用16进制表示为:0x7FFFFFFFFFFFFFFF;变量b是一个64位有符号的整数,初始值用16进制表示为:0x8000000000000000。则a+b的结果用10进制表示为多少?
- A 1
- B -1
- C 2^63+2^62+…+2^2+2^1+2^0
- D –(2^63+2^62+…+2^2+2^1+2^0)
正确答案: B
解析
计算机中是以补码存储并参与运算的,所以题目中的初始值均是补码
(1)a+b的16进制表示为:OxFFFFFFFFFFFFFFF(16位F),转为2进制为111……111(64位1,每个F->4位2)。
(2)有符号数:是针对二进制来讲的。用最高位作为符号位,“0”代表“+”,“1”代表“-”。所以a+b的结果是一个负数。
(3)计算机中负数是以补码的形式保存的,将补码转换成原码的计算方式如下:
①. 对于正数,原码与补码相同。
②.对于负数,将补码除符号位之外,按位取反,末位加1,即得到原码。
(4)a + b = 111……111(64位1)
取反:100……000(1位1,后面63位0)
加一:100……001(中间62位0)
10进制:-1。
考点7
代码片段:
1 | byte b1=1,b2=2,b3,b6; |
关于上面代码片段叙述正确的是()
- A 输出结果:13
- B 语句:b6=b4+b5编译出错
- C 语句:b3=b1+b2编译出错
- D 运行期抛出异常
正确答案: C
解析
没有final修饰的byte变量相加后会被自动提升为int型,与目标类型byte不相容,需要强制转换(向下转型)。
表达式的数据类型自动提升规则。
①所有的byte,short,char型的值将被提升为int型;
②如果有一个操作数是long型,计算结果是long型;
③如果有一个操作数是float型,计算结果是float型;
④如果有一个操作数是double型,计算结果是double型;
1 | final byte b4=4,b5=6; |
声明b4与b5为final常量,不可改变。
所以b4+b5的结果为byte类型。
1 | byte b1=1,b2=2; |
b1+b2的结果会自动升级为int类型。
int类型赋值给低级别byte的需要强制转换。
考点8
已知如下的命令执行 java MyTest a b c 请问哪个语句是正确的? ( )
- A args[0] = “MyTest a b c”
- B args[0] = “MyTest”
- C args[0] = “a”
- D args[1]= “b”
正确答案: CD
解析
考点9
对于代码 var a = 10.42; 取出 a 的整数部分,以下代码哪些是正确的?
- A parseInt(a);
- B Math.floor(a);
- C Math.ceil(a);
- D a.split(‘.’)[0];
正确答案: AB
解析
Math的ceil floor round详解
- Math.ceil(); ceiling(天花板) 所以向上取整
- Math.floor();floor(地板)所以向下取整
- Math.round()
- 对于正数是四舍五入,
- 对于负数,
- 小数点后的数<=5都是舍去,
- 而大于5是减一
关于java 10引入的var
2018年3月20日,Oracle发布java10。java10为java带来了很多新特性,其中包括var关键字的引入。
eg:
public class Example {
public static void main(String[] args) {
var eg = new Example;
eg.emptyFunc();
}
public void emptyFunc() {}
}
java对var的要求
java在var上是有要求的。总结起来,有以下三点很重要:
(1)只能用于局部变量上;
(2)声明时必须初始化;
(3)不能用作方法参数。
考点10
下面关于面向对象的一些理解哪些是错误的( )
- A 面向对象的最重要的特性是支持继承、封装和多态
- B 系统设计应该遵循开闭原则,系统应该稳定不不可修改,但应支持通过继承、组合等方式进行扩展
- C 函数式的语言必然是面向对象的语言
- D 面向对象设计时,每个类的职责应该单一,不要再一个类中引入过多的接口
- E 过程式语言和面向对象的语言各有其优势,过程式语言更加灵活,面向对象语言更加强调抽象和封装
- F Java和C++都是静态类型的面向对象编程语言
正确答案: C
解析
什么是动态类型语言
动态类型语言是指在运行期间才去做数据类型检查的语言,也就是说,在用动态类型的语言编程时,永远也不用给任何变量指定数据类型,该语言会在你第一次赋值给变量时,在内部将数据类型记录下来。
什么是静态类型语言
静态类型语言与动态类型语言刚好相反,它的数据类型是在编译其间检查的,也就是说在写程序时要声明所有变量的数据类型,C/C++是静态类型语言的典型代表,其他的静态类型语言还有C#、JAVA等。