java 错题集

2019.7.21
1.下列哪个类的声明是正确的?
abstract final class HI{}
abstract private move(){}
protected private number;
public abstract class Car{}

对于A选项,使用final修饰的类表示的是最终类,不能被继承;
而abstrct类是抽象类,需要被继承,两者冲突,所以abstract和final不能同时修饰一个类。
对于B选项,由于private修饰的方法不能被子类实现,而抽象类的子类必须实现所有的抽象方法。
所以private不能修饰抽象方法,抽象方法只能使用protected和public关键字修饰。
对于C选项,修饰符public、protected、private只需要使用其中一个修饰变量,
也可以不适用修饰符,例如int age;所以C选项的修饰符重复,而且没有定义数据类型。
D选项,正确,这是抽象类的通常写法 正确答案: D

2.以下代码执行后输出结果为( )

public class ExceptionTest
{
    public void method()
    {
	try
	{
	    System.out.println("进入到try块");
	}
	catch (Exception e)
	{
	     System.out.println("异常发生了!");
	}
	finally
	{
	    System.out.println("进入到finally块");
	}
	    System.out.println("后续代码");
 }
     public static void main(String[] args)
     {
	 ExceptionTest test = new ExceptionTest();
	 test.method();
     }
 }
进入到try块  异常发生了!  进入到finally块  后续代码
进入到try块  进入到finally块  后续代码
进入到try块  后续代码
异常发生了!  后续代码

try { //执行的代码,其中可能有异常。一旦发现异常,则立即跳到catch执行。
否则不会执行catch里面的内容 }catch { //除非try里面执行代码发生了异常,
否则这里的代码不会执行 }finally { //不管什么情况都会执行,包括try catch 里面用了return
,可以理解为只要执行了try或者catch,就一定会执行 finally }
总结一下,不管你try中有没有return,finally中的代码一定会执行。
当try中有return,但是finally中没有,则finally中的代码在try中return执行前执行;
当两者中均有return,那么先执行finally中return之前的代码,
然后执行try中return,最后执行finally中的return!!!

3.A 派生出子类 B , B 派生出子类 C ,并且在 Java 源代码中有如下声明:

  1. A a0=new A();
  2. A a1 =new B();
  3. A a2=new C();
    问以下哪个说法是正确的? ( )
    正确答案: D 你的答案: B (错误)
    只有第1行能通过编译
    第1、2行能通过编译,但第3行编译出错
    第1、2、3行能通过编译,但第2、3行运行时出错
    第1行、第2行和第3行的声明都是正确的

继承具有传递性,子类可以无条件向上转型!

4.不考虑反射,String类型变量所指向内存空间中的内容是不能被改变的 。 ( )
正确答案: A 你的答案: B (错误)

正确
错误

指向的内容在常量池中不可以变,但是可以改变string的指向

5.以下哪个接口的定义是正确的?( )
正确答案: D 你的答案: D (正确)

interface  B
{ public abstract void print()  {  } ;}

interface  B
{ static void print() ;}

abstract  interface  B  extends  A1, A2  //A1、A2为已定义的接口
{private abstract  void  print();}

interface  B
      {  void  print();}

A 抽象方法不能有方法体,仔细点可以看到有大括号。
B 接口里的方法只能用 public 和 abstract 修饰,如果你不写也没关系,默认的也是 public abstract 修饰.
C 同上
D 正确

6.在Java中,关于HashMap类的描述,以下错误的是
正确答案: B 你的答案: C (错误)

HashMap使用键/值得形式保存数据
HashMap 能够保证其中元素的顺序
HashMap允许将null用作键
HashMap允许将null用作值

HashMap不能保证元素的顺序,
HashMap能够将键设为null,也可以将值设为null,
与之对应的是Hashtable,(注意大小写:不是HashTable),
Hashtable不能将键和值设为null,否则运行时会报空指针异常错误;
HashMap线程不安全,Hashtable线程安全

7.下面有关JVM内存,说法错误的是?
正确答案: C 你的答案: C (正确)

程序计数器是一个比较小的内存区域,用于指示当前线程所执行的字节码执行到了第几行,是线程隔离的

虚拟机栈描述的是Java方法执行的内存模型,用于存储局部变量,操作数栈,动态链接,方法出口等信息,是线程隔离的

方法区用于存储JVM加载的类信息、常量、静态变量、以及编译器编译后的代码等数据,是线程隔离的

原则上讲,所有的对象都在堆区上分配内存,是线程之间共享的

方法区在JVM中也是一个非常重要的区域,它与堆一样,是被 线程共享 的区域。
在方法区中,存储了每个类的信息(包括类的名称、方法信息、字段信息)、
静态变量、常量以及编译器编译后的代码等。

8.下面有关JAVA swing的描述,说法错误的是?
正确答案: C 你的答案: D (错误)

Swing是一个基于Java的跨平台MVC框架。使用单线程模式。
Swing 是为了解决 AWT 存在的问题而新开发的包,它以 AWT 为基础的
Swing优化了AWT,运行速度比AWT快
Swing是一个基于组件的框架,所有的组件都是从javax.swing.JComponent类继承来的

Swing 是在AWT的基础上构建的一套新的图形界面系统,它提供了AWT 所能够提供的所有功能,
并且用纯粹的Java代码对AWT 的功能进行了大幅度的扩充。AWT 是基于本地方法的C/C++程序,
其运行速度比较快;Swing是基于AWT 的Java程序,其运行速度比较慢。
9.下面说法正确的是?()
正确答案: B C 你的答案: C (错误)

调用Thread的sleep()方法会释放锁,调用wait()方法不释放锁
一个线程调用yield方法,可以使具有相同优先级线程获得处理器
在Java中,高优先级的可运行的线程会抢占低优先级线程的资源
java中,线程可以调用yield方法使比自己低优先级的线程运行

还记得马老师说过,yiled方法属于高风亮节的行为,
这个坑位我不上了,后面跟我同级别的先上厕所。这样比较好记!
高优先级的就是你们的县长,县长要上厕所,对不起,你得出来,县长先上,
县长上完了,CPU分配到你了,你才能继续拉X。
yield()让当前正在运行的线程回到可运行状态,以允许具有相同优先级的其他线程获得运行的机会。
因此,使用yield()的目的是让具有相同优先级的线程之间能够适当的轮换执行。
但是,实际中无法保证yield()达到让步的目的,因为,让步的线程可能被线程调度程序再次选中。

10.往OuterClass类的代码段中插入内部类声明, 哪一个是错误的:

public class OuterClass{
    private float f=1.0f;
    //插入代码到这里
}
正确答案: A B C D   你的答案: B C (错误)

class InnerClass{
public static float func(){return f;}
}
abstract class InnerClass{
public abstract float func(){}
}
static class InnerClass{
protected static float func(){return f;}
}
public class InnerClass{
 static float func(){return f;}
}

静态方法不能访问非静态变量,A和C错;
抽象类中的抽象方法不能有方法体,B错;
一个类中有多个类声明时,只能有一个public类,D错
选ABCD。
A选项,InnerClass非静态内部类中出现了static修饰的func()方法,静态内部类才可以声明静态方法。
B选项,abstract修饰的抽象类中抽象方法func(){}包含了方法体。
C选项,static的内部类不能引用外部类的非static的私有成员变量 f 。
D选项,静态内部类才可以声明静态方法, 静态方法不能使用非静态变量。

2019.07.22
11.下面属于java合法变量定义的是?
final
1var1
_var2
var3&

A.final 是关键字
B.不能以数字做首写
C.首写字母可以为下划线
D.不能与&相组合来命名
标识符可以包括这4种字符:字母、下划线、$、数字;开头不能是数字;不能是关键字

12.以下哪个区域不属于新生代?
正确答案: C 你的答案: B (错误)

eden区
from区
元数据区
to区

java 中的堆是 JVM 所管理的最大的一块内存空间,主要用于存放各种类的实例对象。
在 Java 中,堆被划分成两个不同的区域:新生代 ( Young )、老年代 ( Old )。
新生代 ( Young ) 又被划分为三个区域:Eden、From Survivor、To Survivor。
这样划分的目的是为了使 JVM 能够更好的管理堆内存中的对象,包括内存的分配以及回收。
堆大小 = 新生代 + 老年代。其中,堆的大小可以通过参数 –Xms、-Xmx 来指定。

13.java 接口的修饰符可以为()
正确答案: D 你的答案: D (正确)

private
protected
final
abstract

接口是通用的,用来描述方法是干什么用的,方法的默认修饰符为public abstract.
不可以为final 是因为方法要被重写, 描述符如果为private或者protected,
那么子类重写的方法的描述符也可以为private或者protected
这样就是有了访问显示,不符合接口所要达到的的任何人都可以使用了

14.下面的程序段创建了BufferedReader类的对象in,以便读取本机c盘my文件夹下的文件1.txt。
File构造函数中正确的路径和文件名的表示是( )。
File f = new File( 填代码处);
file =new FileReader(f);
in=new BufferedReader(file);
正确答案: C 你的答案: C (正确)

"./1.txt"
"../my/1.txt"
"c:\\my\\1.txt"
"c:\\ my\1.txt"

./表示当前项目的路径
…/表示当前目录的父目录路径
盘符:\name\file 或者 盘符:/name/file
表示物理路径
可以这么记:"“这个符号在中英文环境下是不一样的显示;
而”/"在中英文环境下是相同的显示。所以前者需要转义。
15.执行完以下代码 int [ ] x = new int[10] ;后,以下哪项说明是正确的( )
正确答案: A 你的答案: D (错误)

x[9]为0
x[9]未定义
x[10]为0
x[0]为空

数组引用类型的变量的默认值为 null。当数组变量的实例后,
如果没有没有显示的为每个元素赋值,Java 就会把该数组的所有元素初始化为其相应类型的默认值。
int型的默认值为0

当编译并运行下面程序时会发生什么结果()

public class Bground extends Thread{
public static void main(String argv[]){
Bground b = new Bground();
b.run();
}
public void start(){
for(int i=0;i<10;i++){
System.out.println("Value of i = "+i);
}
}
}

编译错误,指明run方法没有定义
运行错误,只鞥呢run方法没有定义
编译通过并输出0到9
编译通过,但无输出
查看正确选项

对于线程而言,start是让线程从new变成runnable。run方法才是执行体的入口。
但是在Thread中,run方法是个空方法,没有具体实现。
Bground继承了Thread,但是没有重写run方法,那么调用run方法肯定是无输出
最后说一说,Thread 的执行过程,Theard的启动方法是start().线程类调用start();
然后执行start0()本地方法,然后就没办法再追溯下去了。
start我听过别人说,是一个准备工作(比如你要吃苹果,不得先洗一下,真正吃时间是洗完后),
并没有获得cpu,调用run()才是获得了cpu。

17.下面有关webservice的描述,错误的是?
正确答案: B 你的答案: C (错误)

Webservice是跨平台,跨语言的远程调用技术
Webservice通信机制实质就是json数据交换
Webservice采用了soap协议(简单对象协议)进行通信
WSDL是用于描述 Web Services 以及如何对它们进行访问

解析:Webservice是跨平台,跨语言的远程调用技术;
它的通信机制实质就是xml数据交换;
它采用了soap协议(简单对象协议)进行通信
Web service顾名思义是基于web的服务,它是一种跨平台,跨语言的服务。
我们可以这样理解它,比如说我们可以调用互联网上查询天气信息的web服务,
把它嵌入到我们的B/S程序中,当用户从我们的网点看到天气信息时,
会认为我们为他提供很多的服务,但其实我们什么也没做,
只是简单的调用了一下服务器上的一端代码而已。
Web service 可以将你的服务发布到互联网上让别人去调用,
也可以调用别人发布的web service,和使用自己的代码一样。
它是采用XML传输格式化的数据,它的通信协议是SOAP(简单对象访问协议).

18.下面有关java的引用类型,说法正确的有?
正确答案: A B C D 你的答案: A C (错误)

对于一个对象来说,只要有强引用的存在,它就会一直存在于内存中
如果一个对象仅持有虚引用,那么它就和没有任何引用一样,在任何时候都可能被垃圾回收器回收。
如果一个对象只具有软引用,则内存空间足够,垃圾回收器就不会回收它;如果内存空间不足了,就会回收这些对象的内存
一旦发现了只具有弱引用的对象,不管当前内存空间足够与否,都会回收它的空间

1、强引用:一个对象赋给一个引用就是强引用,比如new一个对象,一个对象被赋值一个对象。
2、软引用:用SoftReference类实现,一般不会轻易回收,只有内存不够才会回收。
3、弱引用:用WeekReference类实现,一旦垃圾回收已启动,就会回收。
4、虚引用:不能单独存在,必须和引用队列联合使用。主要作用是跟踪对象被回收的状态。

19.下列说法错误的有( )
正确答案: A C D 你的答案: A D (错误)

在类方法中可用this来调用本类的类方法
在类方法中调用本类的类方法时可直接调用
在类方法中只能调用本类中的类方法
在类方法中绝对不能调用实例方法

A:类方法是指类中被static修饰的方法,无this指针。
C:类方法是可以调用其他类的static方法的。
D:可以在类方法中生成实例对象再调用实例方法。
2019.07.23
20.
代码 的运行结果是()

package com.sunline.java;
public class A implements B extends C{
public static void main(String args[]){
System.out.println(“hello sunline!”);
}
}

在控制台打印hello sunline!
报异常java.lang.NullPoninterException
编译报错
报异常java.lang.RuntimeExcception

正确答案:c
1、Java 中单实现通过 implements 关键字,多实现通过 extends 关键字

2、Java 中单继承通过 extends 关键字,没有多继承

3、如果同时出现继承和实现,则必须先继承(extends)再实现(implements)

21.JVM内存不包含如下哪个部分( )
正确答案: D 你的答案: B (错误)

Stacks
PC寄存器
Heap
Heap Frame

JVM内存五大区域:虚拟机栈(VM Stacks(栈帧Frame)),
本地方法栈(Native Method Stack),
pc寄存器(Program Counter Register),
方法区(Method Area),堆(Heap)

22.下面叙述那个是正确的?()
正确答案: B 你的答案: B (正确)

java中的集合类(如Vector)可以用来存储任何类型的对象,且大小可以自动调整。但需要事先知道所存储对象的类型,才能正常使用。
在java中,我们可以用违例(Exception)来抛出一些并非错误的消息,但这样比直接从函数返回一个结果要更大的系统开销。
java接口包含函数声明和变量声明。
java中,子类不可以访问父类的私有成员和受保护的成员。

A.vector是线程安全的ArrayList,在内存中占用连续的空间。初始时有一个初始大小
当数据条数大于这个初始大小后会重写分配一个更大的连续空间。
如果Vector定义为保存Object则可以存放任意类型。
B.try{}catch{}会增加额外的开销
C.接口中声明的’变量’必须为public final static,所以为常量
D.子类可以访问父类受保护的成员

23.下面哪一项不属于优化Hibernate所鼓励的?
正确答案: A 你的答案: B (错误)

使用单向一对多关联,不使用双向一对多
不用一对一,用多对一取代
配置对象缓存,不使用集合缓存
继承类使用显式多态

优化Hibernate所鼓励的7大措施:
1.尽量使用many-to-one,避免使用单项one-to-many
2.灵活使用单向one-to-many
3.不用一对一,使用多对一代替一对一
4.配置对象缓存,不使用集合缓存
5.一对多使用Bag 多对一使用Set
6.继承使用显示多态 HQL:from object polymorphism=“exlicit” 避免查处所有对象
7.消除大表,使用二级缓存

24.下面哪些情况可以引发异常:

正确答案: A B C 你的答案: A B (错误)
数组越界
指定URL不存在
使用throw语句抛出
使用throws语句
throw出现在方法体中 throw是抛出了异常,所以执行 的时候则一定抛出了某种异常
throws出现在方法头,表示出现异常的可能性,并不一定会发生某种异常

25.A,B,C,D 中哪些是 setvar的重载?
public class methodover
{
public void setVar(int a, int b, float c) {}
}

正确答案: A C D 你的答案: C D (错误)

private void setVar(int a, float c, int b){}
protected void setVar(int a, int b, float c){}
public int setVar(int a, float c, int b){return a;}
public int setVar(int a, float c){return a;}

方法的重载是指:
1、在同一个类中
2、方法名相同
3、方法的形参列表不同
具体的不同表现为:
类型、个数、顺序的不同才可以构成重载
4、#比较容易忽略的一点#
与方法的返回值类型与访问权限无关

26.不考虑反射,关于私有访问控制符 private 修饰的成员变量,以下说法正确的是()
正确答案: C 你的答案: B (错误)

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

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

访问修饰符\作用范围 所在类 同一包内其他类 其他包内子类 其他包内非子类
private 可以访问 不可以 不可以 不可以
default 可以 可以 不可以 不可以
protected 可以 可以 可以 不可以
public 可以 可以 可以 可以

27.下列关于修饰符混用的说法,错误的是( )
正确答案: D 你的答案: C (错误)

abstract不能与final并列修饰同一个类
abstract 类中不建议有private的成员
abstract 方法必须在abstract类或接口中
static方法中能直接处理非static的属性

A、被abstract 修饰的类表示必须被其他类继承使用,而被final修饰的类,
表示不能作为其他类的父类,两者矛盾。故不能同时使用
B、abstract 类里可以有private成员,但是 abstract 类是要被继承使用,
也就是说该类的属性方法是要被其他类所访问使用的,如果有属性或者方法被private修饰,
表示只能内部使用,两者似乎又矛盾了。故不建议有private成员
C、抽象方法只能声明在抽象类或者接口中,这个是母庸质疑的
D、类方法不能直接使用实例方法,必须实例化后,利用对象调用方法,才能处理。故D错误

28.假设 A 类有如下定义,设 a 是 A 类同一个包下的一个实例,下列语句调用哪个是错误的?()
class A{
int i;
static String s;
void method1() { }
static void method2() { }
}
正确答案: C 你的答案: A (错误)

System.out.println(a.i);
a.method1();
A.method1();
A.method2()

非静态方法只能通过实例对象来调用,不能直接通过类名调用。
静态方法(static)才能通过类名直接调用

类中变量:除了private权限外,其他权限的变量(没有表示默认default),
均可以用“对象.变量名”来调用。对于private变量,即使使用static,
也不能用“类.变量名”来调用私有变量。只能通过类中的public get()方法来调用。
类中方法:除了private权限外,其他权限的方法(没有表示默认default),
均可以用“对象.方法名”来调用。private方法可以用java反射机制调用。
当然如果用 private修饰方法,该方法只在类的内部调用。
其中比较著名的就是单例模式中的私有构造方法。
static属性:static方法在编译期就已经生成了,其他方法在运行期生成。
非私有的static方法可以用“类.方法名”调用。
但是私有的static变量和方法都是不可能被调用的,虽然private static这种写法很少见,
但仍然存在,且编译器不会报错。题中static void method2() { }的权限是默认权限,
所以可以用“类.方法名”来调用。如果题目中写成private static void method2(){ } ,
那么D选项也是错误的。
29.
Web程序中,当前用户上下文信息应该保存在下面哪个对象中()

正确答案: C   你的答案: C (正确)

page
request
session
Application

当前用户上下文信息:session
appication:当前应用
pageContext:当前页面
request:当前请求

30.指出下列程序运行的结果:

public class Example{
String str=new String(“tarena”);
char[]ch={‘a’,‘b’,‘c’};
publi

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值