1、代码String str=”123456a”;int i=Integer.parseInt(str);会报异常的是()
java.lang.NullPoninterException
java.lang.NumberFormatException
java.lang.RuntimeException
java.lang.ArrayindexOutOfBoundsException
java.lang.NullPoninterException:变量未被初始化、对象未赋值、对象为空(俗称的空指针异常)
java.lang.NumberFormatException:数据格式转换失败(integer的取值范围为:-127-128,超过范围都会访问false)
java.lang.RuntimeException:运行时异常
java.lang.ArrayindexOutOfBoundsException:数组下标越界B
2、如果int x=20, y=5,则语句System.out.println(x+y +""+(x+y)+y); 的输出结果是()
2530
55
2052055
25255
1)不论有什么运算,小括号的优先级都是最高的,先计算小括号中的运算,得到x+y +""+25+y
2)任何字符与字符串相加都是字符串,但是是有顺序的,字符串前面的按原来的格式相加,字符串后面的都按字符串相加,得到25+“”+25+5
3)上面的结果按字符串相加得到25255
D
3、下列哪个修饰符可以使在一个类中定义的成员变量只能被同一包中的类访问?
private
无修饰符
public
protected
B
4、执行以下程序后的输出结果是()
public class Test {
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
A,B
B,B
AB,B
D
5、下面有关jdbc statement的说法错误的是?
JDBC提供了Statement、PreparedStatement 和 CallableStatement三种方式来执行查询语句,其中 Statement 用于通用查询, PreparedStatement 用于执行参数化查询,而 CallableStatement则是用于存储过程
对于PreparedStatement来说,数据库可以使用已经编译过及定义好的执行计划,由于 PreparedStatement 对象已预编译过,所以其执行速度要快于 Statement 对象”
PreparedStatement中,“?” 叫做占位符,一个占位符可以有一个或者多个值
PreparedStatement可以阻止常见的SQL注入式攻击
1.Statement、PreparedStatement和CallableStatement都是接口(interface)。
2.Statement继承自Wrapper、PreparedStatement继承自Statement、CallableStatement继承自PreparedStatement。
3. Statement接口提供了执行语句和获取结果的基本方法;
PreparedStatement接口添加了处理 IN 参数的方法;
CallableStatement接口添加了处理 OUT 参数的方法。
4. a.Statement:
普通的不带参的查询SQL;支持批量更新,批量删除;
b.PreparedStatement:
可变参数的SQL,编译一次,执行多次,效率高;
安全性好,有效防止Sql注入等问题;
支持批量更新,批量删除;
c.CallableStatement:
继承自PreparedStatement,支持带参数的SQL操作;
支持调用存储过程,提供了对输出和输入/输出参数(INOUT)的支持;
Statement每次执行sql语句,数据库都要执行sql语句的编译 ,
最好用于仅执行一次查询并返回结果的情形,效率高于PreparedStatement。
PreparedStatement是预编译的,使用PreparedStatement有几个好处
1. 在执行可变参数的一条SQL时,PreparedStatement比Statement的效率高,因为DBMS预编译一条SQL当然会比多次编译一条SQL的效率要高。
2. 安全性好,有效防止Sql注入等问题。
3. 对于多次重复执行的语句,使用PreparedStament效率会更高一点,并且在这种情况下也比较适合使用batch;
4. 代码的可读性和可维护性。JDBC statement中的PReparedStatement的占位符对应着即将与之对应当值,并且一个占位符只能对应一个值,如果能对应多个就会引起混淆。sql语句是确定的,那么一个占位符必定只能对应一个值
C
6、以下是java concurrent包下的4个类,选出差别最大的一个
Semaphore
ReentrantLock
Future
CountDownLatch
A、Semaphore:类,控制某个资源可被同时访问的个数;
B、ReentrantLock:类,具有与使用synchronized方法和语句所访问的隐式监视器锁相同的一些基本行为和语义,但功能更强大;
C、 Future:接口,表示异步计算的结果;
D、 CountDownLatch: 类,可以用来在一个线程中等待多个线程完成任务的类。
C
7、在 main() 方法中给出的整型数组,如果将其写到一个文件中,需要( )。
System.out.print (buffer[i]);
DataOutputStream dout = new DataOutputStream(new FileOutputStream(this.filename));
DataInputStream din = new DataInputStream(new FileInputStream(this.filename));
System.in.read(buffer)
input和output指的是对于程序而言。input是从文件读取进来,output是输出到文件。
B
8、访问权限控制从最大权限到最小权限依次为:public、 包访问权限、protected和private 。( )
9、根据以下代码段,下列说法中正确的是( )。
public class Parent {
private void m1(){}
void m2(){}
protected void m3(){}
public static void m4(){}
}
子类中一定能够继承和覆盖Parent类的m1方法
子类中一定能够继承和覆盖Parent类的m2方法
子类中一定能够继承和覆盖Parent类的m3方法
子类中一定能够继承和覆盖Parent类的m4方法
public和protected都可以作用于子类,但在多态情况下,静态函数调用时编译和运行看左边,所以子父类存在同名静态函数访问的是父类,子类并不能覆盖父类的方法,所以选C
A、私有方法不可继承和覆盖,只是在子类中新的方法。
B、默认修饰符的方法,字符类一旦不再一个包,就不能覆盖了。
D、注意一下,重写针对的都是可见的实例方法,对于私有方法和静态方法都不能重写。C
10、Math.floor(-8.5)=( )
(float)-8.0
(long)-9
(long)-8
(double)-9.0
round方法,它表示“四舍五入”,算法为Math.floor(x+0.5),即将原来的数字加上0.5后再向下取
整,所以,Math.round(11.5)的结果为12,Math.round(-11.5)的结果为-11
Math.floor() 表示向下取整,返回double类型
Math.ceil() 表示向上取整,返回double类型
D
11、下列不正确的 Java 语言标识符是( )
Sky
$Computer
for
NULL
C
12、下列哪个选项是合法的标识符?()
123
_name
class
first
标识符:
1. 只能由数字,字母,符号(有且仅有_和$两个)组成。
2. 数字不能作为标识符的开头。
3. 不能和关键字,保留字,显式常量一样。关键字都是小写的。
4. null,true,false都不是关键字,属于显式常量。goto,const都是保留关键字。
BD
13、下面哪些写法能在 java8 中编译执行()
dir.listFiles((File f)->f.getName().endsWith(“.Java”));
dir.listFiles((File f)=>f.getName().endsWith(“.Java”));
dir.listFiles((_.getName().endsWith(“.Java”)));
dir.listFiles( f->f.getName().endsWith(“.Java”));
Lanbda表达式的主要作用就是代替匿名内部类的繁琐语法, 它由三部分组成:
(1) 形参列表。形参列表允许省略形参类型。如果形参列表中只有一个参数,甚至连形参列表的圆括号也可以省略。
(2) 箭头(→)。必须通过英文中画线和大于符号组成。
(3)代码块。如果代码块只包含一条语句,Lambda表达式允许省略代码块的花括号,那么那条语句就不要用花括号表示语句结束。Lambda代码块只有一条return语句,甚至可以省略return关键字。Lambda表达式需要返回值,而它的代码块中仅有一套省略了return的语句。Lambda表达式会自动返回这条语句的值。
AD
14、下面的类哪些可以处理Unicode字符?
InputStreamReader
BufferedReader
Writer
PipedInputStream
后缀是Stream的都是字节流,其他的都是字符流。
ABC
15、下列哪些操作会使线程释放锁资源?
sleep()
wait()
join()
yield()
join()底层就是调用wait()方法的,wait()释放锁资源,故join也释放锁资源
1.sleep会使当前线程睡眠指定时间,不释放锁
2.yield会使当前线程重回到可执行状态,等待cpu的调度,不释放锁
3.wait会使当前线程回到线程池中等待,释放锁,当被其他线程使用notify,notifyAll唤醒时进入可执行状态
4.当前线程调用 某线程.join()时会使当前线程等待某线程执行完毕再结束,底层调用了wait,释放锁
BC
16、final、finally和finalize的区别中,下述说法正确的有?
final用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。
finally是异常处理语句结构的一部分,表示总是执行。
finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源的回收,例如关闭文件等。
引用变量被final修饰之后,不能再指向其他对象,它指向的对象的内容也是不可变的。
A,D考的一个知识点,final修饰变量,变量的引用(也就是指向的地址)不可变,但是引用的内容可以变(地址中的内容可变)。
B,finally表示总是执行。但是其实finally也有不执行的时候,但是这个题不要扣字眼。
1. 在try中调用System.exit(0),强制退出了程序,finally块不执行。
2. 在进入try块前,出现了异常,finally块不执行。
C,finalize方法,这个选项错就错在,这个方法一个对象只能执行一次,只能在第一次进入被回收的队列,而且对象所属于的类重写了finalize方法才会被执行。第二次进入回收队列的时候,不会再执行其finalize方法,而是直接被二次标记,在下一次GC的时候被GC。
AB