java期末考试试题及答案

时间:2025-09-22 17:00:44 赛赛 SUN认证 我要投稿
  • 相关推荐

java期末考试试题及答案(精选3套)

  在平时的学习、工作中,我们都可能会接触到考试题,考试题是命题者根据一定的考核需要编写出来的。你知道什么样的考试题才算得上好考试题吗?下面是小编帮大家整理的java期末考试试题及答案,欢迎大家分享。

java期末考试试题及答案(精选3套)

  java期末考试试题及答案 1

  1.请看下列代码:

  class ClassA {}

  class ClassB extends ClassA {}

  class ClassC extends ClassA {}

  public class Test{

  public static void main(String[] args) {

  ClassA p0 = new ClassA();

  ClassB p1 = new ClassB();

  ClassC p2 = new ClassC();

  ClassA p3 = new ClassB();

  ClassA p4 = new ClassC();

  <插入代码>

  }

  }

  可以在<插入代码>处,填入的代码正确的是()

  A.p0 = p1;

  B.p1 =p2;

  C.p2 = p4;

  D.p2 = (ClassC)p1;

  正确答案:A

  2.运行下面程序:

  public class Foo {

  public static void main(String[] args) {

  StringBuffer a=new StringBuffer("A");

  StringBuffer b=new StringBuffer("B");

  operator(a,b);

  System.out.println(a+","+b);

  }

  public static void operator(StringBuffer x,StringBuffer y){

  x.append(y);

  y=x;

  }

  }

  输出的结果是:()。

  A.A,B

  B.A,A

  C.B,B

  D.AB,B

  正确答案:D

  3.下列代码的输出结果是: ()。

  public class A {

  public void info(){

  System.out.println("A info");

  }

  }

  public class B extends A{

  public void info(){

  System.out.println("B info");

  }

  public static void main(String[] args) {

  B b=new B();

  A a=b;

  a.info();

  }

  }

  A.B info

  A info

  B.A info

  B info

  C.A info

  D.B info

  正确答案:D

  4.下列代码运行的结果是()。

  public class Base {

  public static final String FOO = "foo";

  public static void main(String[] args) {

  Base b = new Base();

  Sub s = new Sub();

  System.out.print(Base.FOO);

  System.out.print(Sub.FOO);

  System.out.print(b.FOO);

  System.out.print(s.FOO);

  System.out.print(((Base) s).FOO);

  }

  }

  class Sub extends Base {

  public static final String FOO = "bar";

  }

  A.foofoofoofoofoo

  B.foobarfoobarbar

  C.foobarfoofoofoo

  D.foobarfoobarfoo

  正确答案:D

  5.执行下列语句:

  int a = 0x9af700; // 00 00 00 10 01 10 10 1111 0111 0000 0000 00

  a <<= 2;

  变量a的值为:()。

  A. 0x26bdc00

  B. 0xc6bdc00

  C. 0x3fa0000

  D. 0x7e02ffff

  正确答案:A

  6. 下面的代码用于对数组arr实现冒泡排序:【1,2,3,4,5】

  for (int i = 0; i < arr.length - 1; i++) {

  boolean isSwap = false;

  空白处

  if (!isSwap)

  break;

  }

  下列选项中,空白处可以填入的代码是:()。//每轮比较结束把最小的放在前面

  A. for (int j = arr.length - 1; j > i; j--) {

  if (arr[j] < arr[j - 1]) {

  int temp = arr[j];

  arr[j] = arr[j - 1];

  arr[j - 1] = temp;

  isSwap = true;

  }

  }

  B. for (int j = arr.length - 1; j > 0; j--) {

  if (arr[j] < arr[j - 1]) {

  int temp = arr[j];

  arr[j] = arr[j - 1];

  arr[j - 1] = temp;

  isSwap = true;

  }

  }

  C. for (int j = i + 1; j< arr.length; j++) {

  if (arr[j] < arr[j - 1]) {

  int temp = arr[j];

  arr[j] = arr[j - 1];

  arr[j - 1] = temp;

  isSwap = true;

  }

  }

  D. for (int j = i; j< arr.length; j++) {

  if (arr[j] < arr[j - 1]) {

  int temp = arr[j];

  arr[j] = arr[j - 1];

  arr[j - 1] = temp;

  isSwap = true;

  }

  }

  正确答案:A

  7.下列语句创建对象的总个数是:()。

  String s=”a”+”b”+”c”+”d”+”e”;

  A.1

  B.2

  C.3

  D.4

  正确答案:A

  8.运行下列程序:

  String str = "**oracle***oracle*****oracle***";

  String str1 = "oracle";

  int index = 0;

  while ((index = str.indexOf(str1, index)) != -1) {

  System.out.print(index+””);

  index += str1.length();

  }

  控制台输出的结果是:()。

  A.1 10 21

  B.2 11 22

  C.3 13 23

  D.5 13 22

  正确答案:B

  9. 下列表达式中,可以得到精确结果的是()。

  A. double d1 = 3.0 - 2.6; 0.4

  B. double d4 = 2.5 * 1.5;

  C. double d2 = 30/300;

  D. double d3 = 1/2 + 0.5;

  正确答案:B

  10.类Super及Sub定义如下:

  public class Super {

  private void f() {

  System.out.println("Super.f()");

  }

  public void g() {

  f();

  }

  public void k() {

  f();

  }

  }

  public class Sub extends Super {

  private void f() {

  System.out.println("Sub.f()");

  }

  public void k() {

  f();

  }

  }

  运行下列语句:

  Super obj = new Sub();

  obj.g();

  obj.k();

  输出的结果是:()。

  A. Sub.f()

  Sub.f()

  B. Sub.f()

  Super.f()

  C. Super.f()

  Sub.f()

  D. Super.f()

  Super.f()

  正确答案:C

  11. 下列数组声明语句中,错误的是:()。

  A.int[] arr = new int[8];

  B.int[] arr = new int[8]{};

  C.int[] arr = {};

  D.int[] arr = new int[]{};

  正确答案:B

  12.执行下列语句:

  int num=~3+2; 变量num的值为()。

  A.-3

  B.3

  C.-2

  D.-1

  正确答案:C

  13.请看下列代码:

  interface Data { public void load(); }

  abstract class Info { public abstract void load(); }

  下列选项中,能正确使用Data接口和Info类的是()。

  A.public class Employee extends Info implements Data {

  public void load() { /*do something*/ }

  }

  B.public class Employee implements Info extends Data {

  public void load() { /*do something*/ }

  }

  C.public class Employee implements Info extends Data {

  public void Data.load() { /*d something */ }

  public void load() { /*do something */ }

  }

  D.public class Employee extends Info implements Data {

  public void load() { /*do something */ }

  public void Info.load() { /*do something*/ }

  }

  正确答案:A

  14.下列代码编译和运行的结果是()。

  public class A {

  public void start() {

  System.out.println("TestA");

  }

  }

  public class B extends A {

  public void start() {

  System.out.println("TestB");

  }

  public static void main(String[] args) {

  ((A) new B()).start();

  }

  }

  A.输出:TestA

  B.输出:TestB

  C.输出:TestA TestB

  D.编译错误

  正确答案:B

  15.类A,B的定义如下:

  class A {

  private int a = 100;

  A() {

  System.out.print("A()");

  System.out.println(a);

  }

  }

  class B extends A {

  private int a = 200;

  B() {

  System.out.print("B()");

  System.out.println(a);

  }

  }

  运行下面的代码:new B();

  输出的结果是:()。

  A. A() 100

  B() 200

  B. A() 200

  B() 200

  C. B() 200

  A() 100

  D. B() 200

  A() 200

  正确答案:A

  16.下列代码的输出结果是()

  public static void main(String[] args) {

  String test = "a1b2c3";

  String[] tokens = test.split("\\d");

  for (String s : tokens)

  System.out.print(s + " ");

  }

  A.a b c

  B.1 2 3

  C.a1b2c3

  D.a1 b2 c3

  正确答案:A

  17. 关于Java线程说法错误的是()。

  A.创建线程的有2种方式,方式1是继承Thread类,方式2是实现 Runnable 接口

  B.解决线程安全使用问题 synchronized关键字,使得同一时间只有一个线程执行该关键字限定的代码段

  C.线程间通信所使用的方法有,wait,notify,notifyAll,它们都是 Thread 的方法

  D.Java线程包括5个状态,线程的创建,可运行,运行,阻塞和消亡

  正确答案:C

  18.下列代码的输出结果是()。

  boolean b=true?false:true==true?false:true;//b=tuer?false:false

  System.out.println(b);

  A.true

  B.false

  C.null

  D.空字符串

  正确答案:B

  19.请看下列代码编译和运行的结果是()。

  interface DeclareStuff {

  public static final int EASY = 3;

  void doStuff(int t);// public rabstract

  }

  public class TestDeclare implements DeclareStuff {

  public static void main(String[] args) {

  int x = 5;

  new TestDeclare().doStuff(++x);

  }

  void doStuff(int s) {

  s += EASY + ++s;

  System.out.println("s=" + s);

  }

  }

  A.s=14

  B.s=16

  C.s=10

  D.编译失败

  正确答案:D

  20. 运行下面的程序:

  String[] fileNames = { "abc.txt", "bcd.exe", "cde.exe", "def.dat","efg.exe" };

  for (String fileName : fileNames) {

  if (fileName.endsWith(".exe")) {

  System.out.print(fileName.substring(0, fileName

  .lastIndexOf(".exe"))+" ");

  }

  }

  控制台的输出结果是:()。

  A. bcd. cde. efg.

  B. bc cd ef

  C. bcd.exe cde.exe efg.exe

  D. bcd cde efg

  正确答案:D

  21.下列代码的作用说法不正确的是:()。

  class Card implements java.io.Serializable{}

  A.开启序列化功能,使得Card类的对象可以存储到文件中

  B.开启序列化功能,使得Card类的对象可以在网络上传输

  C.使得Card类的子类的对象可以被序列化

  D.导致Card的子类的对象不可以被反序列化

  正确答案:D

  22. 运行下列代码,输出为false的是:()。

  A. String st1 = "abc";

  System.out.println("abc" == st1);

  B. String st2 = "abc";

  System.out.println(st2.equals(new String("abc")));

  C. Integer i = 100; //

  System.out.println(100 == i);

  D. ArrayList list = new ArrayList();

  System.out.println(list.contains(null));

  正确答案:D

  23.运行下列程序:

  String str = "**java***java*****java*";

  String str1 = "java";

  int index = 0;

  while ((index = str.indexOf(str1, index)) != -1) {

  System.out.print(index+””);

  index += str1.length();

  }

  控制台输出的结果是:()。

  A. 1 8 17

  B. 2 9 18

  C. 5 12 21

  D. 6 13 22

  正确答案:B

  24. 下列代码中不能正确获取到Class类的对象的是:()。

  A.String sub = "hello";

  Class c1 = sub.getClass();

  B.Class c2 = int.TYPE;

  C.Class c1 = Class.forName ("java.lang.Integer");

  D.Button b = new Button();

  Class c1 = b.getClass();

  Class c2 = c1.getSuperclass();

  正确答案:B

  25.URLEncoding是一种应用于HTTP协议的编码方式,字符串“你好”基于UTF-8的URLEncoding编码为: “%E4%BD%A0%E5%A5%BD”

  其中E4、BD、A0为字符“你”的UTF-8编码的十六进制形式(3个字节),而E5、A5、BD为字符“好”的UTF-8编码的十六进制形式。

  下面的代码用程序的方式输出字符串“你好”的基于UTF-8的URLEncoding序列:

  String msg = "你好";

  空白处1

  StringBuilder sb = new StringBuilder();

  for (int i = 0; i < bs.length; i++) {

  空白处2

  sb.append("%").append(str);

  }

  System.out.println(sb.toString());

  空白处1及空白处2分别应填入的代码是()。

  A. byte[] bs = msg.getChars("utf-8");

  和 String str = Integer.toHexString(bs[i]& 0xff).toUpperCase();

  B. byte[] bs = msg.getBytes("utf-8");

  和 String str = Integer.toHexString(bs[i]).toUpperCase();

  C. byte[] bs = msg.getBytes("utf-8");

  和 String str = Integer.toHexString(bs[i] & 0xff).toUpperCase();

  D. byte[] bs = msg.getBytes();

  和 String str = Integer.toHexString(bs[i]).toUpperCase();

  正确答案:C

  26.程序执行的结果是()。

  public class Test {

  String name="Tom";

  public Test(String name){

  name=name;

  }

  public static void main(String [] args){

  Test t = new Test("Jack");

  System.out.println(t.name);

  }

  }

  A.null

  B.Tom

  C.Jack

  D." "

  正确答案:B

  27. 下列属于不合法Java标识符的是()。

  A._avaj

  B.5save

  C.Avaj

  D.$80

  正确答案:B

  28.下列代码的输出结果是()。

  public static void main(String[] args) {

  Runnable r = new Runnable() {

  public void run() {

  System.out.print("Cat");

  }

  };

  Thread t = new Thread(r) {

  public void run() {

  System.out.print("Dog");

  }

  };

  t.start();

  }

  A.Cat

  B.Dog

  C.没有任何输出

  D.抛出运行时异常

  正确答案:B

  29. 下面关于final说法正确的是:()。

  A.final修饰类时,该类能被继承。

  B.final修饰方法时,该方法能被重写。

  C.当使用static final 修饰的常量时,将采用编译期绑定的方式。

  D.当使用final和abstract共同修饰一个类时,final应至于abstract之前。

  正确答案:C

  30. 下面关于final说法错误的是:()

  A. final修饰类时,该类不能被继承。

  B. final修饰方法时,该方法不能被重写。

  C. 当引用到使用static final 修饰的常量时,将采用编译期绑定的方式。

  D. 当使用final和abstract共同修饰一个类时,final应至于abstract之前。

  正确答案:D

  31.请看下列代码:

  public static void main(String[] args) {

  <插入代码>

  System.out.println(s);

  }

  如果程序输出的结果是4247,那么在<插入代码>处应该填入代码是()。

  A.String s = "123456789";

  s = (s-"123").replace(1,3,"24") - "89";

  B.StringBuffer s = new StringBuffer("123456789");

  s.(0,3).replace( 1,3, "24").(4,6);

  C.StringBuffer s = new StringBuffer("123456789");

  s.substring(3,6).( 1 ,3).( 1, "24");

  D.StringBuilder s = new StringBuilder("123456789");

  s.substring(3,6).( 1 ,2).( 1, "24");

  正确答案:B

  32. 下面关于interface,叙述错误的是:()

  A.一个interface可以继承多个interface

  B.接口中的方法可以由private修饰

  C.interface中可以定义static final 常量

  D.interface中可以无任何方法定义

  正确答案:B

  33.分析如下代码,输出结果为()。

  public static void main(String[] args) {

  int i = 0;

  boolean re = false

  re = ((++i) + i == 2) ? true : false;

  System.out.println("i=" + i + ",re="+re);

  }

  A.i=1,re=true

  B.i=0,re=true

  C.i=1,re=false

  D.i=0,re=false

  正确答案:A

  34. 下列数组声明语句中,错误的是:()。

  A. int[] arr = new int[]{};

  B. int[] arr = new int[];

  C. int[] arr = {};

  D. int[][] arr = new int[2][]

  正确答案:B

  35.下列代码的'运行结果是()

  public static void main(String[] args) {

  String str = "420";

  str += 42;

  System.out.print(str);

  }

  A.42

  B.420

  C.462

  D.42042

  正确答案:D

  36.所谓“水仙花”数是一个整数等于各位数字立方的和,例如:153 = 1*1*1+5*5*5+3*3*3,下面的程序用于输出2~1000内的水仙花数:

  for (int n = 2; n <= 1000; n++) {

  空白处

  if (s == n) {

  System.out.println(n);

  }

  }

  下列选项中,空白处可以填入的代码是:()。

  A. int s = 0, n1 = n;

  while (n1 > 0) {

  int t = n1 % 10;

  s += t * t * t;

  n1 /= 10;

  }

  B. int s = 0, n1 = n;

  while (n1 > 0) {

  int t = n1 / 10;

  s+= t * t * t;

  n1 %= 10;

  }

  C. int s = 0;

  for(int n1 = n; n1>0; n1 /= 10) {

  int t = n1%10;

  s += t * t * t;

  }

  D.int s = 0;

  for(int n1 = n; n1>0; n1 %= 10) {

  int t = n1 / 10;

  s += t * t * t;

  }

  正确答案:AC

  37. 下面的方法属于StringBuffer的是:()。

  A. size

  B.

  C.

  D. length

  正确答案:BCD

  38.类Super的定义如下:

  class A {

  protected void f() throws IOException {

  ………

  }

  }

  下列代码段中,没有编译错误的是:()。

  A. class B extends A {

  public void f() throws Exception {

  ………

  }

  }

  B. class B extends A {

  public void g() throws IOException {

  f();

  }

  }

  C. class B extends A {

  public void g() {

  try {

  f();

  ………

  }catch(Exception e) {

  ………

  }catch(IOException e1) {

  ………

  }

  }

  }

  D. class B extends A {

  public void g() {

  try {

  f();

  }catch(IOException e) {

  throw new RuntimeException(e);

  }

  }

  }

  正确答案:BD

  39.查看如下代码:

  public class Foo {

  public void method(String str,int age){}

  }

  下列选项中,和 Foo 类中 method 方法重载的方法是()。

  A.public int method(String str,int age){}

  B. public void method(int year,String s){}

  C. public int method(int year,String s){}

  D. public int method(String str){}

  正确答案:BCD

  40. 下列关于Java的说法,错误的是()。

  A. Java语言是纯粹的面向对象的语言。

  B. Java程序的运行必须有Java虚拟机(JVM)的支持。

  C. Java语言支持指针。

  D. Java语言支持多重继承。

  正确答案:CD

  41.矩阵是指纵横排列的数据表格,最早来自于方程组的系数及常数所构成的方阵,如:

  a11 a12... a1n

  a21 a22... a2n

  ... ... ...

  am1 am2... amn

  矩阵乘积规则示例如下:

  两个矩阵a和b可以相乘的条件是a矩阵的列数和b矩阵的行数相同,例如:

  假设矩阵a为“2行3列”:

  a11 a12 a13

  a21 a22 a23

  矩阵b为“3行2列”:

  b11 b12

  b21 b22

  b31 b32

  a和b可以相乘,乘积矩阵为:

  a11*b11+a12*b21+a13*b31 a11*b12+a12*b22+a13*b32

  a21*b11+a22*b21+a23*b31 a21*b12+a22*b22+a23*b32

  Matrix类的定义如下:

  public class Matrix {

  private double[][] data;

  private int rows;

  private int cols;

  public Matrix(int rows, int cols) {

  if (rows <= 0 || cols <= 0)

  throw new IllegalArgumentException("");

  this.rows = rows;

  this.cols = cols;

  data = new double[rows][cols];

  }

  public Matrix(int rows, int cols, String line) {

  if (rows <= 0 || cols <= 0 || line == null)

  throw new IllegalArgumentException("");

  String[] dataStr = line.split(",");

  if ( 空白处1 ) {

  throw new IllegalArgumentException("");

  }

  this.rows = rows;

  this.cols = cols;

  data = new double[rows][cols];

  for (int i = 0; i < dataStr.length; i++) {

  ( 空白处2 )

  }

  }

  public Matrix mul(Matrix ma) {

  if ( 空白处3 ) {

  throw new IllegalArgumentException();

  }

  Matrix mc = new Matrix(rows, ma.cols);

  for (int i = 0; i < mc.getRows(); i++) {

  for (int j = 0; j < mc.getCols(); j++) {

  for ( 空白处4 ) {

  空白处5

  }

  }

  }

  return mc;

  }

  public int getRows() {

  return rows;

  }

  public int getCols() {

  return cols;

  }

  public String toString() {

  StringBuilder sb = new StringBuilder();

  for (int i = 0; i < rows; i++) {

  for (int j = 0; j < cols - 1; j++) {

  sb.append(data[i][j]).append(",");

  }

  sb.append(data[i][cols - 1]).append("\n");

  }

  return sb.toString();

  }

  }

  (1). 空白处1()

  A. dataStr.length != (rows-1) * (cols-1)

  B. dataStr.length != (rows-1) * cols

  C. dataStr.length != rows * cols

  D. dataStr.length != rows * (cols-1)

  正确答案:C

  (2). 空白处2()

  A. data[i % cols][i / cols] = Double.parseDouble(dataStr[i]);

  B. data[i/cols][i % cols] = Double.parseDouble(dataStr[i]);

  C. data[i/ rows][i % rows] = Double.parseDouble(dataStr[i]);

  D. data[i % rows][i /rows] = Double.parseDouble(dataStr[i]);

  正确答案:B

  (3). 空白处3()

  A. cols != ma.cols

  B. rows != ma.cols

  C. rows != ma.rows

  D. cols != ma.rows

  正确答案:D

  (4). 空白处4()

  A. int k = 0; k < cols; k++

  B. int k = 0; k

  C. int k = 0; k

  D. int k = 0; k

  正确答案:A

  (5). 空白处5()

  A. mc.data[i][j] += data[k][j] * ma.data[i][k];

  B. mc.data[i][j] += data[k][i] * ma.data[j][k];

  C. mc.data[i][j] += data[j][k] * ma.data[k][i];

  D. mc.data[i][j] += data[i][k] * ma.data[k][j];

  正确答案:D

  42.下面的程序用于从54张扑克牌中,随机选出13张不同的扑克牌。

  public static void main(String[] args) {

  String[] cards = { "红桃3", "红桃4", "红桃5", "红桃6", "红桃7",

  "红桃8","红桃9","红桃10","红桃J","红桃Q","红桃K","红桃A",

  "黑桃3", "黑桃4", "黑桃5", "黑桃6", "黑桃7","黑桃8","黑桃9",

  "黑桃10","黑桃J","黑桃Q","黑桃K","黑桃A","红方块3", "红方块4",

  "红方块5", "红方块6", "红方块7","红方块8","红方块9","红方块10",

  "红方块J","红方块Q","红方块K","红方块A","黑方块3", "黑方块4",

  "黑方块5", "黑方块6", "黑方块7","黑方块8","黑方块9","黑方块10",

  "黑方块J","黑方块Q","黑方块K","黑方块A"};

  int len=cards.length;

  空白处1

  while (true) {

  Random rd = new Random();

  空白处2

  cardThirteen.add(cards[index]);

  if ( 空白处3 == 13) {

  break;

  }

  }

  空白处4

  while ( 空白处5 ) {

  System.out.println(it.next());

  }

  }

  (1).下列选项中,能填入空白处1的代码是( )

  A.Set cardThirteen = new HashSet();

  B.Set cardThirteen = new Set();

  C.List cardThirteen = new List();

  D.List cardThirteen = new ArrayList();

  正确答案:A

  (2).下列选项中,能填入空白处2的代码是( )

  A.index = rd.nextInt();

  B.index = rd.nextInt(5);

  C.index = rd.nextInt(len + 1);

  D.index = rd.nextInt(len);

  正确答案:D

  (3).下列选项中,能填入空白处3的代码是( )

  A.cardThirteen.size

  B.cardThirteen.length

  C.cardThirteen.length()

  D.cardThirteen.size()

  正确答案:D

  (4).下列选项中,能填入空白处4的代码是( )

  A.Iterator it = cardThirteen.iterator();

  B.Iterator it = cardThirteen.next();

  C.Iterators it = cardThirteen.iterator();

  D.Iterators it = cardThirteen.nexts();

  正确答案:A

  (5).下列选项中,能填入空白处5的代码是( )

  A.it.hasNext()

  B.it.hasNexts ()

  C.it.next ()

  D.it.nexts()

  正确答案:A

  java期末考试试题及答案 2

  1. 下面哪些是Thread类的方法()

  A start() B run() C exit() D getPriority()

  答案:ABD

  解析:看Java API docs吧:http://docs.oracle.com/javase/7/docs/api/,exit()是System类的方法,如System.exit(0)。

  2. 下面关于java.lang.Exception类的说法正确的是()

  A 继承自Throwable B Serialable CD 不记得,反正不正确

  答案:A

  解析:Java异常的基类为java.lang.Throwable,java.lang.Error和java.lang.Exception继承 Throwable,RuntimeException和其它的Exception等继承Exception,具体的RuntimeException继承RuntimeException。

  扩展:错误和异常的区别(Error vs Exception)

  1) java.lang.Error: Throwable的子类,用于标记严重错误。合理的应用程序不应该去try/catch这种错误。绝大多数的错误都是非正常的,就根本不该出现的。

  java.lang.Exception: Throwable的子类,用于指示一种合理的程序想去catch的条件。即它仅仅是一种程序运行条件,而非严重错误,并且鼓励用户程序去catch它。

  2) Error和RuntimeException 及其子类都是未检查的异常(unchecked exceptions),而所有其他的Exception类都是检查了的异常(checked exceptions).

  checked exceptions: 通常是从一个可以恢复的程序中抛出来的,并且最好能够从这种异常中使用程序恢复。比如FileNotFoundException, ParseException等。检查了的异常发生在编译阶段,必须要使用try…catch(或者throws)否则编译不通过。

  unchecked exceptions: 通常是如果一切正常的话本不该发生的异常,但是的确发生了。发生在运行期,具有不确定性,主要是由于程序的逻辑问题所引起的。比如ArrayIndexOutOfBoundException, ClassCastException等。从语言本身的角度讲,程序不该去catch这类异常,虽然能够从诸如RuntimeException这样的异常中catch并恢复,但是并不鼓励终端程序员这么做,因为完全没要必要。因为这类错误本身就是bug,应该被修复,出现此类错误时程序就应该立即停止执行。 因此,面对Errors和unchecked exceptions应该让程序自动终止执行,程序员不该做诸如try/catch这样的事情,而是应该查明原因,修改代码逻辑。

  RuntimeException:RuntimeException体系包括错误的类型转换、数组越界访问和试图访问空指针等等。

  处理RuntimeException的原则是:如果出现 RuntimeException,那么一定是程序员的错误。例如,可以通过检查数组下标和数组边界来避免数组越界访问异常。其他(IOException等等)checked异常一般是外部错误,例如试图从文件尾后读取数据等,这并不是程序本身的错误,而是在应用环境中出现的'外部错误。

  3. 下面程序的运行结果是()

  String str1 = "hello";

  String str2 = "he" + new String("llo");

  System.err.println(str1 == str2);

  答案:false

  解析:因为str2中的llo是新申请的内存块,而==判断的是对象的地址而非值,所以不一样。如果是String str2 = str1,那么就是true了。

  4. 下列说法正确的有()

  A. class中的constructor不可省略

  B. constructor必须与class同名,但方法不能与class同名

  C. constructor在一个对象被new时执行。

  D.一个class只能定义一个constructor

  答案:C

  解析:这里可能会有误区,其实普通的类方法是可以和类名同名的,和构造方法唯一的区分就是,构造方法没有返回值。

  5. 具体选项不记得,但用到的知识如下:

  String []a = new String[10];

  则:a[0]~a[9] = null

  a.length = 10

  如果是int []a = new int[10];

  则:a[0]~a[9] = 0

  a.length = 10

  6. 下面程序的运行结果:()

  public static void main(String args[]) {

  Thread t = new Thread() {

  public void run() {

  pong();

  }

  };

  t.run();

  System.out.print("ping");

  }

  static void pong() {

  System.out.print("pong");

  }

  #FormatImgID_0#

  A pingpong B pongping C pingpong和pongping都有可能 D 都不输出

  答案:B

  解析:这里考的是Thread类中start()和run()方法的区别了。start()用来启动一个线程,当调用start方法后,系统才会开启一个新的线程,进而调用run()方法来执行任务,而单独的调用run()就跟调用普通方法是一样的,已经失去线程的特性了。因此在启动一个线程的时候一定要使用start()而不是run()。

  7. 下列属于关系型数据库的是()

  A. Oracle B MySql C IMS D MongoDB

  答案:AB

  解答:IMS(Information Management System )数据库是IBM公司开发的两种数据库类型之一;

  一种是关系数据库,典型代表产品:DB2;

  另一种则是层次数据库,代表产品:IMS层次数据库。

  非关系型数据库有MongoDB、memcachedb、Redis等。

  8. GC线程是否为守护线程?()

  答案:是

  解析:线程分为守护线程和非守护线程(即用户线程)。

  只要当前JVM实例中尚存在任何一个非守护线程没有结束,守护线程就全部工作;只有当最后一个非守护线程结束时,守护线程随着JVM一同结束工作。

  守护线程最典型的应用就是 GC (垃圾回收器)

  9. volatile关键字是否能保证线程安全?()

  答案:不能

  解析:volatile关键字用在多线程同步中,可保证读取的可见性,JVM只是保证从主内存加载到线程工作内存的值是最新的读取值,而非cache中。但多个线程对

  volatile的写操作,无法保证线程安全。例如假如线程1,线程2 在进行read,load 操作中,发现主内存中count的值都是5,那么都会加载这个最新的值,在线程1堆count进行修改之后,会write到主内存中,主内存中的count变量就会变为6;线程2由于已经进行read,load操作,在进行运算之后,也会更新主内存count的变量值为6;导致两个线程及时用volatile关键字修改之后,还是会存在并发的情况。

  10. 下列说法正确的是()

  A LinkedList继承自List

  B AbstractSet继承自Set

  C HashSet继承自AbstractSet

  D WeakMap继承自HashMap

  答案:AC

  解析:下面是一张下载的Java中的集合类型的继承关系图,一目了然。

  #FormatImgID_1#

  11. 存在使i + 1 < i的数吗()

  答案:存在

  解析:如果i为int型,那么当i为int能表示的最大整数时,i+1就溢出变成负数了,此时不就

  扩展:存在使i > j || i <= j不成立的数吗()

  答案:存在

  解析:比如Double.NaN或Float.NaN,感谢@BuilderQiu网友指出。

  12. 0.6332的数据类型是()

  A float B double C Float D Double

  答案:B

  解析:默认为double型,如果为float型需要加上f显示说明,即0.6332f

  13. 下面哪个流类属于面向字符的输入流( )

  A BufferedWriter B FileInputStream C ObjectInputStream D InputStreamReader

  答案:D

  解析:Java的IO操作中有面向字节(Byte)和面向字符(Character)两种方式。

  面向字节的操作为以8位为单位对二进制的数据进行操作,对数据不进行转换,这些类都是InputStream和OutputStream的子类。

  面向字符的操作为以字符为单位对数据进行操作,在读的时候将二进制数据转为字符,在写的时候将字符转为二进制数据,这些类都是Reader和Writer的子类。

  总结:以InputStream(输入)/OutputStream(输出)为后缀的是字节流;

  以Reader(输入)/Writer(输出)为后缀的是字符流。

  14. Java接口的修饰符可以为()

  A private B protected C final D abstract

  答案:CD

  解析:接口很重要,为了说明情况,这里稍微啰嗦点:

  (1)接口用于描述系统对外提供的所有服务,因此接口中的成员常量和方法都必须是公开(public)类型的,确保外部使用者能访问它们;

  (2)接口仅仅描述系统能做什么,但不指明如何去做,所以接口中的方法都是抽象(abstract)方法;

  (3)接口不涉及和任何具体实例相关的细节,因此接口没有构造方法,不能被实例化,没有实例变量,只有静态(static)变量;

  (4)接口的中的变量是所有实现类共有的,既然共有,肯定是不变的东西,因为变化的东西也不能够算共有。所以变量是不可变(final)类型,也就是常量了。

  (5) 接口中不可以定义变量?如果接口可以定义变量,但是接口中的方法又都是抽象的,在接口中无法通过行为来修改属性。有的人会说了,没有关系,可以通过 实现接口的对象的行为来修改接口中的属性。这当然没有问题,但是考虑这样的情况。如果接口 A 中有一个public 访问权限的静态变量 a。按照 Java 的语义,我们可以不通过实现接口的对象来访问变量 a,通过 A.a = xxx; 就可以改变接口中的变量 a 的值了。正如抽象类中是可以这样做的,那么实现接口 A 的所有对象也都会自动拥有这一改变后的 a 的值了,也就是说一个地方改变了 a,所有这些对象中 a 的值也都跟着变了。这和抽象类有什么区别呢,怎么体现接口更高的抽象级别呢,怎么体现接口提供的统一的协议呢,那还要接口这种抽象来做什么呢?所以接口中 不能出现变量,如果有变量,就和接口提供的统一的抽象这种思想是抵触的。所以接口中的属性必然是常量,只能读不能改,这样才能为实现接口的对象提供一个统 一的属性。

  通俗的讲,你认为是要变化的东西,就放在你自己的实现中,不能放在接口中去,接口只是对一类事物的属性和行为更高层次的抽象。对修改关闭,对扩展(不同的实现 implements)开放,接口是对开闭原则的一种体现。

  所以:

  接口的方法默认是public abstract;

  接口中不可以定义变量即只能定义常量(加上final修饰就会变成常量)。所以接口的属性默认是public static final 常量,且必须赋初值。

  注意:final和abstract不能同时出现。

  15. 不通过构造函数也能创建对象吗()

  A 是 B 否

  答案:A

  解析:Java创建对象的几种方式(重要):

  (1) 用new语句创建对象,这是最常见的创建对象的方法。

  (2) 运用反射手段,调用java.lang.Class或者java.lang.reflect.Constructor类的newInstance()实例方法。

  (3) 调用对象的clone()方法。

  (4) 运用反序列化手段,调用java.io.ObjectInputStream对象的 readObject()方法。

  (1)和(2)都会明确的显式的调用构造函数 ;(3)是在内存上对已有对象的影印,所以不会调用构造函数 ;(4)是从文件中还原类的对象,也不会调用构造函数。

  坐完笔试后,很多人都希望能提前预知面试题目,最好的方法就是整理一些经典的面试题,java面试的专业性比较强,如果你的基础不够扎实,那么最好找些经典的java面试题及答案分析,提前参透一下吧!

  java面试题1、说说HashMap和Hashtable的差别

  答案分析:

  都属于Map接口的类,实现了将惟一键映射到特定的值上。

  HashMap类没有分类或排序。他允许一个null键和多个null值。

  Hashtable类似于HashMap,不过不允许null键和null值。他也比HashMap慢,因为他是同步的。

  java面试题2、Anonymous Inner Class (匿名内部类)是否能extends(继承)其他类,是否implements(实现)interface(接口)?

  答案分析:

  匿名的内部类是没有名字的内部类。不能extends(继承)其他类,但一个内部类能作为一个接口,由另一个内部类实现。

  java面试题3、STRING与STRINGBUFFER的区别是什么?

  答案分析:

  STRING的长度是不可变的,STRINGBUFFER的长度是可变的。如果你对字符串中的内容经常进行操作,特别是内容要修改时,那么使用StringBuffer,如果最后需要String,那么使用StringBuffer的toString()方法。

  java面试题4、什么时候用assert

  答案分析:

  断言是个包含布尔表达式的语句,在执行这个语句时假定该表达式为true。如果表达式计算为false,那么系统会报告一个AssertionError,他用于调试目的。

  java面试题5、Set里的元素是不能重复的,那么用什么方法来区分重复和否呢?是用==还是equals()?他们有何差别?

  答案分析:

  Set里的元素是不能重复的,那么用iterator()方法来区分重复和否。equals()是判读两个Set是否相等。

  equals()和==方法决定引用值是否指向同一对象equals()在类中被覆盖,为的是当两个分离的对象的内容和类型相配的话,返回真值。

  java面试题6、List, Set, Map是否继承自Collection接口?

  答案分析:

  List,Set是

  Map不是

  java期末考试试题及答案 3

  选择题

  1). 下面( )是合法的标识符。

  A.$persons

  B.2Users

  C.*poi nt

  D.this

  正确答案:A

  答案解析:本题考查Java 标识符的命名,属于考试重点内容,应该掌握。Java 中标识符的命名规则是:标识符以字母、下画线或美元符作为首字符的字符串序列;标识符是区分大小写的;标识符的字符数没有限制。由此可见,Java 中标识符不能以数字开头,所以选项B错误;不能以“*”开头,选项C错误;this 是专用标识符,具有专门的意义和用途,选项D 错误,只有选项A 正确。

  2). 设有一个已按各元素的值排好序的顺序表(长度大于2),现分别用顺序查找法和二分查找法查找与给定值k相等的元素,比较的次数分别是s和b,在查找不成功情况下s和b的关系是( )。

  A.s =b

  B.s>b

  C.s

  D.s>=b

  正确答案:B

  答案解析:顺序查找的基本思想是:从表的一端开始,顺序扫描线性表,依次将扫描到结点的关键字和给定值k进行比较,若当前扫描到结点的关键字与k相等,则查找成功;若扫描结束后,仍未找到关键字等于k的结点,则查找失败。二分查找法是一种效率较高的查找方法,要求线性表是有序表。基本思想是:首先将待查的k值和有序表R[O]~R[n -1]的中间位置mid上的结点的关键字进行比较,若相等,则查找完成;否则,若R[mi d]. key>k,则说明待查找的结点只可能在左子表R[O]~R[mi d -1]中,我们只需在左子表中继续进行折半查找,若R[mi d]. key

  3). 定义一个表示10个值为null的字符串数组,下面选项正确的是( )。

  A.String []a;

  B.String a[];

  C.char a[10][];

  D.String a[]=new String[10];

  正确答案:D

  答案解析:本题考查字符串数组变量的声明。选项A和选项B的效果是一样的,都是用来定义一个字符串数组,但没有指明数组个数,不满足题目要求;选项C是一个二维的字符数组,在C语言中,一个二维的字符数组就可以表示一个一维的字符串数组,而在Java中,字符char是基本类型,字符串String则是以对象的形式来表示的;选项D正确,它定义了一个含有10个元素的字符串数组,如果没有给字符串数组赋值,则默认为null。

  4). Thread类中能运行线程的方法是( )。

  A.resume()

  B.start()

  C.run()

  D.init()

  正确答案:C

  答案解析:resume()是Thread类提供的用于线程控制的方法;start()是Thread类中的方法,新建的线程不会自动运行,必须调用线程的start()方法才能运行该线程;run()是Thread类中的方法,在该方法中定义了线程的具体行为,线程开始执行时,就是从它的run()方法开始执行的,就像Java应用程序从main()开始、Applet从init()开始一样;init()不是Thread类中的`方法。

  5). 在面向对象的方法中,一个对象请求另一个对象为其服务的方式是通过发送

  A.调用语句

  B.命令

  C.口令

  D.消息

  正确答案:D

  6). 下列的( )原始类型在使用流时可以互换。

  A.byte和boolean

  B.char和int

  C.byte和char

  D.String和char

  正确答案:B

  答案解析:本题考查Java语言中字节类型的概念。在Java语言中,byte是字节类型,用1字节表示.boolean是布尔类型,用true和false表示,它们的表示方法并不一样,也不提供它们之间的转换,选项A错误。Java内部用整数来表示char,通常可以在方法调用和其他语句中互换使用char和int,选项B正确。char用2字节表示,byte字节类型用l字节表示,Java内部也不允许互换使用它们,选项C错误。String在Java语言中是一个类,它提供对字符串的一系列操作,而char是Java语言中的一个基本类型,它不是一个类,两者有本质的区别,故而它们是不能互换使用的,选项D错误。需要注意的是,在Java语言中提供的类都是以大写字母开头,基本类型都用小写字母表示。

  7). 下列说法中,不属于数据模型所描述的内容是( )。

  A.数据结构

  B.数据操作

  C.数据查询

  D.数据约束

  正确答案:C

  答案解析:数据模型所描述的内容包括三个部分

【java期末考试试题及答案】相关文章:

java试题及答案07-04

JAVA模拟试题及答案10-18

java考试试题及答案10-25

java面试题及答案11-01

java基础笔试题及答案10-18

2017年Java试题及答案11-09

JAVA编程面试题及答案05-16

java面试题2017及答案06-08

2024年Java笔试题及答案10-29