20200926
错题总结:
注:选择题正确答案为加粗字体。
一、单项选择题:
1.编译一个已经完成的java源程序(将代码编译为字节码),需要使用哪个命令?
A、java B、javac C、javadoc D、jar
通俗的来说:
javac命令:将记事本中的java代码(.java)编译成java字节码文件,以.class为扩展名。
java命令 :将编译好的字节码执行,输出结果。
我选的A。
错误原因:忽略了这个知识点,只有一点模糊的印象。
2.下列不是java
关键字的是:
A、public B、main C、static D、transient
我选的D。
错误原因:平时经常敲代码就会用到main方法,方法方法就不能是关键字,平时说多了,这一点就被忽视了。
3.对于以下代码,输出结果是:
for (int i =4; i > 0; i--){
int j = 0;
do{
j++;
if (j == 2){
break;
}
}while(j < i);
System.out.print(j);
}
A、4321 B、1222 C、2222 D、2221
我选的B。
错误原因:认为do-while和while循环差不多,直到用debug去看的时候才恍然大悟。
以为while下面的System.out.println(j);是循环体,结果翻书查看后发现do里面的才是循环体,说明之前自己学习这一块的时候没有认真去思考,就认为和while循环差不多,然后就潜移默化的记成了while循环。
15题选择题,纯属眼花,把a++看出了++a
5.下列语句执行后,k的值为:
A、12 B、11 C、10 D、9:
int i = 6 , j = 8 , k = 10 , m = 7;
if(i < j | m > k++) k++;
我选的B。
错误原因:认为第一个k++在条件里面,就不算。但是k是在外面声明的,算全局变量,作用域是整个程序,所以两个k++都要算。还有就是逻辑或无论左边取值是false还是true都会执行右边的操作。
6.关于以下程序,描述正确的是:
int[] x = {1,2,3,4};
int[][] y = new int[2][2];
y[0] = x;
System.out.println(y[0][2])
A、第三行编译错误; B、第四行编译错误; C、编译通过,第四行运行出错
D、编译通过,输出结果为:3 E、编译通过,输出结果为:2
我选的A。
错误原因:在我的印象中,认为二维数组不能只写一个[],在电脑上敲的时候发现居然可以。
二、多项选择题:
1.下面声明变量错误的是:
A、int i = 100; B、float f = 1.3; C、double d = 3.5; D、byte m = 130;
我选的D。
错误原因:忘记了float变量定义的规则。B选项要在后面加一个f,如果不加的话就是double类型了。
D就是超过了取值范围[-128,127]
2.以下单词中哪个不是java语言的关键字:
A、final B、main C、false D、constant E、public
我选的CD。
错误原因:同单选题第二题。
3.以下申明数组的方式,哪种是正确的:
A、int[3][4] array
; B、int[2][] array
; C、char [] array []
;
D、String[][] array
; E、String array[][]
; F、int array
[][3];
我选的DE。
错误原因,不知道二维数组的这种声明方式。于是在网上查了一下二维数组的声明方式。
①.动态初始化
数据类型 数组名 [ ][ ] = new 数据类型[m][n]
数据类型 [ ][ ] 数组名 = new 数据类型[m
][n]
数据类型 [ ] 数组名 [ ] = new 数据类型[m][n]
//这道题就属于这种声明方式
②.静态初始化
数据类型 [ ][ ] 数组名 = {{元素1,元素2....},{元素1,元素2....},{元素1,元素2....}.....};
4.以下关于构造方法的描述错误的是:
A、构造方法的返回类型只能是void。
B、构造方法是类的一种特殊方法,它的方法名必须与类名相同。
C、在Java中,父类允许子类重写构造方法。
D、一般在创建新对象时,系统都会自动调用构造函数。
我选的是D。错误原因:我认为系统会自动生成不会自动调用,然而是会自动调用的,现在想想也是这样。
A选项错在:构造函数是没有返回值的。
C选项错在:构造函数不能继承,多以子类中就不能重新构造函数。
三、简答题:
1.简述你对封装、继承的理解。(展示还未全部理解,先用老师写的答案)
封装和继承都是面向对象的特征之一。
封装是指把一个对象的状态信息隐藏在对象内部,不允许外部对象直接访问对象的内部信息。但是可以提供一些可以被外界访问的方法来操作。就好像我们看不到挂在墙上的空调的内部的零件信息(也就是属性),但是可以通过遥控器(方法)来控制空调。如果不想被外界访问,我们大可不必提供方法给外界访问。但是如果一个类没有提供给外界访问的方法,那么这个类也没有什么意义了。就好像如果没有空调遥控器,那么我们就无法操控空凋制冷,空调本身就没有意义了(当然现在还有很多其他方法 ,这里只是为了举例子)。
java中是通过"访问控制符"来实现类中哪些细节可以暴露,哪些细节需要封装隐藏的
继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或新的功能,也可以用父类的功能,但不能选择性地继承父类。继承使用 extends关键字。通过使用继承我们能够非常方便地复用以前的代码。子类可以继承父类中 public / protected / package-access 访问权限的属性和方法;子类可以拥有自己属性和方法,即子类可以对父类进行扩展。子类可以用自己的方式实现父类的方法(重写)。
2.简述类的实例化过程(即对象的创建过程)。(展示还未全部理解,先用老师写的答案)
class SuperClass{
public static int a = 1;
public int b = 1;
static{
//省略代码
}
{
//省略代码
}
public SuperClass(){
//省略代码
show();
}
public void show() {
System.out.println(this.a + " , " + this.b);
}
}
class SubClass extends SuperClass{
public static int a =2;
public int b = 2;
static{
//省略代码
}
{
//省略代码
}
public SubClass(){
//省略代码
show();
}
@Override
public void show() {
System.out.println(this.a + " , " + this.b);
}
}
这里只考虑 SubClass 和 SuperClas,暂不考虑java.lang.Object
这里在new SubClass()对象的时候,首先执行 new。虚拟机发现方法区中并没有该类的信息,就会先去加载该类,在加载的时候发现该类有父类(Java中除了java.lang.Object没有父类,其他类都会有父类)即SuperClass,则会先加载该类的父类(SuperClass),然后进行父类类(static)变量的初始化(包括准备阶段的默认初始化(零值)和初始化阶段的显示初始化(clinit也就是static初始化或者说是static块)。然后进行子类类(static)变量的初始化,类变量初始化完毕。
接着进行对象的创建,进入子类构造函数(SubClass()),在子类构造函数第一行会调用递归父类构造函数(SuperClass),进入父类构造函数之前会先进行父类实例变量初始化,即给非静态成员变量初始化(实例初始化)并运行代码块,然后进入父类构造函数执行,当运行show()方法时发现子类对其进行了覆盖,那么运行子类的show()方法,由于子类还没有进行实例变量的显示初始化,只能输出2 和 0 ,父类构造函数运行结束返回到子类构造函数,此时先会进行子类实例变量的显示初始化(实例初始化),运行了子类代码块,接着运行子类构造函数,接着运行show(),这时子类实例变量都进行了显示初始化,输出2 和 2。
感受总结:
今天上午进行了java的第一次考试,卷子整体不难,但丢分较多。