下列哪个修饰符不能修饰外部类?
A.public B.private C.protected D.final
正确答案:BC
详解:外部类指包裹在其他类外面的类,是相对于内部的类而言的。外部类是顶级,private只能在声明它的作用域内访问,用private将无法被任何人访问,毫无意义。同理,protected 访问级别的规则是同包可见 + 不同包的子类可见,又因为别的类无法通过import找到该类,所以无意义
java运行时内存分为"线程共享"和"线程私有"两部分,以下哪些属于"线程共享"部分
A.程序计算器 B.方法区 C.java虚拟机栈 D.java堆
正确答案:BD
详解:线程私有**:**每个线程都有自己的独立副本,一个线程不能访问另一个线程的私有区域,与线程相同,线程创建时创建,线程结束时销毁,因为是私有的,不存在多线程竞争问题
线程共享:所有线程都可以访问同一块内存区域,多个线程同时访问时需要同步机制(如锁)保证数据一致性,与Java虚拟机进程相同,垃圾回收主要发生在共享区域
线程私有:程序计数器、Java 虚拟机栈、本地方法栈。
线程共享:Java 堆、方法区。
下面关于 Java 中异常相关的说法正确的有()
A.try代码快不可以单独存在,需要配合catch finally代码快使用
B.finally代码块可以存在也可以不存在
C.如果多个catch块中得意常出现继承关系,父类异常catch块放在最后面
D.可以有多个catch代码块,也可以只有一个,但不能没有
正确答案:ABC
详解:
-
try后面可以跟多个catch块。 -
try后面可以只跟一个catch块。 -
try后面也可以没有catch块,但必须有一个finally块。 -
不能只有
try块,后面既没有catch也没有finally。
以下语句使用PreparedStatement接口向mysql数据库中插入成功插入数据:
|-------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 5 6 | String sql=``"insert into users(username,password,age) values(?,?,?)"``; PreparedStatement ps=conn.prepareStatement(sql); ps.setString(``1``,``"lisi"``); ps.setString(``2``,``"123456"``); ps.setInt(``3``,``24``); ps.executeUpdate(); |
试问,执行sql语句ps.executeUpdate()的返回值是:( )
A 0 B 1 C ture D false
正确答案:B
详解:
|-------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 5 6 | String sql=``"insert into users(username,password,age) values(?,?,?)"``; //表示创建了一个插入函数 PreparedStatement ps=conn.prepareStatement(sql); //通过方法创建对象 ps.setString(``1``,``"lisi"); // 第一个?替换为"lisi" ps.setString(``2``,``"123456"); // 第二个?替换为"123456" ps.setInt(``3``,``24); // 第三个?替换为24 ps.executeUpdate(); //执行插入操作,返回受影响的行数 |
下面哪些赋值语句是正确的()
A long test=012 B float f=-412 C int other=(int)true D double d=0x12345678 E byte b=128
正确答案:ABD
详解:A. long test=012 - 正确
这是一个八进制数值赋值给long类型变量。012在八进制表示为十进制的10,完全在long类型范围内。
B. float f=-412 - 正确
这是将一个负整数赋值给float类型变量。-412是在float类型表示范围内的,可以自动类型转换。
C. int other =(int)true - 错误
布尔类型(boolean)不能转换为整型(int)。Java不支持boolean类型和数值类型之间的转换。
D. double d=0x12345678 - 正确
这是一个十六进制数值赋值给double类型变量。0x12345678表示一个十六进制数,在double类型范围内。
E. byte b=128 - 错误
byte类型的取值范围是-128到127。128超出了byte类型的范围,因此这个赋值是错误的。
假设 A 类有如下定义,设 a 是 A 类同一个包下的一个实例,下列语句调用哪个是错误的?()
|-------------|---------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 5 6 | class A{ ``int i; ``static String s; ``void method1() { } ``static void method2() { } } |
A System.out.println(a.i); B a.method1(); C.A.method1(); D A.method2();
正确答案:C
详解:基本原则:
-
静态成员(静态变量和静态方法)可以通过类名直接访问
-
非静态成员(实例变量和实例方法)必须通过对象实例访问
-
不能通过类名直接访问非静态成员
对于同一类中的两个方法 , 在判断它们是不是重载方法时 , 肯定不考虑( )
A 参数个数 B参数类型 C返回值类型 D参数顺序
正确答案:C
详解:
- 参数个数(A选项)是判断方法重载的重要依据。同名方法如果参数个数不同,就构成重载。例如:
void test()
void test(int a)
- 参数类型(B选项)也是判断方法重载的关键。同名方法的参数类型不同也构成重载。例如:
void test(int a)
void test(String s)
- 返回值类型(C选项)不是判断方法重载的依据。两个方法如果只有返回值类型不同,其他都相同,这不构成重载,反而会导致编译错误。例如:
int test(int a)
void test(int a) //编译错误
- 参数顺序(D选项)同样是判断方法重载的依据。参数类型的顺序不同也可以构成重载。例如:
void test(int a, String s)
void test(String s, int a)
Integer a = 245;
Integer b = 245;
int c = 245;
System.out.println(a == b);
System.out.println(a == c);
运行后返回的是:
A true,true B true,false C false,true D false,false
正确答案:C
详解:第一个比较 a == b 返回false:
这里比较的是两个Integer对象。Integer默认会缓存-128到127之间的值,超出这个范围的值在自动装箱时会创建新对象。由于245超出了缓存范围,所以a和b是两个不同的对象引用,使用==比较返回false。
第二个比较 a == c 返回true:
这里比较的是Integer对象和int基本类型。当Integer与int进行比较时,会自动触发拆箱操作,将Integer对象转换为基本类型int,然后进行值的比较。因此比较的是245和245这两个数值,故返回true。
以下集合对象中哪几个是线程安全的()
A LinkedList B ArrayList C VEctor D Hashtable
正确答案:CD
详解:Vector和Hashtable的线程安全特性:
-
Vector: 它的所有方法都是同步的(synchronized),在多线程环境下可以安全使用。
-
Hashtable: 同样具有同步方法,能够在多线程环境下保证数据的一致性。
分析非线程安全的选项:
-
LinkedList: 它是基于双向链表实现的List,其方法都不是同步的,在多线程环境下需要额外同步处理。
-
ArrayList: 它是基于动态数组实现的List,同样没有同步机制,多线程访问时可能出现数据不一致。
以下关于对象序列化描述正确的是
A使用FileOutputStream可以对对象进行传输 B使用PrintWriter可以将对象进行传输
C使用transient修饰的变量不会被序列化 D对象序列化的所属类需要实现Serializable接口
正确答案:AB
详解:FileOutputStream是字节流,它只能处理原始字节数据的写入,不能直接序列化对象。要序列化对象,需要使用ObjectOutputStream包装FileOutputStream。
PrintWriter是处理字符数据的输出流,主要用于写入文本数据,不能直接进行对象序列化。要序列化对象必须使用ObjectOutputStream。