- DAY 11
- 选择题
- 编程题
- DAY 12
- 选择题
- 编程题
- 假设 A 类有如下定义,设 a 是 A 类的一个实例,下列语句调用哪个是错误的?
A:System.out.println(a.i);
B:a.method1();
C:A.method1();
D:A.method2();
public class A
{
public int i;
static String s;
void method1(){}
static void method2(){}
}
答:C
解析:
静态成员和静态方法可以直接用 类名. 进行调用;其他的成员和方法需要进行实例化成为对象之后,由对象调用。
-
下面哪个选项没有实现 java.util.Map 接口?
A:Hashtable
B:HashMap
C:Vector
D:IdentityHashMap
答:C
解析:
Hashtable、HashMap、IdentityHashMap 都实现了 Map 接口,其中 Hashtable 和 HashMap 的区别是一个是线程安全的,一个是线程不安全的。Vector 是实现了 List 接口,是一个线程安全的 List 。 -
有如下 4 条语句,以下输出结果为 false 的是?
A:System.out.println(i01== i02);
B:System.out.println(i01== i03);
C:System.out.println(i03== i04);
D:System.out.println(i02== i04);
Integer i01=59; int i02=59; Integer i03=Integer.valueOf(59); Integer i04=new Integer(59);
答:C
解析:
行一:由于 59 在 -128 ~ 127 内,所以在自动装箱的时候,会返回IntegerCache[59 - (-128)];
行三:同行一
行四:因为有 new 关键字,所以开辟了一块新内存放置值为 59 的 Integer 对象。
- 如下代码的结果是什么?
A:base
B:basebase
C:编译失败
D:代码运行但没有输出
E:代码运行但没有输出
class base {
base() {
System.out.print("base");
}
}
public class Alpha extends base {
public static void main( String[] args ) {
new Alpha();
//调用父类无参的构造方法
new base();
}
}
答:B
解析:
在执行 new Alpha(); 时,会先执行父类的构造方法,再执行相应子类的构造方法,所以此处会先打印 base ,在执行 new base(); 时,会直接调用无参构造打印 base,结果为 basebase 。
-
Java表达式"13 & 17"的结果是什么?
A:30
B:13
C:17
D:1
答:D
解析:
& 是位与运算符,将两个数字化成二进制数进行位运算,全为1则为1,否则为0;
13:00000000 00000000 00000000 00001101
17:00000000 00000000 00000000 00010001
得: 00000000 00000000 00000000 00000001
即为1 -
以下代码执行后输出的结果是?
A:blockAblockBblockA
B:blockAblockAblockB
C:blockBblockBblockA
D:blockBblockAblockB
public class Test
{
public static Test t1 = new Test();
{
System.out.println("blockA");
}
static
{
System.out.println("blockB");
}
public static void main(String[] args)
{
Test t2 = new Test();
}
}
答:A
解析:
执行先后顺序:
静态域:首先执行静态变量 public static Test t1 = new Test(); 创建了 Test 对象,执行构造块输出 blockA ;然后执行静态代码块,输出 blockB 。
主函数:Test t2 = new Test(); 创建 Test 对象,执行构造块,输出 blockA 。
-
下面哪些选项是正确的?
A:>>是算术右移操作符
B:>>是逻辑右移操作符
C:>>>是算术右移操作符
D:>>>是逻辑右移操作符
答:AD
解析:
前者右移,高位补符号位;后者右移,高位补 0 -
jdk1.8中,下面有关java 抽象类和接口的区别,说法错误的是?
A:抽象类可以有构造方法,接口中不能有构造方法
B:抽象类中可以包含非抽象的普通方法,接口中的方法必须是抽象的,不能有非抽象的普通方法
C:一个类可以实现多个接口,但只能继承一个抽象类
D:接口中可以有普通成员变量,抽象类中没有普通成员变量
答:BD
解析:
· 抽象类:抽象类中可以有构造方法,可以存在普通属性、方法、静态属性和方法,也可以存在抽象方法。如果一个类中有一个抽象方法,那么当前类一定是抽象类;抽象类中不一定有抽象方法。如果一个类中有一个抽象方法,那么当前类一定是抽象类;抽象类中不一定有抽象方法。
· 接口:在接口中只有方法的声明,没有方法体;接口中只有常量,因为变量默认会加上 public static final 。接口中的方法,被 public 来修饰,并且没有构造方法,也不能实例化接口的对象。接口中定义的方法都需要有实现类来实现,如果实现类不能实现接口中的所有方法,则实现类定义为抽象类。 -
有关线程的叙述正确的是?
A:可以获得对任何对象的互斥锁定
B:通过继承Thread类或实现Runnable接口,可以获得对类中方法的互斥锁定
C:线程通过使用synchronized关键字可获得对象的互斥锁定
D:线程调度算法是平台独立的
答:CD
解析:
暂无 -
以下语句返回值为 true 的是?
A:a1== a2
B:d1== d2
C:b1== b2
D:c1== c2
答:AB
解析:
17 在 -128 ~ 127 之间,故执行的是 valueOf() 方法,所以 a1 和 a2 指向的是同一个对象。其他的都是 new 出来的对象,显然地址都不同。另外,int 类型与 Integer 类型比较时,先将 Integer 拆箱,再比较值,所以 d1 == d2 也为 true 。
leetcode 242
给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词。
示例:
输入: s = “anagram”, t = “nagaram”
输出: true
输入: s = “anagram”, t = “nagaram”
输出: true
分析:
特殊情况:如果给的两个字符串长度不等,则一定不是字母异位词。
方法一:
首先,我们将给定的两个字符串转换成字符数组;
然后,给两个字符数组进行排序,排序完后比较两个数组内容是否相同,如果相同则返回 true ,反之返回 false 。
代码:
class Solution {
public boolean isAnagram(String s, String t) {
if (s.length() != t.length()) {
return false;
}
char[] arr1 = s.toCharArray();
char[] arr2 = t.toCharArray();
Arrays.sort(arr1);
Arrays.sort(arr2);
return Arrays.equals(arr1, arr2);
}
}
方法二:
首先,维护一个长度为 26 的频次数组 table ,先遍历记录字符串 s 中字符出现的频次,然后遍历字符串 t ,减去 table 中对应的频次,如果出现 table[i] < 0 ,则说明 t 中包含一个不在 s 中的额外字符,返回 false 。
代码:
class Solution {
public boolean isAnagram(String s, String t) {
if (s.length() != t.length()) {
return false;
}
int[] table = new int[26];
for (int i = 0; i < s.length(); i++) {
table[s.charAt(i) - 'a']++;
}
for (int i = 0; i < t.length(); i++) {
table[t.charAt(i) - 'a']--;
if (table[t.charAt(i) - 'a'] < 0) {
return false;
}
}
return true;
}
}
DAY 12
选择题
-
现有一变量声明为 boolean aa; 下面赋值语句中正确的是?
A:aa=false;
B:aa=False;
C:aa=“true”;
D:aa=0;
答:A
解析:
Java 中 boolean 类型的值只有 false 和 true,关键字都是小写。 -
下列说法哪个正确?
A:不需要定义类,就能创建对象
B:对象中必须有数据域和方法
C:数据域可以是基本类型变量,也可以是一个对象
D:数据域必须是基本类型变量
答:C
解析:
必须定义类后,才能创建对象;对象中有无数据域和方法,取决于它所属的类;数据域不一定是基本类型,也可以是引用类型。 -
已知如下类定义,如下哪句可以正确地加入子类中?
A:private void fun( int n ){ //…}
B:void fun ( int n ){ //… }
C:protected void fun ( int n ) { //… }
D:public void fun ( int n ) { //… }
class base {
public base (){
//...
}
public base ( int m ){
//...
}
public void fun( int n ){
//...
}
}
public class Child extends base{
// member methods
}
答:D
解析:
该题考查方法的重写,遵循两同两小一大原则:
子类方法名、参数类型与父类相同;
子类方法返回值类型小于等于父类方法返回类型;
子类方法抛出异常范围小于父类方法抛出异常范围;
子类方法访问权限大于父类方法访问权限。
- 下面这三条语句的输出结果分别是?
A:is 1005, 1005 is, is 1005
B:is 105, 105 is, is 105
C:is 1005, 1005 is, is 105
D:is 1005, 105 is, is 105
System.out.println(“is ”+ 100 + 5); System.out.println(100 + 5 +“ is”); System.out.println(“is ”+ (100 + 5));
答:D
解析:
行一:先是 "is " 则后面的内容会以字符串的形式进行拼接。
行二:先对 100 + 5 进行运算,然后与 “ is” 拼接。
行三:先算括号内,然后进行字符串拼接。
- 以下代码的输出的正确结果是?
A:24
B:16
C:15
D:8
public class Test {
public static void main(String args[]) {
String s = "祝你考出好成绩!";
System.out.println(s.length());
}
}
答:D
解析:
length() 方法是获取字符串长度,显然为 8 。
-
下列哪一个方法你认为是新线程开始执行的点,也就是从该点开始线程n被执行?
A:public void start()
B:public void run()
C:public void int()
D:public static void main(String args[])
E:public void runnable()
答:B
解析:
start() 方法是启动一个线程,此时线程处于就绪状态,还未执行;run() 方法才是线程开始执行的点。 -
下面哪一项不是加载驱动程序的方法?
A:通过DriverManager.getConnection方法加载
B:调用方法 Class.forName
C:通过添加系统的jdbc.drivers属性
D:通过registerDriver方法注册
答:A
解析:
DriverManager.getConnection() 方法返回一个 Connection 对象,是用来获取连接的。 -
String s=null; 下面哪个代码片段可能会抛出NullPointerException?
A:if((s!=null)&(s.length()>0))
B:if((s!=null)&&(s.length()>0))
C:if((s==null)|(s.length()0))
D:if((snull)||(s.length()==0))
答:AC
解析:
首先,s = null; 因此只要调用了 s.length() 都会抛出空指针异常。
&& 和 || 运算符具有短路效果,前者如果运算符左边为 false ,右边的直接不执行了;后者如果运算符左边为 true,右边的直接不执行了。
& 和 | 运算符则不具备短路功能,会检查每一个条件。 -
下列可作为java语言标识符的是?
A:a1
B:$1
C:_ 1
D:11
答:ABC
解析:
Java标识符由数字,字母和下划线,美元符号组成。在Java中是区分大小写的,而且还要求首位不能是数字。最重要的是,Java关键字不能当作Java标识符。 -
下面有关 JAVA 异常类的描述,说法正确的有?
A:异常的继承结构:基类为 Throwable,Error 和 Exception 。实现 Throwable, RuntimeException 和 IOException 等继承 Exception
B:非 RuntimeException 一般是外部错误(不考虑Error的情况下),其可以在当前类被 try{}catch 语句块所捕获
C:Error 类体系描述了 Java 运行系统中的内部错误以及资源耗尽的情形,Error 不需要捕捉
D:RuntimeException 体系包括错误的类型转换、数组越界访问和试图访问空指针等等,必须 被 try{}catch 语句块所捕获
答:ABC
解析:
(借用牛客大佬的解析和图片)
· Exception(异常) :是程序本身可以处理的异常。
· Error(错误): 是程序无法处理的错误。这些错误表示故障发生于虚拟机自身、或者发生在虚拟机试图执行应用时,一般不需要程序处理。
· 检查异常(编译器要求必须处置的异常) : 除了Error,RuntimeException及其子类以外,其他的Exception类及其子类都属于可查异常。这种异常的特点是Java编译器会检查它,也就是说,当程序中可能出现这类异常,要么用try-catch语句捕获它,要么用throws子句声明抛出它,否则编译不会通过。
· 非检查异常(编译器不要求处置的异常): 包括运行时异常(RuntimeException与其子类)和错误(Error)。
leetcode 268
给定一个包含 [0, n] 中 n 个数的数组 nums ,找出 [0, n] 这个范围内没有出现在数组中的那个数。
示例:
输入:nums = [3,0,1]
输出:2
解释:n = 3,因为有 3 个数字,所以所有的数字都在范围 [0,3] 内。2 是丢失的数字,因为它没有出现在 nums 中。
输入:nums = [0,1]
输出:2
解释:n = 2,因为有 2 个数字,所以所有的数字都在范围 [0,2] 内。2 是丢失的数字,因为它没有出现在 nums 中。
分析:
方法一:
首先,我们先对给定的数组进行排序;
然后,让排好序的数组中的元素与其对应的下标进行比较,如果存在不同的,则返回该处的下标值,即为缺失的元素。如果全都相同,则返回数组的长度,也就是 0 ~ n 缺少第 n 个数组。
代码:
class Solution {
public int missingNumber(int[] nums) {
Arrays.sort(nums);
for (int i = 0; i < nums.length; i++) {
if (i != nums[i]) {
return i;
}
}
return nums.length;
}
}
方法二:
首先,创建一个哈希表,利用哈希表的特点;
然后,将给定的数组里的元素全部放入哈希表中,然后从 0 ~ n(n 为数组长度)进行判断是否存在于哈希表当中,不存在的元素即为缺失的数字。
代码:
class Solution {
public int missingNumber(int[] nums) {
Set set = new HashSet();
for (int i = 0; i < nums.length; i++) {
set.add(nums[i]);
}
for (int i = 0; i <= nums.length; i++) {
if (!set.contains(i)) {
return i;
}
}
return -1;
}
}



