Corejava试题
1、下列关于JDK、JRE和JVM的描述。哪项正确?(D )
A. JDK中包含了JRE,JVM中包含了JRE
B. JRE中包含了JDK,JDK中包含了JVM
C. JRE中包含了JDK,JVM中包含了JRE
D. JDK中包含了JRE,JRE中包含了JVM
2、在使用super 和this关键字时,以下描述正确的是(A )
A 在子类构造方法中使用super()显示调用父类的构造方法,super()必须写在子类构造方法的第一行,否则编译不通过
B super()和this()不一定要放在构造方法内第一行
C this()和super()可以同时出现在一个构造函数中
D this()和super()可以在static环境中使用,包括static方法和static语句块
3、下面叙述正确的有_______B___D________。
A.在一个java原文件中只能定义一个class
B.在一个java原文件中可以定义多个class
C.在一个java原文件中只能定义public class
D.java原文件的前缀一定是所包含public类型的名字
4、java程序中程序运行入口方法main的签名正确的有_A_B____。
A. public static void main(String args[])
B. static public void main(String[] args)
C. public void static main(String[] args)
D. public void main(String args[])
void printValue(int m){
do {
System.out.println("The value is"+m);
} while( --m > =10 );
}
public static void main(String args[]) {
int i=10;
Test t= new Test();
t.printValue(i);
}
}
输出将是什么? (C)
A. The value is 8
B. The value is 9
C. The value is 10
D. The value is 11
6、以下能作为class, interface, method或variable有效标识符的有____A__D__F______。以$ _字母开头,后接$ _字母 数字 不能以关键字和保留字作为标识符
A.For B.boolean C.23age
D. _id E.my name F. $this_is_a_long_variable_name
7.为将数组myArray的长度由3改为6,现采取以下编码:
int[]myArray=new int [3];
myArray=new int[6];
代码执行后,以下叙述哪项是正确的?D
A.数组myArray的长度已由3改为6,其中前3个元素的值不变,后3个元素的值为空。
B.数组myArray的长度已由3改为6,其中前3个元素的值不变,后3个元素,需再经过初始化后才能使用。
C.数组myArray的长度没有变化。
D.数组myArray的长度已由3改为6,原来3个元素的值全部丢失
8.以下哪种初始化数组的方式是错误的?(D )
A. String[] names={"zhang", "wang", "li"};
B. String names[] =new String [3];
names [0] ="zhang";
names [1] ="wang";
names [2] ="li";
C. String[] names={"zhang", "wang", "li"};
D. String[] name=new String[3]{“zhang”,”wang”,”li”};
9、 class Test2 {
public static void main (String [] args) {
short a,b,C;
a=l;
b=2;
C=(short)a+b;
a+=2;//自动转换为(short)
}
}
以上代码中,哪一句是错误的?( B )
A. a=1:
B.C=a+b;
C. a+=2;
D. short a,b,C;
10、以下正确的有__A_C__。
A. int i = 32; B.float f = 45.32;
C. double d=3.2; D.char = “hello”;
11、以下方法申明正确的有__A____C_D_____。
A.public static void writeLog(String msg)
B. public static writeLog(String msg)
C. public final void writeLog(String msg)
D.static public void writeLog(String msg)
12、方法重载(overloading)必须满足_B C_E_ 。
A. 在不同class中定义的方法 B.在同一类中定义的方法
C. 方法名必须相同 D.返回类型必须相同
E. 参数一定不同 F.参数可以相同
13、请看以下程序:
class Vehicle {
public void drive() {
System.out.println("Vehicle: drive");
}
}
class Car extends Vehicle {
public void drive() {
System.out.println("Car: drive");
}
}
public class Test {
public static void main (String args []) {
Vehicle v;
Car c;
v = new Vehicle();
c = new Car();
v.drive();
c.drive();
v = c;
v.drive();
}
}
以下描述正确的有___C__。
B.对于语句v=c;会导致运行错误
C.运行输出:
Vehicle: drive
Car: drive
Car: drive
D.运行输出:
Vehicle: drive
Car: drive
Vehicle: drive
14、程序:
public class StaticTest {
static {
System.out.println("Hi there");
}
public void print() {
System.out.println("Hello");
}
public static void main(String args []) {
StaticTest st1 = new StaticTest();
st1.print();
StaticTest st2 = new StaticTest();
st2.print();
}
}
什么时候字符串“Hi there”会输出____C____。
A.永远都不会输出 B.创建st1和st2时
C.第一次将StaticTest类型装载进内存时 D.显示调用print方法时
15、在一个java源文件中,import,class,package语句的顺序是(B)。
A. Import class package
B. Package class import
C. Import package class
D. Package import class
16. 设x = 1 , y = 2 , z = 3,则表达式y+=z--/++x 的值是(A )。
Y=y+(z--/++x)//如果是int选A如果是double选B
A. 3 B. 3. 5 C. 4 D. 5
17、下面的代码段中,执行之后i 和j 的值是什么? __C
int i = 1;
int j;
j = i++;
A、 1, 1 B、1, 2 C、2, 1 D、2, 2
18、对记录序列
{314,298,508,123,486,145}
按从小到大的顺序进行插入排序,经过两趟排序后的结果为:( B)
A. {314,298,508,123,145,486}
B. {298,314,508,123,486,145}
C. {298,123,314,508,486,145}
D. {123,298,314,508,486,145}
19. 如下程序:
public class ArugmentTest{
static public void change(int a){
a = 3;
}
public static void main(String[] args){
int a = 2;
change(a);
System.out.print(a);
}
}
在控制台上输出的是___D___。
A. 运行出错 B.3 C.编译出错 D.2
20. Given:
public class Test {
public static void main (String[]args) {
String foo = args[1];
String bar = args[2];
String baz = args[3];
System.out.println(“baz = ” + baz);
}
}
And the output: baz = 2
使用哪个命令会输出上述结果?(C)
C. java Test 4 2 4 2 D. java Test 4 3 2 1
2、当声明一个数组int arr[] = new int[5]; 时,这代表这个数组所保存的变量类型是___int_____,数组名是_____arr___,数组的大小为_____5____,数组元素下标的使用范围是__0__到_4___。
3、任何一个java程序都默认引入了一个包,这个包名是_java.lang_____,所有类的父类是这个包下的__Object__ 类。
三、简答题(每题4分,总分24分)
1.面向对象的特征有哪些方面?
封装性、继承性、多态性、(抽象性)
答:面向对象有三大特点:封装、继承、多态。(如果要回答四个,可加上 抽象性 这一特点)
1.继承:
继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。对象的一个新类可以从现有的类中派生,这个过程称为类继承。新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。派生类可以从它的基类那里继承方法和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要。
2.封装:
封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。
3. 多态性:
多态性是指允许不同类的对象对同一消息作出响应。多态性包括参数化多态性和包含多态性。多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。
4.抽象:
抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。抽象包括两个方面,一是过程抽象,二是数据抽象。
1,发生的地方不同,重载是在同一个类同,重写实在继承的时候子类中。
2,实现的功能不同,重载是为了满足不同的参数需求,方便调用,体现灵活性。
而重写是覆盖父类的方法,对父类方法进行修改。
3,语法不同,重载是要求方法名相同,形参必须不同,返回值和修饰符无要求。
而重写则是要求方法名和形参相同,并且父类私有方法和静态方法不能被重写。
普通方法也不能被重写为静态的,子类能定义与父类相同的静态方法但这不是重写。
3.请写出八大基本数据类型按照数据类型分别归类,以及四个引用数据类型。
4.Java中继承的特点是什么?继承时,子父类的构造器是如何调用的?
1.只支持单继承,即一个子类只允许有一个父类。
2. 子类可以拥有父类的属性和方法
3. 子类可以拥有自己的属性和方法
4. 子类可以重写覆盖父类的方法
5. 现有:
class Ifs {
public static void main (String [] args) {
boolean state=false;
int i=2;
if( (++i>2) && (state=true))
i++;//i=4
if( (++i>4) || (state=false))
i++;//i=6.
System.out .println (i);
}
请问输出的结果是多少:____6__
6.现有:
class Test{
public static void mian(String[] args){
int i=5;
do{
i++;
}while(i>=5){
i--;
}
System.out.println(i);
}
}
请输出程序运行的结果:___编译时异常_____;
四、编程题(第一小题8分,第二小题9分,第三小题10分,总分27分)
1,题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去掉不满足条件的排列。
public void digit() {
int count=0;
for (int i = 1; i <= 4; i++) {
for (int j = 1; j <= 4; j++) {
for (int k = 1; k <= 4; k++) {
if (i != j && i != k && j != k) {
System.out.print(i * 100 + j * 10 + k+"\t");
count++;
}
}
}
}
System.out.println();
System.out.println("一共有:"+count+"个数");
}
import java.util.Scanner;
public class ToBinary {
private int number;
public void setNumber(int number) {
this.number=number;
}
public int getNumber() {
return number;
}
public ToBinary() {
}
public ToBinary(int number) {
this.number=number;
}
public void toBinary() {
String result="";
for(int i=number;i!=0;i=i/2) {
result=i%2+result;
}
System.out.println("结果为:"+result);
}
public void toBinary2() {
String result="";
int number=this.number;
for(int i = 0;i<32;number>>=1,i++) {
result=(number&1)+result;
// if(number==0)break;
// System.out.println(result);
}
System.out.println("结果1为:"+result);
}
public void toBinary4() {
int[]a=new int[32];
int number=this.number;
for(int i = 0;i<32;number>>=1,i++) {
a[a.length-i-1]=(number&1);
if(number==0)break;
}
System.out.print("结果4为:");
for(int i:a) {
System.out.print(i);
}
}
public void toBinary3() {
String result=Integer.toBinaryString(number);
System.out.println("结果3为:"+result);
}
public static void main (String[] args) {
System.out.println("请输入需要转换的十进制数:");
Scanner input=new Scanner(System.in);
int i=input.nextInt();
ToBinary tb=new ToBinary(i);
tb.toBinary();
tb.toBinary2();
tb.toBinary3();
tb.toBinary4();
}
}
3、常用的排序算法有哪些,请列举?
使用java实现选择排序,对数组int[] array = {2,5,1,98,198,43};进行
排序
For(int i=0;i
Int result=0;
For(int j=1+i;j
If(array[j]
Result=j;
}
}
Array[i]=array[i]^j;
J=i^j;//i^j^j
I=i^j;//i^i^j^j
}
import java.util.Arrays;
public class Selection {
public int[] selection(int array[]) {
for(int i=0;i<array.length;i++) {//遍历这个数组
int min=array[i];//默认当前数最小
int index=i;//将当前的索引赋给index
for(int j=i+1;j<array.length;j++) {
if(array[j]<min) {
min=array[j];//min为找到的比当前数小的数
index=j;//保留最小数的索引,用于找到最小数后的交换操作
}
}
array[index]=array[i];//将最小数与当前数交换
array[i]=min;
}
return array;
}
public void print(int array[]) {
for(int i=0;i<array.length;i++) {
System.out.print("array["+i+"]="+array[i]+"\t");
if((i+1)%5==0) {
System.out.println();
}
}
}
public static void main(String[] args) {
Selection s=new Selection();
int array[]= {99,45,12,34,82,46,75,28,43,19};
s.selection(array);
s.print(array);
System.out.println(Arrays.toString(array));
}
}