精选30道Java笔试题解答_第1页
精选30道Java笔试题解答_第2页
精选30道Java笔试题解答_第3页
精选30道Java笔试题解答_第4页
精选30道Java笔试题解答_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

都是一些非常非常基础的题 是我最近参加各大 IT 公司笔试后靠记忆记下来的 经过整理 献给与我一样参加各大 IT 校园招聘的同学们 纯考 Java 基础功底 老手们就不用进来了 免得笑话我们这些未出校门的孩纸们 但是 IT 公司就喜欢考这些基础的东西 所以为了能 进大公司就 当复习期末考吧 花了不少时间整理 在整理过程中也学到了很多东西 请大家认真对待每一题 下面都是我自己的答案非官方 仅供参考 如果有疑问或错误请一定要提出来 大家一起进步啦 1 下面哪些是 Thread 类的方法 A start B run C exit D getPriority 答案 ABD 解析 看 Java API docs 吧 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 等 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 下面程序的运行结果 java view plaincopy 1 public static void main String args 2 3 Thread t new Thread 4 5 public void run 6 pong 7 8 9 10 t run 11 System out print ping 12 13 14 15 static void pong 16 17 System out print pong 18 19 A pingpong B pongping C pingpong 和 pongping 都有可能 D 都不输出 答案 B 解析 去了 static 用类对象引用仍为 B 对 Thread 的运行机制不是很了解 不知道为啥 欢迎大家补充 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 中的集合类型的继承关系图 一目了然 11 存在使 i 1 i 的数吗 答案 存在 解析 如果 i 为 int 型 那么当 i 为 int 能表示的最大整数时 i 1 就溢出变成负数了 此时不就 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 输出 为后缀的是字符流 扩展 Java 流类图结构 一目了然 解决大部分选择题 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 是从文件中还原类的对象 也不会调用构造函数 16 ArrayList list new ArrayList 20 中的 list 扩充几次 A 0 B 1 C 2 D 3 答案 A 解析 这里有点迷惑人 大家都知道默认 ArrayList 的长度是 10 个 所以如果你要往 list 里添加 20 个元 素肯定要扩充一次 扩充为原来的 1 5 倍 但是这里显示指明了需要多少空间 所以就一次性为你分配 这么多空间 也就是不需要扩充了 17 下面哪些是对称加密算法 A DES B AES C DSA D RSA 答案 AB 解析 常用的对称加密算法有 DES 3DES RC2 RC4 AES 常用的非对称加密算法有 RSA DSA ECC 使用单向散列函数的加密算法 MD5 SHA 18 新建一个流对象 下面哪个选项的代码是错误的 A new BufferedWriter new FileWriter a txt B new BufferedReader new FileInputStream a dat C new GZIPOutputStream new FileOutputStream a zip D new ObjectInputStream new FileInputStream a dat 答案 B 解析 请记得 13 题的那个图吗 Reader 只能用 FileReader 进行实例化 19 下面程序能正常运行吗 java view plaincopy 1 public class NULL 2 3 public static void haha 4 System out println haha 5 6 public static void main String args 7 NULL null haha 8 9 10 答案 能正常运行 解析 输出为 haha 因为 null 值可以强制转换为任何 java 类类型 String null 也是合法的 但 null 强 制转换后是无效对象 其返回值还是为 null 而 static 方法的调用是和类名绑定的 不借助对象进行访问 所以能正确输出 反过来 没有 static 修饰就只能用对象进行访问 使用 null 调用对象肯定会报空指针 错了 这里和 C 很类似 20 下面程序的运行结果是什么 java view plaincopy 1 class HelloA 2 3 public HelloA 4 System out println HelloA 5 6 7 System out println I m A class 8 9 static System out println static A 10 11 12 13 public class HelloB extends HelloA 14 public HelloB 15 System out println HelloB 16 17 18 System out println I m B class 19 20 static System out println static B 21 22 public static void main String args 23 new HelloB 24 25 26 答案 static A static B I m A class HelloA I m B class HelloB 解析 说实话我觉得这题很好 考查静态语句块 构造语句块 就是只有大括号的那块 以及构造函数的 执行顺序 对象的初始化顺序 1 类加载之后 按从上到下 从父类到子类 执行被 static 修饰的语句 2 当 static 语句执行完之后 再执行 main 方法 3 如果有语句 new 了自身的对象 将从上到下执行构造代 码块 构造器 两者可以说绑定在一起 下面稍微修改下上面的代码 以便更清晰的说明情况 java view plaincopy 1 class HelloA 2 3 public HelloA 4 System out println HelloA 5 6 7 System out println I m A class 8 9 static System out println static A 10 11 12 13 public class HelloB extends HelloA 14 public HelloB 15 System out println HelloB 16 17 18 System out println I m B class 19 20 static System out println static B 21 22 public static void main String args 23 24 System out println main start 25 new HelloB 26 new HelloB 27 System out println main end 28 29 此时输出结果为 static A static B main start I m A class HelloA I m B class HelloB I m A class HelloA I m B class HelloB main end 21 getCustomerInfo 方法如下 try 中可以捕获三种类型的异常 如果在该方法运行中产生了一个 IOException 将会输出什么结果 java view plaincopy 1 public void getCustomerInfo 2 3 try 4 5 do something that may cause an Exception 6 7 catch java io FileNotFoundException ex 8 9 System out print FileNotFoundException 10 11 catch java io IOException ex 12 13 System out print IOException 14 15 catch java lang Exception ex 16 17 System out print Exception 18 19 20 21 A IOException BIOException Exception CFileNotFoundException IOException DFileNotFoundException IOException Exception 答案 A 解析 考察多个 catch 语句块的执行顺序 当用多个 catch 语句时 catch 语句块在次序上有先后之分 从最前面的 catch 语句块依次先后进行异常类型匹配 这样如果父异常在子异常类之前 那么首先匹配的 将是父异常类 子异常类将不会获得匹配的机会 也即子异常类型所在的 catch 语句块将是不可到达的语 句 所以 一般将父类异常类即 Exception 老大放在 catch 语句块的最后一个 22 下面代码的运行结果为 java view plaincopy 1 import java io 2 import java util 3 4 public class foo 5 6 public static void main String args 7 8 String s 9 10 System out println s s 11 12 13 14 A 代码得到编译 并输出 s B 代码得到编译 并输出 s null C 由于 String s 没有初始化 代码不能编译通过 D 代码得到编译 但捕获到 NullPointException 异常 答案 C 解析 开始以为会输出 null 什么的 运行后才发现 Java 中所有定义的基本类型或对象都必须初始化才能 输出值 23 System out println 5 2 的输出结果应该是 A 52 B7 C2 D5 答案 A 解析 没啥好说的 Java 会自动将 2 转换为字符串 24 指出下列程序运行的结果 java view plaincopy 1 public class Example 2 3 String str new String good 4 5 char ch a b c 6 7 public static void main String args 8 9 Example ex new Example 10 11 ex change ex str ex ch 12 13 System out print ex str and 14 15 System out print ex ch 16 17 18 19 public void change String str char ch 20 21 str test ok 22 23 ch 0 g 24 25 26 A good and abc B good and gbc C test ok and abc D test ok and gbc 答案 B 解析 大家可能以为 Java 中 String 和数组都是对象所以肯定是对象引用 然后就会选 D 其实这是个很大的误区 因为在因为在 java 里没有引用传递 只有值传递里没有引用传递 只有值传递 这个值指的是实参的地址的拷贝 得到这个拷贝地址后 你可以通过它修改这个地址的内 容 引用不变 因为此时这个内容的地址和原地址是同一地址 但是你不能改变这个地址本身使其重新引用其它的对象 也就是值传递 可能说的不是很 清楚 下面给出一个完整的能说明情况的例子吧 java view plaincopy 1 package test 2 3 4 description Java 中没有引用传递只有值传递 5 6 author Alexia 7 date 2013 10 16 8 9 10 class Person 11 12 private String name 13 14 private String sex 15 16 public Person String x String y 17 this name x 18 this sex y 19 20 21 重写 toString 方法 方便输出 22 public String toString 23 24 return name sex 25 26 27 交换对象引用 28 public static void swapObject Person p1 Person p2 29 Person tmp p1 30 p1 p2 31 p2 tmp 32 33 34 交换基本类型 35 public static void swapInt int a int b 36 int tmp a 37 a b 38 b tmp 39 40 41 交换对象数组 42 public static void swapObjectArray Person p1 Person p2 43 Person tmp p1 44 p1 p2 45 p2 tmp 46 47 48 交换基本类型数组 49 public static void swapIntArray int x int y 50 int tmp x 51 x y 52 y tmp 53 54 55 改变对象数组中的内容 56 public static void changeObjectArray Person p1 Person p2 57 Person tmp p1 1 58 p1 1 p2 1 59 p2 1 tmp 60 61 再将 p1 1 修改 62 Person p new Person wjl male 63 p1 1 p 64 65 66 改变基本类型数组中的内容 67 public static void changeIntArray int x int y 68 int tmp x 1 69 x 1 y 1 70 y 1 tmp 71 72 x 1 5 73 74 75 76 public class ByValueTest 77 78 public static void main String args 79 80 建立并构造两个对象 81 Person p1 new Person Alexia female 82 Person p2 new Person Edward male 83 84 System out println 对象交换前 p1 p1 toString 85 System out println 对象交换前 p2 p2 toString 86 87 交换 p1 对象和 p2 对象 88 Person swapObject p1 p2 89 从交换结果中看出 实际对象并未交换 90 System out println n 对象交换后 p1 p1 toString 91 System out println 对象交换后 p2 p2 toString 92 93 建立两个对象数组 94 Person arraya new Person 2 95 Person arrayb new Person 2 96 97 分别构造数组对象 98 arraya 0 new Person Alexia female 99 arraya 1 new Person Edward male 100 arrayb 0 new Person jmwang female 101 arrayb 1 new Person hwu male 102 103 System out println n 对象数组交换前 arraya 0 104 arraya 0 toString arraya 1 105 arraya 1 toString 106 System out println 对象数组交换前 arrayb 0 107 arrayb 0 toString arrayb 1 108 arrayb 1 toString 109 110 交换这两个对象数组 111 Person swapObjectArray arraya arrayb 112 System out println n 对象数组交换后 arraya 0 113 arraya 0 toString arraya 1 114 arraya 1 toString 115 System out println 对象数组交换后 arrayb 0 116 arrayb 0 toString arrayb 1 117 arrayb 1 toString 118 119 建立两个普通数组 120 int a new int 2 121 int b new int 2 122 123 给数组个元素赋值 124 for int i 0 i a length i 125 a i i 126 b i i 1 127 128 129 System out println n 基本类型数组交换前 a 0 a 0 a 1 a 1 130 System out println 基本类型数组交换前 b 0 b 0 b 1 b 1 131 132 交换两个基本类型数组 133 Person swapIntArray a b 134 System out println n 基本类型数组交换后 a 0 a 0 a 1 a 1 135 System out println 基本类型数组交换后 b 0 b 0 b 1 b 1 136 137 改变对象数组的内容 138 Person changeObjectArray arraya arrayb 139 System out println n 对象数组内容交换并改变后 arraya 1 arraya 1 toString 140 System out println 对象数组内容交换并改变后 arrayb 1 arrayb 1 toString 141 142 改变基本类型数组的内容 143 Person changeIntArray a b 144 System out println n 基本类型数组内容交换并改变后 a 1 a 1 145 System out println 基本类型数组内容交换并改变后 b 1 b 1 146 147 程序有些啰嗦 但能反映问题 该程序运行结果为 对象交换前 p1 Alexia female 对象交换前 p2 Edward male 对象交换后 p1 Alexia female 对象交换后 p2 Edward male 对象数组交换前 arraya 0 Alexia female arraya 1 Edward male 对象数组交换前 arrayb 0 jmwang female arrayb 1 hwu male 对象数组交换后 arraya 0 Alexia female arraya 1 Edward male 对象数组交换后 arrayb 0 jmwang female arrayb 1 hwu male 基本类型数组交换前 a 0 0 a 1 1 基本类型数组交换前 b 0 1 b 1 2 基本类型数组交换后 a 0 0 a 1 1 基本类型数组交换后 b 0 1 b 1 2 对象数组内容交换并改变后 arraya 1 wjl male 对象数组内容交换并改变后 arrayb 1 Edward male 基本类型数组内容交换并改变后 a 1 5 基本类型数组内容交换并改变后 b 1 1 说明 不管是对象 基本类型还是对象数组 基本类型数组 在函数中都不能改变其实际地址但能改变其说明 不管是对象 基本类型还是对象数组 基本类型数组 在函数中都不能改变其实际地址但能改变其 中的内容 中的内容 25 要从文件 file dat 中读出第 10 个字节到变量 c 中 下列哪个方法适合 A FileInputStream in new FileInputStream file dat in skip 9 int c in read B FileInputStream in new FileInputStream file dat in skip 10 int c in read C FileInputStream in new FileInputStream file dat int c in read D RandomAccessFile in new RandomAccessFile file dat in skip 9 int c in readByte 答案 A D 解析 long skip long n 作用是跳过 n 个字节不读 主要用在包装流中的 因为一般流 如 FileInputStream 只能顺序一个一个的读不能跳跃读 但是包装流可以用 skip 方法跳跃读取 那么什么 是包装流呢 各种字节节点流类 它们都只具有读写字节内容的方法 以 FileInputStream 与 FileOutputStream 为例 它们只能在文件中读取或者向文件中写入字节 在实际应用中我们往往需要在文 件中读取或者写入各种类型的数据 就必须先将其他类型的数据转换成字节数组后写入文件 或者从文件 中读取到的字节数组转换成其他数据类型 想想都很麻烦 因此想通过 FileOutputStream 将一个浮点 小数写入到文件中或将一个整数写入到文件时是非常困难的 这时就需要包装类 DataInputStream DataOutputStream 它提供了往各种输入输出流对象中读入或写入各种类型的数据的 方法 DataInputStream DataOutputStream 并没有对应到任何具体的流设备 一定要给它传递一个对应具体流 设备的输入或输出流对象 完成类似 DataInputStream DataOutputStream 功能的类就是一个包装类 也 叫过滤流类或处理流类 它对 InputOutStream OutputStream 流类进行了包装 使编程人员使用起来更方 便 其中 DataInputStream 包装类的构造函数语法 public DataInputStream InputStream in 包装类也 可以包装另外一个包装类 首先 BC 肯定 是错的 那 A 正确吗 按上面的解析应该也不对 但我试了下 发现 A 也是正确的 与网 上解析的资料有些出入 下面是我的 code java view plaincopy 1 import java io FileInputStream 2 import java io FileOutputStream 3 import java io IOException 4 5 public class FileStreamTest 6 7 public static void main String args throws IOException 8 TODO Auto generated method stub 9 10 FileOutputStream out new FileOutputStream file dat 11 12 byte b 1 2 3 4 5 6 7 8 9 10 13 out write b 14 out close 15 16 FileInputStream in new FileInputStream file dat 17 in skip 9 跳过前面的 9 个字节 18 int c in read 19 System out println c 输出为 10 20 in close 21 22 23 那么 D 呢 RandomAccessFile 是 IO 包的类 但是其自成一派 从 Object 直接继承而来 可以对文件进 行读取和写入 支持文件的随机访问 即可以随机读取文件中的某个位置内容 这么说 RandomAccessFile 肯定可以达到题目的要求 但是选项有些错误 比如 RandomAccessFile 的初始化是 两个参数而非一个参数 采用的跳跃读取方法是 skipBytes 而非 skip 即正确的写法是 RandomAccessFile in new RandomAccessFile file dat r in skipBytes 9 int c in readByte 这样也能读到第十个字节 也就是 A 和 D 都能读到第十个字节 那么到底该选哪个呢 A 和 D 有啥不同 吗 求大神解答 26 下列哪种异常是检查型异常 需要在编写程序时声明 ANullPointerException BClassCastException CFileNotFoundException D IndexOutOfBoundsException 答案 C 解析 看第 2 题的解析 27 下面的方法 当输入为 2 的时候返回值是多少 java view plaincopy 1 public static int getValue int i 2 int result 0 3 switch i 4 case 1 5 result result i 6 case 2 7 result result i 2 8 case 3 9 result result i 3 10 11 return result 12 A0 B2 C4 D10 答案 D 解析 注意这里 case 后面没有加 break 所以从 case 2 开始一直往下运行 28 选项中哪一行代码可以替换题目中 add code here 而不产生编译错误 java view plaincopy 1 public abstract class MyClass 2 3 public int constInt 5 4 add code here 5 public void method 6 7 Apublic abstract void method int a B constInt constInt 5 C public int method D public abstract void anotherMethod 答案 A 解析 考察抽象类的使用 抽象类遵循的原则 1 abstract 关键字只能修饰类和方法 不能修饰字段 2 抽象类不能被实例化 无法使用 new 关键字创建对象实例 只能被继承 3 抽象类可以包含属性 方法 构造方法 初始化块 内部类 枚举类 和普通类一样 普通方法一 定要实现 变量可以初始化或不初始化但不能初始化后在抽象类中重新赋值或操作该变量 只能在子类中 改变该变量 4 抽象类中的抽象方法 加了 abstract 关键字的方法 不能实现 5 含有抽象方法的类必须定义成抽象类 扩展 抽象类和接口的区别 做个总结吧 1 接口是公开的 里面不能有私有的方法或变量 是用于让别人使用的 而抽象类是可以有私有方法 或私有变量的 2 abstract class 在 Java 语言中表示的是一种继承关系 一个类只能使用一次继承关系 但是 一 个类却可以实现多个 interface 实现多重继承 接口还有标识 里面没有任何方法 如 Remote 接口 和 数据共享 里面的变量全是常量 的作用 3 在 abstract class 中可以有自己的数据成员 也可以有非 abstarct 的成员方法 而在 interface 中 只能够有静态的不能被修改的数据成员 也就是必须是 static final 的 不过在 interface 中一般不定义数 据成员 所有的成员方法默认都是 public abstract 类型的 4 abstract class 和 interface 所反映出的设计理念不同 其实 abstract class 表示的是 is a 关系 interface 表示的是 has a 关系 5 实现接口的一定要实现接口里定义的所有方法 而实现抽象类可以有选择地重写需要用到的方法 一般的应用里 最顶级的是接口 然后是抽象类实现接口 最后才到具体类实现 抽象类中可以有非抽象 方法 接口中则不能有实现方法 6 接口中定义的变量默认是 public static final 型 且必须给其初值 所以实现类中不能重新定义 也 不能改变其值 抽象类中的变量默认是 friendly 型 其值可以在子类中重新定义 也可以在子类中重新 赋值 29 阅读 Shape 和 Circle 两个类的定义 在序列化一个 Circle 的对象 circle 到文件时 下面哪个字段会 被保存到文件中 java view plaincopy 1 class Shape 2 3 public String name 4 5 6 7 class C

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论