一.单选
1. A 派生出子类 B , B 派生出子类 C ,并且在 java 源代码有如下声明:
1. A a0=new A();
2. A a1=new B();
3. A a2=new C();
问以下哪个说法是正确的(D)
A 只有第一行能通过编译
B 第1、2行能通过编译,但第3行编译出错
C 第1、2、3行能通过编译,但第2、3行运行时出错
D 第1行,第2行和第3行的声明都是正确的
解析:只要是子类,不需要是直接子类,都可以向上转型。
能否向上转型,使用is a 原则读一下。
2. 下面代码将输出什么内容:() public class SystemUtil{ public static boolean isAdmin(String userId){ return userId.toLowerCase()=="admin"; } public static void main(String[] args){ System.out.println(isAdmin("Admin")); } }
A true
B false
C 1
D 编译错误
使用==来判断两个引用对象是否都指向同一对象
考点:字符串常量池 ==与equals()的区别
3.
解析:
Test test = null;会出现空指针异常,这个引用不指向任何对象。
但是hello()方法是一个静态方法,静态方法的调用不依赖于任何对象。
5.
解析:Alpha没有提供构造方法,系统会默认提供一个不带参数的构造方法。
解析:static不能定义局部变量,可以定义成员变量。
实例变量:一个变量被static修饰就是类变量,只能放在类里面,不能放在方法中。
1.无法修改和操作 2.不能定义在局部方法中
实例变量是声明在类内而不是方法中
局部变量才是声明在方法中
7.
解析:使用abstract关键字定义抽象类。abstract修饰符可以修饰方法和类。
8.
解析:construct构造方法可以重载。
9.
解析:成员变量可以赋值,但是不能进行运算,运算要放在方法中。
成员变量是定义在类中,方法体之外的变量。
声明抽象方法没有花括号。
10.
二.编程题
[编程题]排序子序列 排序子序列_牛客笔试题_牛客网
OR62 倒置字符串 倒置字符串_牛客题霸_牛客网
解题思路:逆置字符串(创建reverse()---使用双指针法)
1.将整个数据进行逆置
2.每个单词进行逆置
import java.util.*;
public class Main{
public static void reverse(char[] array,int start,int end) {
while(start < end) {
char tmp = array[start];
array[start] = array[end];
array[end] = tmp;
start++;
end--;
}
}
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String s = scan.nextLine();
char[] ch = s.toCharArray();
int len = ch.length;
//1、整体进行了逆置
reverse(ch,0,len-1);
int i = 0;//遍历ch数组
while( i < len ) {
int j = i;
while(j < len && ch[j] != ' ') {
j++;
}
if(j < len) {
reverse(ch,i,j-1);
i = j+1;
}else{
reverse(ch,i,j-1);
i = j;
}
}
String str = new String(ch);
System.out.println(str);
}
}