一、填空题(每空2分,共26分)
1.Java类的种类有 class、 interface和 ---enum--- 。
2.字符串 String类中使用 ---charAt(int index)--- 函数来取得某一个下标位置的字符(只需写出函数名称)。
3.在子类构造函数中使用 ---super--- 关键字来调用父类的构造函数。
4.Java中回收垃圾的方法名是 ---System.GC()---。
5.异常类 Exception的父类名是 ---Throwable--- 。
6.使用 ---static--- 修饰符定义的类成员,可以通过类直接访问而不需要创建对象后再访问.
7.在Java中,如果需要对对象的序列化进行深度控制,需要实现---Serializable---接口,并且需要实现---writeObject()---和---readObject()---方法。 序列号反序列化
8.启动Java线程的方法名是---start()---
9.按照标准I/0模型,Java提供3种标准输入或输出,分别是System.out、System.in 和---System.err---方法。
10.若a,b为int型变量且已分别赋值为8,10。表达式(a++)+(++b)+a*b的值是 118。
二、单项选择题(每题2分,共20分)
1.下列四个不同数制表示的数中,数值最大的是(B)
(A)二进制数1101101
(B)八进制数334
(C)十进制数219
(D)十六进制数DA
2.以下关于进程和线程叙述正确的是(D)
(A)同一进程中的两段代码不能够同时执行
(B)线程问是独立的
(c)进程是属于线程的
(d)线程处于进程空间内
3.汉字国际码规定,每个汉字用(B)个字节表示。
(A)1
(B)2
(C)3
(D)4
4.下面哪个SQL语句描述了每一个部门的每个工种的工资最大值?(b)
(a) select dept _, job cat, max(salary) from employees where salary>(salary)
(b) select dept id, job cat, max(salary) from employees group by dept id, job cat
(c) select dept _ ,job cat, max (salary) from employees group by dept id
(d)select dept id , job cat, max (salary) from employees group by dept id, job cat salary
5.下列不可作为java语言修饰符的是 (c)
(A)a1
(B)$1
(C)_1
(D)11
6. Character流与Byte流的区别是(c)
(A)每次读入的字节数不同
(B)前者带有缓冲,后者没有
(C)前者是字符读写,后者是字节读写
(D)二者没有区别,可以互换使用
7.指出下列程序运行的结果(b)
public class example
String str = new string( “good”);
char[] ch = {'a','b','c'};
public static void main(string args[]){
Example ex= new Example();
ex.change(ex.str, ex.ch);
System.out.print(ex.str + “and”);
System.out.print(ex.ch);
}
public void change(string str, char ch[]){
str= “test ok”;
ch[0] = ‘g’;
}
}
(A)good and abc
(B)good and gbc
(C)test ok and abc
(D)test ok and gbc
8.ArrayList list = New ArrayList(20);中的List扩充了几次(A)
(A)0
(B)1
(C)2
(D)3
9.以下代码运行输出是(c)
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();
Systen out. println(p.name);
(A)Person
(B)没有输出
(C)编译出错
(D)运行出错
10.Java中的集合类包括 Arraylist、linkedlist.、hashmap等类,下列关于集合关描述错误的是(D)
(A) ArrayList和LinkedList均实现了List接口
(B) ArrayList的访问速度比LinkedList快
(C) HashMap实现Map接口,它允许任何类型的键和值对象,并允许Null作为键或值
(D) 添加和删除元素时,ArrayList的表现更佳。
三、判断题(每题2分,共20分)
1.Java程序中的起始类名称必须与存放该类的文件名相同。( √ )
一个文件中可以有多个类,如果没有public类,则可以与任意类名相同,如果有public类则文件名必须与此类名相同,因为一个文件中只能有一个public类。如果文件中只有一个类,则文件名必须与类名相同
2.原生类中的数据类型均可任意转换。( × )
基本数据类型(或叫做原生类、内置类型) 四类八种间的转换限制 (例如:boolean类型数据和其他七种不能互相转换 )
3.final修饰的方法不能被重载。( × )
被final修饰的类不能继承。被final修饰的方法不能重写。被final修饰的变量为常量,值不能改变(实际上是值的引用不能改变 如stringBuilder)。
4.GC线程是守护线程。( √ )
守护线程最典型的应用就是 GC (垃圾回收器)。
5.声明为final的方法不能在子类中重载。(√ )
被final修饰的方法不能重写,子类又如何重载?
6.不通过构造函数也能创建对象。( √ )
百度4种方法创建对象 clone new reflect 反序列化
7.Java中所有的类都是java.lang的子类。( × )
虽然object在java.lang中
8.Java语言中的接口可以继承,一个接口通过关键字 extends可以继承另一个接口。一个JAVA的类可以有多个接口,它们通过关键字 implements来实现。( 对 )
9.每个try块都必须至少有一个catch块与之相对应。( × )
try块后面不一定需要跟着catch块,可以只跟着finally块,catch和finally不能同时忽略
10. abstract是抽象修饰符,可以用来修饰类及其属性和方法。( × )
abstract 不能修饰属性
四.程序改错题(每题5分,共10分)
1、下面的程序不能正常编译,请改正程序中的错误,并说明理由。(注意:不改动程序的结构,不得增行或删行)
interface A{
int x = 0;
}
Public class B {
int x = 1;
}
Public class C extends B implenets A {
public void pX() {
System.out.print(x);
}
//报错 Reference to 'x' is ambiguous, both 'B.x' and 'A.x' match
public static void main(String[] args){
new C().pX();
}
}
**解:** Reference to 'x' is ambiguous, both 'B.x' and 'A.x' match
这里只谈调用 输出语句里打印x 更换为super.x 明确指定调用父类
或者将A.x 明确指定调用接口(接口的属性默认隐含为 public static final)
或者将接口或者父类的变量名改掉
2、下面的程序是打印所有的 Integer整数是否是奇数,请改正下面的程序使它得到正确结果。(注意:不改动程序的结构)
public class question1 {
/**
*判断是否为奇数
*@param i
*@Return true为奇数 false为偶数
*/
public static boolean isOdd ( int i){
return i%2==1;
}
/**
*@param args
*/
public static void mai(string[] args) {
for(int i=Integer.MIN_VALUE;i<=Integer.MAX_VALUE;++i){
boolean isOdd=isOdd(i);
System.out.println(String.format("i=%d,isOdd=%b", i, isOdd));
}
}
1、for语句是死循环; i++
2、判断int型是否为奇数return i%2==1错误,应该为:return i%2!=0;
五、简答题(每题6分,共24分)
1.有一个学生成绩表SCORE,请写出一条SQL语句查询出每门课都大于80分的学生的姓名?
最低分不低于80:
SELECT NAME FROM SCORE
GROUP BY NAME
HAVING MIN(score)>=80
同姓名不存在低于80分
select name from stu
group by name
having name not in (
select name from stu
where score <80)
自连接 将三个科目全都补上 粗暴
SELECT D.name FROM (
SELECT S.name,S.score AS ITEM1,S1.score AS ITEM2,S2.score AS ITEM3
FROM Student S
INNER JOIN Student S1 ON S.name = S1.name AND S.course != S1.course
INNER JOIN Student S2 ON S.name = S2.name AND S2.course NOT IN (S.course,S1.course)
WHERE S.score>=80 AND S1.score>=80 AND S2.score>=80
) D
GROUP BY D.name
2.编程实现字符串中单词的反转。假设所有的单词均有空格分隔且标点符号当做字母处理。如“welcome to Innovation works.”变换成“works.Innovation to welcome”.
public static String change(String string){
//根据空格分隔
String[] splitArray = string.split(" ");
//通过Collections来反转
Collections.reverse(Arrays.asList(splitArray));
//创建stringbuffer来组成新字符串
StringBuilder stringBuilder = new StringBuilder();
for (String s : splitArray) {
System.out.println("s = " + s);
stringBuilder.append(s);
stringBuilder.append(" ");
}
return stringBuilder.toString();
}
3.请用递归算法打印出斐波那契数列(从第三个数开始每个数等于它前面的两个数相加)。如:1,1,2,3,5,8,13,21。。。。
斐波那契数列又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”。
在数学上,斐波纳契数列以如下被以递归的方法定义:F(0)=0,F(1)=1, F(n)=F(n-1)+F(n-2)(n>=2,n∈N*)。
//建立一个函数,用于计算数列中的每一项
public static int fib(int num) {
//判断:是否是第一个数和第二个数
if(num == 1 || num == 2) {
return 1;
}else {
//循环调用本函数
return fib(num - 2) + fib(num - 1);
}
}
//主函数(程序入口)
public static void main(String[] args) {
//建立一个for循环,用于打印第一个至第十个数字
for(int i = 1;i <= 20;i++) {
//调用函数进行打印
System.out.print(fib(i) + "\t");
}
}
4.编写一段java代码,求两个字符串StringA和StringB的最长公共子串。
public static String iQueryMaxCommString(String stringA, String stringB) {
if(stringA==null || stringB==null){
return null;
}
if(stringA.length()<1 || stringB.length()<1){
return "";
}
if (stringA.contains(stringB)) {
return stringB;
}
else if (stringB.length() == 1) {
return "";
}
String leftSerach = iQueryMaxCommString(stringA, stringB.substring(0, stringB.length() - 1));
String rightSerach = iQueryMaxCommString(stringA, stringB.substring(1, stringB.length()));
return leftSerach.length() >= rightSerach.length() ? leftSerach : rightSerach;
}