Java期末复习题库(刷题)

本学期讲java课,进程截止到IO流线程那部分
有题库当然用题库了
顺手自己写一下代码复习一下

关于内存那些事

Java 内存结构

一个知识点:java.lang包下的类都可以直接用不用导入(import)包

判断题

判断题凡是 x(√)或者√(x)这种,建议按第一个写,对应有解释

1.构造方法定义返回值类型时,必须用void修饰 
答案:x
解析:构造方法不用写返回值类型,不同于别的方法 
public class-name(){
   //这就是一个构造方法
}

2.abstract关键字不能用来修饰成员信息
答案:√
解析:abstract只能修饰方法(抽象方法)或者类(抽象类)

3.同一个类中,不能有名称相同的方法
答案:x
解析:方法的重载

4.类的静态成员的生命周期要长与(于)类的对象
答案:√
解析:掌握对象的概念,静态成员属于类,而对象是通过类实例化出来的,所以肯定先由类,类夹杂这静态成员一起加载,最后实例化的时候,对象连同那些非静态变量,非静态方法才会加载。so 肯定静态成员的声明周期要长

5.Java接口的方法一定是抽象方法
答案:x
解析:老师说修改了题目,到时看jdk版本根据与下面结论的判断
注意:在jdk7.0前接口里所有的方法都没有方法体
jdk8.0以后接口里可以有静态方法,默认方法,也就是说接口中可以有方法的实现

6.Null是空常量,可以调用String类中的isEmpty()方法
答案:×
解析:无稽之谈,你不是string对象怎么调用人家方法

7.StringBuilder类是线程安全的
答案:x
解析:StringBuffer线程安全,效率低,StringBuilder,线程不安全,效率高

8.子类对象在实例化时,一定会调用并执行父类的构造方法
答案:√
解析:子类构造器的第一行必是父类的构造器(默认可以不写)

9.String类中的equals()方法比较是对象的内容,而非对象的地址值
答案:√
解析:String底层进行了equals()方法的重写

10.Java多态中静态成员方法访问的特点是:编译看父类,运行看子类
答案:×
解析:?静态有个锤子的多态

11.Java的Object类没有父类
答案:√
解析:Java的顶级父类就是Object

12.Java的虚拟机JVM会对局部变量赋默认初值
答案:×
解析:不会。只会给堆内的赋默认值,局部变量属于栈内变量

13.Java的抽象类中没有构造方法
答案:x
解析:有的,毕竟抽象类中有一些自己的方法(非抽象(abstract)方法)和变量,子类继承用抽象类的变量
你怎么着也得赋值(这就是构造方法干的活),不像接口中的变量(或者说常量)都是final的
需要你定义的时候就赋好值,就不用构造方法了

14.Java中,私有类的构造方法没有意义,因为不能实例化对象
答案:x
解析:不不不,你可以在本类通过这个实例化一个对象,然后通过一个public的方法获取对应对象
枚举的原理就是私有化构造器

15.Java中,类的构造方法必须定义为public,否则无法实例化对象
答案:x
解析:同1416.Java中,局部变量放在类中,方法外。
答案:x
解析:类中,方法中

17.Java中,局部变量在试用之前必须赋值,否则报错。
答案:√
解析:同12

18.Java中,成员变量在使用之前必须赋值,否则报错
答案:x
解析:同12(成员变量在堆中)

19.Java中,方法中的形式参数是局部变量。
答案:√
解析:!!!别理解错了,方法里面的都是局部变量,就算你实参传的是成员变量,人家问的是形参!

20.Java中:long类型占8Bytefloat类型占4Byte,所以long类型表示的范围大于float类型。
答案:x
解析:表述方式不一样,建议学一下计算机组成原理.

21.凡是能用条件运算符实现的语句,都可以用if语句实现。
答案:√
解析:找不出反例,其实就是不会,比较if是条件判断的底层

22.for循环的循环体可以一次都不执行
答案:√
解析:条件不符就不执行呗

23.Java中,do-whileforwhile三种循环可以任意嵌套
答案:√
解析:感觉用不着解析,有终止条件就行啊

24..Java的方法一定要有return语句,否则编译报错。
答案:x
解析:构造方法和void返回类型的方法就不用写return语句,也不报错
注意:构造方法和void底层都是有一个return;的,你可以不写但是它实打实是有的

25.Java中方法必须有返回值类型,如果没有返回值类型必须用void修饰。
答案:x
解析:构造方法

26.Java中,用void修饰的没有返回值的方法,方法体中不能有return语句。
答案:x
解析:可以有啊,同24,可以自己写一个return;

27.Java中,数组只可以存储基本类型的数据,不可以存储引用类型数据
答案:x
解析:我直接 new String[2];

28.Java中,int[]arr=new int[5];语句是数组动态初始化。
答案:√
解析:没赋值就是动态初始化,赋值那种是静态

29.Java中,语句int[]arr=new int[]{
   1,2,3};是数组静态初始化。
答案:√
解析:28

30.Java中,int[]arr=new int[5]{
   1,2,3,4,5};语句定义数组正确。
答案:x
解析:动静态结合没有这种写法,要么去5。要么去{
   }里面的句子

31.Java定义二维数组时,第二维元素个数可以不相等
答案:√
解析:没看懂,看了下文章,应该是对的,可以自己搜一下

32.Java中,匿名内部类不能向下转型。
答案:√
解析:只能用一次的匿名内部类,怎么转?

33.Java中,integer类自动装箱拆箱的范围在-128~127之间。
答案:√
解析:牛,这个都考,想看的话可以看一下我的-Java之包装类 里面最后一点有说到,还有源码

34.Java中,类的构造方法中,不可同时有superthis两种方法。
答案:√
解析:第一行要么是super要么是this,你不能同时都存在,要不然矛盾了

35.Java中,方法的形式参数是局部变量。
答案:√
解析:同19

36.Java中,类的构造代码块优先于其构造方法执行,且可以执行多次。
答案:√
解析:代码块确实先于构造方法执行,建造一次对象代码块执行一次
(静态代码块只有在类第一次加载的时候执行一次)

37.Java中,成员变量在使用前必须赋值,否则报错。
答案:x
解析:同上某一个题,堆中有默认值
!!!!!注意题目中的成员和局部

38.Java中,局部变量在使用之前必须赋值,否则报错。
答案:√
解析:同上某一个题,栈中没有

39.Java接口的子类不能是抽象类。
答案:x
解析:为什么不能,是类就能继承

40.Java接口中的变量都是常量。
答案:√
解析:接口中变量默认都是final修饰的

41.Java中,方法中的形式参数是局部变量。
答案:√
解析:同上面某个题

42.Java中, 使用protected关键字修饰的、 包下的无关类之间可以直接互相访问。
答案:x
解析:默认的可以,protected修饰的只有父子类和同类可以访问

填空题

总结一个小规律
正数溢出从最大的负数向0靠
负数溢出从最大的正数向0靠
数字溢出总是从相反数的最大值开始向0靠

1.Java语句byte b=(byte)(127+1);执行后b=()
答案:-128
解析:127原码和补码相同为01111111,用补码进行加减运算
0111111+1=10000000
当然这个10000000为补码,(这个10000000是原码的话就是-0)
这种情况用那个取反+1求出来是不匹配的!!!,因为原码只有-127-127
而补码-128-127(补码10000000无法用原码表示)
官方的话是根据补码和真值之间的公式来算真值
[x]=2^n+1+x
x=[x]-2^n+1=-10000000(-2^7)=-128
我一般都记这种补码1000..的都是=-(正数最大值+1)
这个范围就是-128-127 so,这个是-128

2.Java语句byte b=(byte)129;执行后b=()
答案:-127
解析:129=127+2 
01111111+00000010=10000001
这种不是1000...的
可以转成原码比较容易看出真值(1000...的按照上面那个判断方法)
10000001补码对应原码(除符号位取反+1=11111111
11111111对应的真值位-127

3.Java中,语句byte b=(byte)128执行后b=()
答案:-128
解析:127+1根据上面的规律,127+1整数溢出,应为最大负数-128
原码补码解法:01111111+1=10000000(补码对应-1284.语句byte b=(byte)(-0);执行后b=()
答案:0
解析:补码里面只有一个00-0对应的补码都是00000000,我觉得考点是这个

5.java中,可以对字符串本身进行改变操作的、线程不安全的类是()
答案:StringBuilder
解析:记住

6.Java中,可以对字符串本身进行改变操作的、线程安全的类是()
答案:StringBuffer
解析:记住

7.接口中的变量默认修饰符是()
答案:public static final
解析:注意是变量还是方法,对应下面14是方法

8.Java中,面向对象的三大特征:()
答案:封装,继承和多态

9.JVM中匿名类存放在()内存中
答案:方法区
解析:!!!!!!!!!!!!!!!!
看清题,就是是匿名类的类(class对象)应该是储存在方法区的
如果是对象就是堆里了

10.Java中,非静态的同步方法的锁对象是()
答案:this
解析:同步方法的锁对象,涉及多线程?
锁对象一般是this,或者对应的类.class
既然说非静态那就是this11.Java中,static修饰的变量,存放在()内存中
答案:方法区
解析:静态的变量都是放在方法区

12.Java的内存分为堆、()、方法区、本地方法区和寄存器五部分
答案:栈
解析:内存这块确实不太懂,我一直以为只有前三个,不过确实是这五部分
整个文章最开头放篇文章自己看吧

13.Java中,final修饰的变量,存放在()内存中  
答案:常量池
解析:!!!!!!!!!!!
jdk1.7前常量池在方法区,jdk1.7后常量池移到了堆中
不过我们记写常量池就行

14.Java中,接口中的方法默认修饰符是()
答案:public abstract

15.JVM中,静态的同步函数的锁是()
答案:class对象
解析:这不就预言喽
对应10的解析,静态就是class对象

16.Java给局部内部类对象分配的是()内存空间
答案:堆
解析:局部内部类也是new出来的对象啊,so在堆里

17.Java中,System.out.println(~(-9));输出的结果为()
答案:8
解析:可以自己推一下
~是按位取反的操作 
公式:
~x
  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小袁拒绝摆烂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值