一、选择题
1.以下代码运行输出的是
public class Person{
private String name = "Person";
int age=0;
}
public class Child extends Person{
public String grade;
public static void main(String[] args){
Person p = new Child();
System.out.println(p.name);
}
}
正确答案 : 编译出错
解析 :① 一个java文件里,public 的类只能有一个,否则,编译器会报错 ② 子类继承了父类的所有成员,包括private权限的成员变量,但是继承的子类不能使用父类私有的成员变量 ③ private的成员变量,根据权限修饰符的访问控制范围,只有在类内部才能被访问,就算是他的子类,也不能访问。
2.以下程序的输出结果为
class Base{
public Base(String s){
System.out.print("B");
}
}
public class Derived extends Base{
public Derived (String s) {
System.out.print("D");
}
public static void main(String[] args){
new Derived("C");
}
}
正确答案 : 编译错误
解析 : 在调用子类构造器之前,会先调用父类构造器,也就是初始化子类必先初始化父类。当子类构造器中没有使用super关键字调用父类构造器时,是默认调用父类的无参构造器,如果父类中包含有参构造器,却没有无参构造器,则在子类构造器中一定要使用“super(参数)”指定调用父类的有参构造器,不然就会报错。
3.下面关于构造方法的说法不正确的是 ()
A 构造方法也属于类的方法,可以创建对象的时候给成员变量赋值
B 构造方法不可以重载
C 构造方法没有返回值
D 构造方法一定要和类名相同
正确答案 : B
解析 : ① 构造方法名称和其所属的类名必须保持一致;② 构造方法没有返回值,也不可以使用void;③ 构造方法也可以像普通方法一样被重载;④ 构造方法不能被static和final修饰;⑤ 构造方法不能被继承,子类使用父类的构造方法需要使用super关键字
4.在异常处理中,以下描述不正确的有
A try块不可以省略
B 可以使用多重catch块
C finally块可以省略
D catch块和finally块可以同时省略
正确答案 : D
解析 : 三种组合,try…catch…finally,try…catch, try…finally
5.下列描述中,错误的是
A SQL语言又称为结构化查询语言
B java中”static”关键字表明一个成员变量或者是成员方法可以在没有所属的类的实例变量的情况下被访问
C 面向对象开发中,引用传递意味着传递的并不是实际的对象,而是对象的引用,因此,外部对引用对象所做的改变不会反映到所引用的对象上
D java是强类型语言,javascript是弱类型语言
E 面向对象的三大特性包括:封装,继承,多态
正确答案 : C
解析 : ① 值传递:此传递过程就是将实参的值复制一份传递到函数中,这样如果在函数中对该值(形参的值)进行操作,将不会影响实参的值;② 引用传递:将对象的地址传递过去,函数接收的是原始值的首地址值。在方法的执行过程中,形参和实参的内容相同,指向同一块内存地址,也就是说操作的其实都是源数据,因此方法的执行会影响到实际对象。
6.下列哪种说法是正确的?
A 实例方法可直接调用超类的实例方法
B 实例方法可直接调用超类的类方法
C 实例方法可直接调用本类的类方法
D 实例方法可直接调用其他类的实例方法
正确答案 : C
解析 : 实例方法可以调用本类的实例方法和静态方法(即类方法),类方法只能访问类成员变量和调用类方法
7.有以下代码片段:
String str1="hello";
String str2="he"+ new String("llo");
System.out.println(str1==str2);
请问输出的结果是:
正确答案 : false
解析 :
String str1=“hello”;
String str2=new String(“hello”);
前者是存在于常量池中 , 后者存在于堆中,==是验证两个对象是否是一个(内存地址是否相同), 用+拼接字符串时会创建一个新对象再返回。
8.程序读入用户输入的一个值,要求创建一个自定义的异常,如果输入值大于 10 ,使用 throw 语句显式地引发异常,异常输出信息为 ”something’swrong!” ,语句为()
A if(i>10)throw new Exception(“something’swrong!”);
B if(i>10)throw Exception e(“something’swrong!”);
C if(i>10) throw new Exception e(“something’swrong!”);
D if(i>10)throw Exception( “something’swrong!”);
正确答案 : A
解析 : throw new Exception()是重新生成一个Exception类的对象并抛出。e中记录了原异常的信息,而new Exception()是一个新对象,当中不包含任何有用的信息;
9.以下关于集合类 ArrayList 、 LinkedList 、 HashMap 描述错误的是:
A HashMap实现Map接口,它允许任何类型的键和值对象,并允许将null用作键或值
B ArrayList和LinkedList均实现了List接口
C 添加和删除元素时,ArrayList的表现更佳
D ArrayList的访问速度比LinkedList快
正确答案 : C
解析 : ArrayList底层是动态数组是实现,随机位置添加和删除,都需要移动数组的数据,而LinkedList底层是双向链表,只需要修改Node节点的引用。随机访问数组要比链表块。
(未学)10.关于 Java 线程,下面说法错误的是()
A 创建线程可以通过实现Runnable接口和继承Thread类
B java利用线程使整个系统成为异步
C 新线程一旦被创建,它将自动开始运行
正确答案 : C
(牛客)解析 :
A、创建线程有三个方式:继承Thread类,实现Runnable,实现Callable
B、同步说的是必须等待一个事情完了才能去干另一间事情,异步说的是不需要停下来一直等待一个事件结束,我在等待的过程中还可以进行别的事情。这个东西在Callable中call方法返回一个Future体现的淋漓尽致。
C、线程创建时start方法,线程处于Runnable,线程只有run方法执行,才进入Running
二、编程题
1.标题:字符串中找出连续最长的数字串 | 时间限制:1秒 | 内存限制:32768K
读入一个字符串str,输出字符串str中的连续最长的数字串
输入描述:
个测试输入包含1个测试用例,一个字符串str,长度不超过255。
输出描述:
在一行内输出str中里连续最长的数字串。
示例1:
输入
abcd12345ed125ss123456789
输出
123456789
import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner scanner=new Scanner(System.in);
while(scanner.hasNext()){
String s=scanner.nextLine();
StringBuilder result=new StringBuilder();
StringBuilder sb=new StringBuilder();
for(int i=0;i<s.length();i++){
if(s.charAt(i)>=48&&s.charAt(i)<=57){
sb.setLength(0);
//sb=new StringBuilder();
//int count=0;
for(int j=i;j<s.length()&&s.charAt(j)>=48&&s.charAt(j)<=57;j++){
sb.append(s.charAt(j)+"");
i++;
}
if(result.length()<sb.length()){
result.setLength(0);
result.append(sb);
}
//i=i+count-1;
}
}
System.out.println(result.toString());
}
}
}
这里一定要注意不能直接result=sb,地址的传递会改变这个变量名指向的地址,就会影响后面长度的判断.
2.标题:合法括号序列判断 | 时间限制:3秒 | 内存限制:32768K | 语言限制:[Python, C++, C#, Java]
给定一个字符串A和它的长度n,请返回一个bool值代表它是否为一个合法的括号串。
一个合法的括号串定义为:1.只包括括号字符;2.左括号和右括号一一对应
测试样例:
“(()())”,6
返回:true
import java.util.*;
public class Parenthesis {
public boolean chkParenthesis(String A, int n) {
// write code here
Stack<Character> stack=new Stack<>();
for(int i=0;i<A.length();i++){
char c=A.charAt(i);
if(c=='('||c=='['||c=='{'){
stack.push(c);
continue;
}
if(stack.empty()){
return false;
}
Character top=stack.pop();
if(top=='('&&c==')'){
continue;
}
if(top=='['&&c==']'){
continue;
}
if(top=='{'&&c=='}'){
continue;
}
return false;
}
if(stack.empty()){
return true;
}
return false;
}
}
这个题就是前面在讲栈这个数据结构的括号匹配的原题