单选题
1.Java程序的执行过程中用到一套JDK工具,其中java.exe是指 ( B )
A. 文档生成器 B. 解释器 C. 编译器 D. 分解器
解析:javac是编译器,把java代码编译成字节码。java是解释器,解释执行字节。
2.下列语句那一句是正确的( B )
A.java程序经过编译后产生machine code
B.Java程序编译后产生byte code
C.Java程序编译后产生DLL
D.以上都不正确
解析:Java程序编译后产生.class文件也就是上面说的byte code文件。machine code 机器码就是计算机可以直接执行,并且执行速度最快的代码,是基于"O"和"I"字符的流。 DLL(Dynamic Link Library)文件即库文件,是动态链接库文件,又称“应用程序拓展”,是软件文件类型。
3.下列说法正确的有 ( C )
A.class中的constructor不可省略
B.constructor必须与class同名,但方法不能与class同名
C.constructor在对象被new时执行
D.一个class只能定义一个constructor
解析:class中的constructor可以省略,这时类在加载的过程中会自动生成一个无参的constructor,当自己手动添加constructor,类不再自动生成constructor。
constructor必须与class同名,方法能与class同名。例如我创建了一个Person类,类中可以有一个 public int Person(){} 方法,该方法不是构造方法。
使用new关键字实例化对象的时候被实例化的类会调用构造方法来初始化类。
一个类中可以有0或0个以上构造方法
4.提供Java存取数据库能力的包是(A)
A.java.sql B.java.awt C.java.lang D.java.swing
解析:java.sql 提供使用 JavaTM 编程语言访问并处理存储在数据源(通常是一个关系数据库)中的数据的 API。此 API 包括一个框架,凭借此框架可以动态地安装不同驱动程序来访问不同数据源。
java.awt是一个软件包,包含用于创建用户界面和绘制图形图像的所有分类。
java.lang包是java语言的核心,它提供了java中的基础类。包括基本Object类、Class类、String类、基本类型的包装类、基本的数学类等等最基本的类。
Java Swing是Java Foundation Classes(JFC)的一部分。在Swing中,Sun开发了一个经过仔细设计的、灵活而强大的 GUI 工具包。Swing是在AWT组件基础上构建的。它所提供的功能要比AWT提供的更为广泛。它也是Java技术的一种标准配置
5.下列运算符合法的是(D)
A.&& B.<> C.if D. :=
解析:&& 短路与,Java逻辑运算符,同真则真;<> sql中常用的不等于,Java中不等于用 !=表示;if是一个判定语句,不属于运算符;在go语言中:= 是声明并赋值,并且系统自动推断类型,不需要var关键字 例如:d := 100
6.下列哪一种叙述是正确的(D)
A.abstract修饰符可修饰字段、方法和类;
B.抽象方法的body部分必须用一对大括号{}包住
C.声明抽象方法,大括号可有可无
D.抽象方法不可写出大括号
解析:抽象方法是一种特殊的方法,只有声明,没有函数体。抽象类不能用final来修饰 抽象方法也不能被final修饰因为被final修饰后,抽象类和抽象方法将无法使用即抽象类无法继承,抽象方法无法重写
7.下列语句正确的是(A)
A.形式参数可被视为local variable
B.形式参数可被字段修饰符修饰
C.形式参数为方法被调用时,真正被传递的参数
D.形式参数不可以是对象
解析:local variable 是一个局部变量,形参和局部变量一样都不能离开方法,都只能在方法内才会发生作用;
对于形式参数只能被final修饰,其它任何修饰符都会引起编译器错误。但是用这个修饰符也有一定的限制,就是在方法中不能对参数做任何修改。 不过一般情况下,一个方法的形参不用final修饰。只有在特殊情况下,那就是:方法内部类。 一个方法内的内部类如果使用了这个方法的参数或者局部变量的话,这个参数或局部变量应该是final。
真正被传递是实际参数,形参可以理解成一个装载实际参数的容器
所有的参数传递都是通过对象传递的,实际上传递的是该参数的引用
8.下列哪种说法是正确的(D)
A.实例方法可直接调用超类的实例方法
B.实例方法可以直接调用超类的类方法
C.实例方法可直接调用其他类的实例方法
D.实例方法可直接调用本类的类方法
解析:实例方法和类方法的定义与实例变量与类变量的相同,都是通过有无static关键字来进行区分,方法类型前有static的为类方法,反之则为实例方法。简而言之带static的就是“类”的不带static就是“实例”
实例方法可以调用超类的非private方法,并且如果实例方法与超类的实例方法同名的时候必须使用super调用超类的实例方法。【这题感觉题目出得挺有问题的】
9.jsp指令中isELIgnored="boolean"的意思是(C)
A.决定是否实现Servlet的单线程模式
B.决定该页面是否是一个错误处理页面
C.决定是否支持EL表达式
D.没有具体含义
解析:isELIgnored="boolean" 可以控制一组JSP是否使用EL,在每个JSP中也可以指定是否该JSP使用EL。在page directive中的isELIgnored属性用来指定是否忽略。
10.下面哪个不是表单标记(D)
A.INPUT B.RADIO C.CHECKBOX D.TR
解析:tr是一种HTML语言标签
多选题
1、下列说法错误的有:(A C D)
A.在类方法中可用this来调用本类的类方法
B.在类方法中调用本类的类方法式可直接调用
C.在类方法中只能调用本类的类方法
D.在类方法中绝对不能调用实例方法
解析:静态方法中不能使用this关键字
2、下列说法正确的有(BCD)
A.环境变量可在编译source code时指定
B.在编译程序时,所能执行的环境变量不包括class path
C.javac一次可同时编译数个Java源文件
D.javac.exe能指定编译结果要置于哪个目录下(directoy)
解析:环境变量是指Java JDK的位置,我们在CMD下运行Java程序前,必须先启动这些工具,所有需要在编译source code前指定环境变量。
3、下列正确的有(ACD)
A.call by value不会改变实际参数的数值
B.call by reference能改变实际参数的参考地址 [引用指向的地址]
C.call by reference不能改变实际参数的参考地址
D.call by reference 能改变实际参数的内容 [最直观的就是对数组进行操作了]
解析:关于JAVA中参数传递问题有两种,一种是按值传递call by value(如果是基本类型),另一种是按引用传递call by reference(如果是對象).。实际上JAVA中的参数传递全是以值传递的:是基本类型,就拷贝一个基本类型传进方法;是引用,就拷贝一个引用变量传进去方法
4、下列说法错误的有(ABC)
A.Java面向对象语言容许单独的过程与函数存在
B.Java面向对象语言容许单独的方法存在
C.Java语言中的方法属于类中的成员(member)
D.Java语言中的方法必定隶属于某一类(对象),调用方法与存储过程或函数相同
解析:带static的才是类的成员包括:类的成员方法,类的成员属性
编程题
1、实现一个方法,给定一个输入字符串,能够删除所有连续同样字母(大小写不敏感)。例如,输入为ABBCCCCCBBAB,输出就是 ABCBAB;又如,输入为 aAC,输出则是 aC
public static String delete_All_Consecutive_Identical_Letters(String string){
StringBuilder sb = new StringBuilder();
char[] chars = string.toCharArray();
for (int i = 0;i < chars.length; i++) {
if(i==0){
sb.append(chars[0]);
} else if (!String.valueOf(chars[i]).equalsIgnoreCase(String.valueOf(chars[i-1]))){
sb.append(chars[i]);
}
}
return sb.toString();
}
2、实现一个方法,能够生成一个随机字符串数组。这些字符串必须是不一样的,每个字符串由字母和数字组成。方法输入参数有两个:- Count:字符串数目,- Str_length: 字符串长
因为感觉这道题目有点歧义,所以写了两个不同的版本
版本一:字符串数组中每个元素都是不一样的
//初始化源
public static void charAll(ArrayList a){
for (char i = 'a';i <= 'z';i++) {
a.add(i);
}
for(char i ='A';i<='Z';i++) {
a.add(i);
}
}
/**
* 实现一个方法,能够生成一个随机字符串数组。
* 这些字符串必须是不一样的,每个字符串由字母和数字组成。【注意是字母+数字】
* 方法输入参数有两个:- Count:字符串数目,- Str_length: 字符串长 【第一个参数用来控制数组元素个数,第二个参数用来确定元素的长度】
* @param count
* @param str_length
* @return
*/
public static List<String> rd(int count, int str_length){
List<String> list=new ArrayList<String>();
//字母和数字组成
ArrayList a = new ArrayList();
charAll(a);
//使用set去重功能,保证数据的唯一性
HashSet set = new HashSet();
//这里不能用for,否则无法保证数组内各个元素之间是否没有重复的元素
while (set.size() != count){
StringBuilder stringBuilder = new StringBuilder();
//为了保证每个字符串中都能带数字,这里只生成一个比要求生成长度的少一位的字符串
for (int j = 0; j < str_length-1; j++){
//生成随机字符串
int random = (int)(Math.random()* a.size());
stringBuilder.append(a.get(random));
}
//保证每个字符串都带有数字
stringBuilder.append((int)(Math.random()*10));
set.add(stringBuilder);
}
for (Iterator it = set.iterator();it.hasNext();) {
list.add(it.next().toString());
}
return list;
}
版本二:字符串数组中每个元素都不一样的同时,字符串中不出现相同的字符
/**
* 实现一个方法,能够生成一个随机字符串数组。
* 这些字符串必须是不一样的,每个字符串由字母和数字组成。【注意是字母+数字】
* 方法输入参数有两个:- Count:字符串数目,- Str_length: 字符串长 【第一个参数用来控制数组元素个数,第二个参数用来确定元素的长度】
* @param count
* @param str_length
* @return
*/
public static List<String> rd(int count, int str_length){
List<String> list=new ArrayList<String>();
//字母和数字组成
ArrayList a = new ArrayList();
charAll(a);
//使用set去重功能,保证数据的唯一性
HashSet set = new HashSet();
//这里不能用for,否则无法保证数组内各个元素之间是否没有重复的元素
while (set.size() != count){
HashSet set1 = new HashSet();
//为了保证每个字符串中都能带数字,这里只生成一个比要求生成长度的少一位的字符串,保证每个字母都不一样,忽略大小写
while (set1.size() < str_length-1){
//生成随机字符串
int random = (int)(Math.random()* a.size());
set1.add(a.get(random));
}
//保证每个字符串都带有数字
set1.add((int)(Math.random()*10));
StringBuilder stringBuilder = new StringBuilder();
for (Iterator it = set1.iterator();it.hasNext();) {
stringBuilder.append(it.next().toString());
}
set.add(stringBuilder);
}
for (Iterator it = set.iterator();it.hasNext();) {
list.add(it.next().toString());
}
return list;
}