JavaSE错题记录
(单选题)看下面的代码,写出输出的结果( )
public class Ex2 {
public static void main(String[] args) {
int[] a = {1,2,3,4,5};
expand(a);
changeArray(a);
printArray(a);
}
public static void expand(int[] a){
int[] newArray = new int[a.length * 2];
System.arraycopy(a, 0, newArray, 0, a.length);
a = newArray;
}
public static void changeArray(int[] a){
a[0] = 10;
}
public static void printArray(int[] a){
for(int i = 0; i<a.length; i++){
System.out.print(a[i] + “\t”);
}
System.out.println();
}
}
A.10 2 3 4 5
B.1 2 3 4 5
C.10 2 3 4 5 0 0 0 0 0
D.1 2 3 4 5 0 0 0 0 0
【正确答案】A
关于ArrayCopy()方法
源码:public static native void arraycopy(Object src, int srcPos, Object dest, int destPos,int length);
参数:
src:要复制的数组(源数组)
srcPos:复制源数组的起始位置
dest:目标数组
destPos:目标数组的下标
length:要复制的长度
例如:
String[] arr = {“A”,“B”,“C”,“D”,“E”,“F”};
System.arraycopy(arr ,3,arr,2,2);
从下标为3的位置开始复制,复制的长度为2(复制D、E),从下标为2的位置开始替换为D、E
复制后的数组为:
String[] arr = {“A”,“B”,“D”,“E”,“E”,“F”};
ArrayList的remove()和add(int ?,object ?)都是是根据此方法进行的操作。
(单选题)以下程序段输出结果的是?
publicclassTest{
publicstaticvoidmain(String args[]){
Stringstr=“ABCDE”;
str.substring(3);
str.concat(“XYZ”);
System.out.print(str);
}
}
A.DE
B.DEXYZ
C.ABCDE
D.CDEXYZ
【正确答案】C
【答题时间】2020-12-29 09:14:19
【答案解析】对于String类常用的方法详解
这道题是脑筋急转弯! 虽然调用了substring 和concat方法,但是并没有改变str的值啊
关于concat
concat
public String concat(String str)将指定字符串连接到此字符串的结尾。
如果参数字符串的长度为 0,则返回此 String 对象。否则,创建一个新的 String 对象,用来表示由此 String 对象表示的字符序列和参数字符串表示的字符序列连接而成的字符序列。
示例:
“cares”.concat(“s”) returns “caress”
“to”.concat(“get”).concat(“her”) returns “together”
参数:
str - 连接到此 String 结尾的 String。返回:
一个字符串,它表示在此对象字符后连接字符串参数字符而成的字符。
substring
public String substring(int beginIndex)返回一个新的字符串,它是此字符串的一个子字符串。该子字符串从指定索引处的字符开始,直到此字符串末尾。
示例:
“unhappy”.substring(2) returns “happy”
“Harbison”.substring(3) returns “bison”
“emptiness”.substring(9) returns “” (an empty string)
参数:
beginIndex - 起始索引(包括)。
返回:
指定的子字符串。
抛出:
IndexOutOfBoundsException - 如果 beginIndex 为负或大于此 String 对象的长度。
(单选题)下列输出结果是( )
int a = 0;
while ( a < 5 ) {
switch(a){
case 0 :
case 3 :
a = a + 2;
case 1 :
case 2 :
a = a + 3;
default :
a = a + 5;
}
}
System.out.print ( a );
A.0
B.5
C.10
D.其他
【正确答案】C 由于没加每个case后面都没加break;会一直执行下去
下列哪个方法可以使线程从运行状态进入其他阻塞状态?
A.sleep
B.wait
C.yield
D.start
【正确答案】A
关于sleep()
就是指让当前正在运行的占用cpu时间片的线程挂起一定时间,把cpu的时间片交给其他线程,但是并没有指定把CPU的时间片接下来到底交给哪个线程,而是让这些线程自己去竞争(一般操作系统会根据优先级调度)
所以说让当线程睡眠,是帮助所有线程获得运行时间的最佳方法
需要的注意的是就算线程的睡眠时间到了,他也不是立即会被运行,只是从睡眠状态变为了可运行状态,是不会由睡眠状态直接变为运行状态的
(单选题)在JAVA的异常处理模型中,能单独和finally一起使用的块是( )
A.try
B.catch
C.throw
D.throws
【正确答案】A //try是必须的
(单选题)File表示文件信息操作,下面对File方法描述不正确的是?
A. createNewFile():创建文件
B.isFile() 判断当前file对象是否是一个文件
C.exists() 判断file对象表示的文件或目录是否存在
D.delete():删除file对象表示的目录或文件,如果要删除一个目录,那么此目录有内容才可以删除。
【正确答案】D
【答题时间】2020-12-29 09:14:19
【答案解析】正确答案D,delete():删除file对象表示的目录或文件如果要删除一个目录,那么此目录必须没有内容才可以删除,如果有子目录有文件,那么不能删除不可直接删除多级目录,必须从最底层开始逐级删除
(单选题)当需要在文件中写入字符而不是字节时,最好选用下面的哪个类( )
A.java.io.PrintWriter
B.java.io.RandomAccessFile
C.java.io.PrintStream
D.java.io.OutputStream
【正确答案】A
关于outputstream和PrintWriter
OutputStream是以字节的方式输出,PrintWriter是以字符的方式输出。
类似字节流与字符流的差别
附:写文件最佳组合
PrintWriter out = new PrintWriter(
new BufferedWriter(
new FileWriter(filename)))
PrintWriter 提供print系方法
BufferedWriter 提供缓冲,用以加速
FileWriter 用于写文件
(单选题)当一个任务通过ThreadPoolExecutor的execute(Runnable)方法欲添加到线程池时,下面说法错误的是。( )。
A.如果此时线程池中的数量大于corePoolSize,缓冲队列workQueue满,并且线程池中的数量小于maximumPoolSize,建新的线程来处理被添加的任务。
B.如果此时线程池中的数量大于corePoolSize,即使线程池中的线程都处于空闲状态,也要创建新的线程来处理被添加的任务。
C.如果此时线程池中的数量大于corePoolSize,缓冲队列workQueue满,并且线程池中的数量等于maximumPoolSize,那么通过 handler所指定的策略来处理此任务
D.如果此时线程池中的数量等于 corePoolSize,但是缓冲队列 workQueue未满,那么任务被放入缓冲队列。
【正确答案】B
【答题时间】2020-12-29 09:14:19
【答案解析】正确答案B 应该是 如果此时线程池中的数量小于corePoolSize,即使线程池中的线程都处于空闲状态,也要创建新的线程来处理被添加的任务。
(多选题)下列有关线程的说法错误的是( )
A.启动一个线程是调用start()方法,是线程所代表的虚拟处理机处于可运行状态,这意味着线程此时就会立即运行//不是立即唤醒
B.notify()方法可以确切的唤醒某个处于等待状态的线程//随机唤醒
C.wait()方法可以使一个线程处于等待状态,但不会释放所持有对象的锁//释放所有的锁
D.sleep()方法使一个正在运行的线程处于睡眠状态,是一个静态方法,调用此方法时,需要捕捉InterruptedException异常
【正确答案】A,B,C
(多选题)链表具有的特点是( )
A.不必事先估计存储空间
B.可随机访问任一元素 //不能 非连续的 数组倒是可以
C.插入删除不需要移动元素
D.所需空间与线性表长度成正比
【正确答案】A,C,D
(多选题)(abstract)关于 abstract,以下选项正确的是:()
A.abstract 类中可以没有 abstract 方法
B.abstract 类的子类也可以是 abstract 类
C.abstract 类不能创建对象,但可以声明引用
D.abstract 方法不能有方法体
【正确答案】A,B,C,D
多选题)下列属于线程的生命状态是?()
A.新建状态:创建一个线程。
B.就绪状态:此线程具备除了时间片外的所有资源。
C. 运行状态:抢占到时间片后进入运行期。
D.阻塞状态:由运行状态被阻塞。
【正确答案】A,B,C,D
【答题时间】2020-12-29 09:14:19
【答案解析】线程的生命状态:
新建状态:创建一个线程
就绪状态:此线程具备除了时间片外的所有资源
运行状态:抢占到时间片后进入运行期
阻塞状态:由运行状态被阻塞
死亡状态:线程结束。
(多选题)在java中,关于数组描述正确的是( )
A.数组中的索引下标从1开始 //从下标为0开始
B.存储在数组当中的数据都属于同一数据类型
C.通过数组名.length()能获得数组的长度//数组是.length就行了 不需要括号
D.数组的最大索引下标是数组的长度减1
【正确答案】B,D
45、【多选题】
(多选题)请阅读以下代码,不可以完善此段代码的正确选项是( )
public class ExceptionTest {
class TestException extends Exception {}
public void runTest () throws TestException {}
public void test () /* Point X*/ {
runTest ();
}
}
A.throws Exception
B.Catch (Exception e).
C.Throws RuntimeException.
D.Catch (TestException e). E. No code is necessary.
【正确答案】B,C,D
【答题时间】2020-12-29 09:14:19
【答案解析】无
(多选题)ArrayList和Vector的区别说法不正确的是( )
A.ArrayList是线程安全的,Vector是线程不安全
B.ArrayList是线程不安全的,Vector是线程安全的
C.ArrayList底层是数组结构,Vector底层是链表结构
D.ArrayList底层是链表结构,Vector底层是数组结构
【正确答案】A,C,D
关于ArrayList和Vector 底层实现都是数组结构
关于区别
ArrayList和Vector区别 区别
总结:1、Vector是线程安全的,ArrayList不是线程安全的。
2、ArrayList在底层数组不够用时在原来的基础上扩展0.5倍,Vector是扩展1倍。
选题)以下选项中是反射机制的作用是( )
A.在运行时判断任意一个对象所属的类。
B.在运行时构造任意一个类的对象。
C.在运行时判断任意一个类所具有的成员变量和方法。
D.在运行时调用任意一个对象的方法
【正确答案】A,B,C,D