----石文海
初级部分试卷 A
一、简答题:每题3分
1、描述一下JVM加载class文件的原理机制?
答:Java虚拟机的类加载器将.class文件加载进来,创建运行时系统,然后由校验器进行校验,再由解释器对.class文件逐行解释并执行。
---》Jvm在执行一个字节码程序时,首先通过类加载器加载运行一个所需的全部代码(本类和被本类调用或者使用的其他字节码程序),然后通过字节码校验器对字节码文件进行数据类型转换和栈溢出错误检查,最后通过解释器将字节码程序解释成机器码。然后在特定的硬件平台和操作系统平台上运行。
àClassLoader
2、char型变量中能不能存贮一个中文汉字?为什么?
答:能。在JAVA中,char型变量是采用unicode编码,unicode字符包含中文汉字。
3、简述逻辑操作(&,|)与条件操作(&&,||)的区别。
---》前者既可以对数值操作,也可以对boolean值操作;属于非短路运算符。
后者只能操作boolean值;属于短路运算符。
答:前者是非短路运算符,即运算符两端都必须执行;运算时,先将运算符两端转化为二进制后进行运算。
后者是短路运算符,有时只需执行左端即可结束运算。
4、在JAVA中,如何跳出当前的多重嵌套循环?
使用控制语句,控制循环的变量范围或者在循环体内部加上限制条件
àbreak,continue,return.
5、编程题: 用最有效率的方法算出2乘以8等於几?
--》移位运算符。2<<3或8<<1.
public class Test {
public static void main(String[] args) {
System.out.println(2*8);
}
}
6、当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?为什么?
答:是引用传递,因为方法参数传递的是对象,而对象属于引用类型。
在java中无论传递的是基本类型数据还是引用数据类型数据,都是传递变量所指向的内存中的真实的数据值。在被调用方法中即使可以改变所传递的对象的值,但无法改变该变量的引用。
--》在JAVA中,只有值传递
7、swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上?
答:能作用在byte和long上,因为它们都属于整型,不能作用在String上。
---》Switch语句采用的数据类型是byte、short、int、char。其他数据类型不能使用。
---》long不行,精度问题。
8、数组有没有length()这个方法? String有没有length()这个方法?
答:数组没有,String有。
9、short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?
答:前者s1是short类型,s1 + 1做完运算后默认为int型,int型转化为short型需要加上强制转化运算符,因为s1 = short(s1 + 1);
后者一样的错误,应为s1+=short(1);
---》s1 = (short)(s1 + 1)
后者没错,
---》而对于s1+=1,jvm首先会将计算后的结果转换成左边变量所属的数据类型然后再将转换后的结果赋给左边变量。
10、heap和stack有什么区别。
答:Heap存放的是new 出来的对象,stack存放的是局部变量。
---》<1>堆的概念
<2>栈的概念
<3>stack中的变量只要定义好了即可用,用完后自动释放内存
堆中,都是用new出来的方式,需要用free释放资源
<4>stack中,与可执行文件大小有关,
heap中,
11、详细描述java程序的编译执行过程。
答:先由JAVA编译器将JAVA源文件编译成字节码文件即.class文件,然后由
Java虚拟机的类加载器将.class文件加载进来,创建运行时系统,然后由校验器进行校验,再由解释器对.class文件逐行解释并执行。
12、就目前知识而言java语言和其他语言不同的地方是什么?java语言相对而言有什么优势?java语言主要是用来解决什么用途的?
答:java语言属于纯面向对象语言,
优势:<1>与操作系统无关,是一种跨平台语言
<2>健壮性强
<3>代码重用率高
<4>拥有强大的基础类库
用途:主要用于解决前期应用开发
13、请简单描述一下有包管理的类的编译和运行过程。
---》包结构对应磁盘的目录结构,编译时,先通过classpath
二、选择题: 每题2分
1,现有一个java源文件,其中包含一个名为Example的public类,为了成功的编译该文件,需要满足一下哪些条件? (C)
A、源文件必须导入java.lang包
B、源文件必须申明一个main()方法
C、源文件名必须为Example.java
D、源文件必须具有package语句
2,请问一下哪些是java中合法的标识符? (AC)
A、_int;
B、%large
C、integer
D、2much
3, 以下哪些是java中的合法的标识符? (BC)
A、%id;
B、$id;
C、_id;
D、#iid
4, 以下哪些是java中合法的关键字 (BCE)
A、array
B、boolean
C、Integer---包装类不属于关键字
D、protect
E、super
5, 请问字节基本数据类型的取值范围是什么? (D)---A,看清题
A、0…+255
B、-128…+127
C、0…65535
D、-32767…3+2768
6,以下哪些描述是正确的 (AB)
A、字符型char具有16位宽度
B、Unicode编码字符具有16位宽度
C、Unicode编码字符具有32位宽度
D、UTF编码字符具有24位宽度
7,给出以下代码,请问程序的运行结果是什么? (D)
Class Example{
Public static void main(String[] args){
Boolean flag = false;
If(flag == true){
System.out.println(“true”);
}else{
System.out.println(“false”);
}
}
}
A、代码编译错误
B、代码编译成功。但在运新期时if语句会抛出异常
C、打印输出true;
D、打印输出false
E、无内容输出
8,请问以下哪些描述正确 (ACD)
A、int类型是一个32位的有符号整型值
B、short类型是一个16位的无符号整数值
C、char类型是一个16位的Unicode编码字符
D、float类型是一个64位的浮点数---》32位
9,以下哪些是基本数据类型 (AD)
A、byte
B、String
C、Integer---》包装类
D、Float
10,请问一下哪些是十进制数123的正确的十六进制表示 (D)
A、0173
B、123
C、0X123
D、0X7b
11, 请问一下哪些语句是用于实现将一个数值为17对应的八进制文字值赋给一个整数变量 (E)
A、private final int theNumber = 0x17;
B、private final int theNumber = 017
C、private int theNumber = 017
D、private int theNumber = (octal)17;
E、public int theNumber=017;
三、编程题
1、用插入法对一组数据进行排序 19分
2、 从命令行输入两个字符串,找出源串中所有存在的目标串 10分
package cn.com.string;
import java.util.Scanner;
public class StringSearch {
static Scanner input = new Scanner(System.in);
public static int index;
public static int enddex;
public static void searchString(String str1,String str2 ){
for( index = 0;index <= str1.length() - 1;index++)
{
for( enddex = index ; enddex <= str1.length();enddex++)
{
if(str2.equals(str1.substring(index, enddex)))
{
System.out.println(index + “ ” + (enddex - 1));
}
}
}
}
public static void main(String[] args) {
String flag = "y";
while(flag.equals("y"))
{ String str1 = input.next();
String str2 = input.next();
searchString(str1,str2);
System.out.println("continue?y or n");
flag = input.next();
}
}
}
3、 从命令行输入两个字符串,在源串中找出目标串中的所有字符 10分
package cn.com.string;
import java.util.Scanner;
public class charSearch {
static Scanner in = new Scanner(System.in);
public static void main(String[] args) {
// TODO Auto-generated method stub
String str1 = in.next();
String str2 = in.next();
char[] char1= str1.toCharArray();
char[] char2= str2.toCharArray();
for(int i = 0;i < str1.length();i++)
{
for(int j = 0;j < str2.length();j++)
{
if(char1[i] == (char2[j]))
{
System.out.println("返回目标串的字符");
System.out.println(char1[i]);
}
}
}
}
}