JAVA基础和API错题合集
一JAVA基础
JAVA
1.(多选题)关于Java 语言,下列描述正确的是(AD)
A)switch不能够作用在String类型上
B)List, Set, Map都继承自Collection接口-Map没有继承Collection接口;
C)Java语言支持goto语句---------------java不支持goto语句
D)GC是垃圾收集器,程序员不用担心内存管理
排序
(单选题)序列[15, 67, 26, 43, 61, 25, 84, 80, 34, 70]进行冒泡排序时,第三趟排序的结果是:(B)。
A.[15, 26, 43, 61, 25, 67, 80, 34, 70, 84]
B.[15, 26, 25, 43, 61, 34, 67, 70, 80, 84]
C.[15, 26, 43, 25, 61, 67, 34, 70, 80, 84]
D.[15, 25, 26, 43, 34, 61, 67, 70, 80, 84]
数组
1、关于数组下列说法错误的是(C)。
A.数组中的每个元素都有相同的类型
B.数组中的元素可以是基本数据类型,也可以是对象
C.一旦数组被声明,大小就不能改变
D.一旦数组被创建,大小就不能改变
2( 多选题)下列说法错误的有( BCD)
A)数组是一种对象
B)数组属于一种原生类----------------数组不是原生类
C)int number=[]={31,23,33,43,35,63}
D)数组的大小可以任意改变
整理
能存储汉字“达”的是:()。1.int 2.char
字符类型事实上是一个16位无符号整数,这个整数对应字符的Unicode字符集编码。本题中,int类型和char类型都可以存储汉字“达”。
Java Card、Java Me、Java Se、Java EE都属于Java技术体系
Java虚拟机解释执行字节码
Java的类是对具有相同行为对象的一种抽象
Java中的垃圾回收机制是一个系统级的线程
在JDK目录结构中,lib目录下存放的都是库文件,而bin目录下有编译器、解释器和许多工具(如服务器工具、IDL、package工具和jdb等)。
(多选题)下列描述中,哪些符合Java 语言的特征
支持跨平台(Windows,Linux,Unix等)
提高了代码安全性支持与其它语言书写的程序进行通讯)
没有指针的概念,拥有GC垃圾自动回收机制。
String类型变量取值应为小写null或其他用""双引号括起来的内容
在java中,char是一个无符号16位类型,取值范围为0到65535。
隐式类型转换规则是:byte→short(char)→int→long→float→double
二面向对象
1.(单选题)关于以下代码描述正确的有()
public class Cats {
public static void main(String args[]) {
List
cats.add(new Cat());
Animal b = new Animal();
Cat a = null;
if(b instanceof Animal)
强转成类型为Cat-应该判断b instanceof Cat判断前者是否是后者的一个实例
a = (Cat)b;
if(a != null)
cats.add(a);
System.out.println(cats.size() +"cats");
}
}
class Animal {}
class Cat extends Animal{}
?A)编译失败
?B)输出1 cats
?C)输出2 cats
?D)运行时抛出异常
?解析:
1 (单选题)请问,以下哪些修饰符不能用于顶层类?(BCD)
A)publicB)privateC)abstractD)final
对于顶层类(外部类)来说,只有两种修饰符:public和默认(default)。因为外部类的上一单元是包,所以外部类只有两个作用域:同包,任何位置。因此,只需要两种控制权限:包控制权限和公开访问权限,也就对应两种控制修饰符:public和默认(default)。
但是private可以修饰class的,只不过该类不能使顶层类,可以是内部类
构造方法的作用是在实例化对象的时候给属性成员进行初始化。
A.类中如果没有显示的给出构造方法,系统会提供一个无参构造方法。
B.构造方法与类同名,类中可以有和类名相同的方法。
C.constructor 在一个对象被new 时执行
D.构造方法可以重载。
静态块是类加载的时候就会被执行到的,静态执行顺序是按照在类中出现的先后顺序执行。
对象是先声明,声明后会在给对象在内存里开辟空间,之后初始化,再进行使用
2.(单选题)关于实例方法和类方法,以下描述正确的是(D)
oA)实例方法只能访问实例变量-------------------------------A 实例方法可以访问类变量;
oB)类方法既可以访问类变量,也可以访问实例变量B 类方法只能访问类变量;
oC)类方法只能通过类名来调用-------------------------------C 类方法可以调用静态方法;
oD)D实例方法只能通过对象来调用
3.(多选题)下列说法错误的有(ACD)
oA)在类方法中可用this 来调用本类的类方法A在类方法中不能使用this 关键字。
oB)在类方法中调用本类的类方法时可直接调用
oC)在类方法中只能调用本类中的类方法C在类方法中可以调用其它类中的类方法。
oD)在类方法中绝对不能调用实例方法---D在类方法中可以通过实例化对象调用实例方法。
程序中的对象是一种数据信息,并非现实中的实际物体
静态变量是所有对象所共享的,所以上述代码中的几个对象操作是同一静态变量x,静态变量可以通过类名调用。
java中,null、true、false都不属于java 的关键字,它们都属于字面量值,都有着特殊的用途,且不建议作为标识符使用。
栈(stack)在计算机科学中是限定仅在表尾进行插入或删除操作的线性表。
4 (单选题)程序执行的结果是:(D)。
public class Answer {
public static void main(String[] args) {
int score = 20;
Answer ans= new Answer();
ans.add(score);
System.out.println(" main:score = " + score);
}
void add(int score) {
System.out.println(" add:score=" + score++);
}}
A . 1 add:score=21
2 main:score = 21
B. 1 add:score=20
2 main:score = 21
C. 1 add:score=21
2 main:score = 20
D. 1 add:score=20
2 main:score = 20
形参score在add方法中发生变化时不会影响到main方法中局部变量score的值。
在Java中方法参数传递只有值传递,其特点如下:
1)基本数据类型传递的是值本身。
2)引用数据类型传递也是引用的值,是对象的地址,而不是对象本身。
final修饰局部变量时若是未使用可以不初始化,使用前必须要初始化
java中的局部变量不能加上访问权限修饰符
final关键字的用法如下:
1.final关键字修饰的类不可以被继承。
2.2.final关键字修饰的方法不可以在子类中被重写。
3. 3.final关键字修饰成员变量,意为初始化后不可改变。该成员变量必需在初始化时赋值,
对象一旦创建即不可改变。可以在声明时初始化或在构造方法中进行初始化。
不同包子类的关系,可以访问到父类B 的protected 成员
5.(多选题)属性的可见性有(ABD)
A)公有的B)私有的C)私有保护的D)保护的
属性的可见性有四种:公有的(public)、保护的(protected)、默认的(default)、私有的(private)
6.(多选题)给定java代码如下所示,在1处新增下列(AC)方法,是对show方法的重载
public class Test{
public void show(int x, int y, int z) { }
}
A.public int show(int x,int y,float z){return 0;}
B.public int show(int x,int y,int z){return 0;}
C.public void show(int x,int z){}
D.public viod show(int z,int y,int x){}
方法的重载必须满足方法名相同和参数不同(类型或个数)
三API
String
System.out.println("\\".length());//1
System.out.println("\633".length());//2
System.out.println("\63".length());//1
System.out.println("\6".length());//1
1(单选题)以下表达式那个是否不合法
String x="Hello";int y=9;if(x==y) { }
因为"=="两边的类型不匹配,无法比较,所以此表达式是错误的。
2(单选题)-----------------------------------------D
public class Base{
private void test() {
String aStr = "? One? ";
String bStr = aStr;
aStr.toUpperCase();
aStr.trim();
System.out.println("[" + aStr + "," + bStr + "]");
}
static public void main(String[] a) {
new Base().test();
}
}
A)[ONE,?One?]
B)[?One?,One]
C)[ONE,ONE]
D)[?One?,?One?]
对字符串的任何改动都是创建新的对象,只要做出改变后未将其地址赋给原字符串的引用,该引用指向的字符串值不变
File directory = new File("d");如果当前目录下不存在d目录会抛出异常java.io.IOException: 系统找不到指定的路径。
2. 下面程序运行的结果是( C )
String str = “abcdefg”;
str.substring(0,2);-------对字符串的改变就是创建新对象
System.out.println(str);
a) ab
b) abc
c) abcdefg
d) 出现下标越界异常
3.(单选题)以下程序运行结果是:(C)
class Demo {
int x;
public static void main(String[] args) {
Demo d = new Demo();
d.x = 8; -----------------引用地址相同
show(d);
System.out.println("x="+d.x);
}
public static void show(Demo d) {
d.x = 7;-----------------引用地址相同
}}
A.x=8
B.会出现语法编译错误
C.x=7
D.以上都不对
本题考查调用带有引用类型的参数调用带有引用类型的参数,传递的是对象的引用,方法中操作该参数,操作的是传递到该方法中的具体对象。
4.(多选题)请看下列代码,关于运行后的输出结果说法正确的是:()- - - - -AC
1 package util;
2 class Point {}
3 public class Test{
4 public static void main(String[] args) {
5 Point p=new Point();
6 System.out.println(p);
System.out.println(p.toString());
7 }
8 }
A.输出结果相同
B.输出结果不同
C.输出结果都是util.Point@hashCode
D.其中一个输出结果是Point@hashCode
所有的Java类都继承了Object的toString方法,该方法默认返回的字符串的形式为:类名@ hashCode值,其中类名包括“包名.类”。
Java类可以根据需要重写toString方法以返回更有意义的信息。在输出对象时没有显式调用toString方法,系统也会默认调用toString方法。
5.下面所有描述String类中equals()方法正确的是( d )
a) equals()方式是覆盖Object类中的equals()方法
b) equals()比较字符串中的内容,区分大小写
c) equals()方法的的返回值是布尔类型
d) 以上说法都正确
6.(单选题)下面的程序输出的结果是(-32)
// 已知 'T' 的int值为84,'t' 的int值为116
String s1="TEDU",s2="tedu";
System.out.println(https://www.360docs.net/doc/ed16091947.html,pareTo(s2)); A.
考查compareTo()方法。
7.关于null和””说法正确的是( a b d )
a) null是常量(空常量)
b) “”是字符串对象
c) null可以调用方法
d) “”可以调用方法
8.(单选题)下列程序运行结果是(C)。
public class Test {
String str=new String("tedu");
char[]ch={'x','y','z'};
public static void main(String args[]){
Test t = new Test();
t.change(ex.str,ex.ch);
System.out.print(t.str+"and");
System.out.print(t.ch);}
public void change(String str,char ch[]){
str="tarena";------形参传入在经过改变若最终未对原参数进行赋值覆盖,则原参数不变ch[0]='w';---------在方法中对数组的改动直接作用于原数组
}
}
? A.tedu and xyz
? B.tarena and xyz
? C.tedu and wyz
? D.tarena and wyz
集合
1.选项中哪个方法不是Collection接口所定义的(C)
A)int size()
B)boolean containsAll(Collection c)
C)int compareT o(Object obj)
D)boolean equals(Object o);
2.(单选题)下面哪个是链式存储并快速顺序(不需要随机访问)访问的集合类型(B)
A)java.util.LinkedList
B)java.util.Queue
C)java.util.ArrayList
D)java.util.LinearList
请参考集合队列的结构特点及元素的存取
3.(单选题)请看下列代码:
1 public class Emp {
2 private String name;
3 public Emp(String name) {
4 https://www.360docs.net/doc/ed16091947.html, = name;
5 }
6 public int hashCode() {
7 return 520;
8 }
9 }
下列说法正确的是:(D)。
A.由于没有覆盖equals方法,Emp类编译失败
错误,equals是Object类方法,Emp类默认继承Object类的方法,不进行覆盖不会编译失败
B.从HashMap中,删除一个Emp类型Key,那么HashMap中的所有对象将被删除
错误,由于没有覆盖equals方法,不会删除HashMap中的对象
C.向HashMap中放入已存在的name字符序列的Emp对象,将更改对应的value
错误,由于Emp类没有覆盖equals方法,不会认为name字符序列相同的两个Emp对象是同一个对象,因此,会将向HashMap中放入已存在的name字符序列的Emp对象作为新的key存入到Map中.
D.HashMap对象可以包含多个name字符序列相同的Emp对象作为Key
4.(多选题)链表具有的特点是(ACD)
A)不必事先估计存储空间
采用动态存储分配,不会造成内存浪费和溢出。
B)可随机访问任一元素-----不可随机访问
C)插入删除不需要移动元素
插入、删除时,只要找到对应前驱结点,修改指针即可,无需移动元素
D)所需空间与线性表长度成正比
需要用额外空间存储线性表的关系,存储密度小
5.(单选题)如果要按照特定顺序保存元素,应当使用的容器是(C)
A.HashMap
B.ArrayList
C.TreeSet
D.数组
TreeSet保存元素,会以特定的顺序保存元素
7.(单选题)对保存在List中的数据进行查找,方法不正确的是(D)。
A.对元素进行遍历,依次比较
B.对内容有序的List可以进行二分法查找
C.调用indexOf方法查找
D.无论是否有序都可以用二分法查找,比线性查找快很多
二分查找法,必须是对有序的元素。
9.(多选题)关于集合框架,说法正确的是(ABD)。
? A.与数组不同,集合框架是容量可变的容器
? B.集合框架不能保存基本类型,但是可以将它们转换为包装类后保存
? C.集合框架中的List, Set, Map接口都是Collection接口的子接口
? D.集合类除了提供可变容量的存储外,还提供了对数据的算法
?本题考查集合框架选项C错误,Map接口不是Collection接口的子接口。
I/O流
FilterOutputStream是BufferedOutputStream、DataOutputStream及PrintStream 的父类,以下哪个类可能是FilterOutputStream构造函数的参数类型()OutputStream
RandomAccessFile是java.io包中的一个兼有输入输出功能的类它继承了Object类,用DataInput和DataOutput接口来实现。。由于它是随机访问,所以文件读写一个记录的位置是任意位置
正则
11.(多选题)腾讯QQ号从10000开始的,下列能正确表示QQ号的正则是(CD)。
? A.
^\d{5,}$-------------5位数,包括0开头,故为错,不能以0开头
? B.
^[1-9][0-9]{4,8}$-------限制总个数不能超过9,故错
? C.
^[1-9]\d{4,}$
? D.
^[1-9][0-9]{4,}$
线程
11.(多选题)以下集合对象中哪几个是线程安全的(CD)
? A)LinkedList
? B)ArrayList
? C)Vector------------Vector是线程安全的
? D)Hashtable
12.(单选题)请选择正确的一项(B)
public class Threads3 implements Runnable {
public void run() {
System.out.print("running");
}
public static void main(String[] args) {
Thread t = new Thread(new Threads3());
t.run();
t.run();
t.start();
?} }
?A)The code executes and prints "runningrunning".
?B)The code executes and prints "runningrunningrunning".
?C)The code executes and prints "running".
?D)An exception is thrown at runtime.
在执行t.start();之前所执行的两个t.run();只是单纯的通过虚拟机进行调用该方法,t.start();
执行后会将该线程置于就绪状态,等待系统分配时间片段给该线程去执行线程任务。
?13.(单选题)代码执行后输出的结果是()
?public class Z{
?public static void main(String[] args){
?new Z();
?}
?Z(){
?Z alias1 = this;
?Z alias2 = this;
?synchronized (alias1){
?try{
?alias2.wait();
?System.out.println("DONE WAITING");
?} catch (InterruptedException e) {
?System.out.println("IN TEEEUPTED");
?} catch (Exception e) {
?System.out.println("OTHER EXCEPTION");
?} finally {
?System.out.println("FINALLY");
?}
?}
?System.out.println("ALL DONE");
?}
}
?A)The application compiles but doesn't print anything.
?B)The application compiles and print "DONE WAITING".
?C)The application compiles and print "FINALLY".
?D)The application compiles and print "ALL DONE".
wait方法和sleep方法很类似,都是处于等待状态,但是不同的是,wait方法执行后会释放锁对象,所以此段代码中wait方法后面的语句不会被执行,而是一直处于
等待状态中。
在主线程中启动新线程后,新线程处于就绪状态,那么新线程对象中的哪个方法被系统执行时,视为已经进入执行新线程的内容()
public void run()
解析:
?14.(单选题)下面程序的运行结果:(B)
?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");
}
?A)pingpong
?B)pongping
?C)pingpong和pongping都有可能
?D)都不输出
start()用来启动一个线程,当调用start方法后,系统才会开启一个新的线程,进而调用run()方法来执行任务,而单独的调用run()就跟调用普通方法是一样的,已经失去线程的特性了。因此在启动一个线程的时候一定要使用start()而不是run()
?15.(多选题)下面能让线程停止执行的有(ABD)
?A)sleep();--------导致此线程暂停执行指定时间;
?B)stop();---------这个方法将终止所有未结束的方法,包括run 方法;
?C)notify();
D)wait();---------当前正在被服务的线程需要睡一会,醒来后继续被服务。
?16.(多选题)有关线程的哪些叙述是对的(BCD)
?A)一旦一个线程被创建,它就立即开始运行。
?B)使用start()方法可以使一个线程成为可运行的,但是它不一定立即开始运行。?C)当一个线程因为抢先机制而停止运行,它被放在可运行队列的前面。
?D)一个线程可能因为不同的原因停止并进入就绪状态。
异常
?17.(单选题)getCustomerInfo()方法如下,try中可以捕获三种类型的异常,如果在该方法运行中产生了一个IOException,将会输出什么结果(A)
?public void getCustomerInfo() {
?try {
?// do something that may cause an Exception
?} catch (java.io.FileNotFoundException ex) {
?System.out.print("FileNotFoundException!");
?} catch (java.io.IOException ex) {
?System.out.print("IOException!");
?} catch (https://www.360docs.net/doc/ed16091947.html,ng.Exception ex) {
?System.out.print("Exception!");
?}
}
?A)IOException!找到了相对应的异常类型,就不会再去找父类型的异常Exception了
?B)IOException!Exception!
?C)FileNotFoundException!IOException!
?D)FileNotFoundException!IOException!Exception!
?7.(多选题)关于异常(Exception),下列描述正确的是(ABC )
?A)异常的基类为Exception,所有异常都必须直接或者间接继承它
?B)异常可以用try{ . . .}catch(Exception e){ . . .}来捕获并进行处理
?C)如果某异常继承RuntimeException,则该异常可以不被声明
?D)异常可以随便处理,而不是抛给外层的程序进行处理
异常可以在自己方法内部处理,当自己无法解决时,需要抛出给调用者来处理。
?
整理
1. 如果在方法声明时给该方法加锁,只需要使用synchronized关键字来修饰该方法即可,
不需要传入任何对象,只有在方法内部的某些代码块中才需要传入对象参数。
2. suspend 可以挂起一个线程,就是把这个线程暂停了,它占着资源,但不运行,用
resume 是恢复挂起的线程,让这个线程继续执行下去。
3.String类中的getBytes()方法的作用是( C ) 将字符串变成字节数组
4.字符串间不能直接比大小
5.System.exit()的作用是( b ) 退出当前JVM