20200926 第一周测试总结

这篇博客总结了作者在学习Java编程时遇到的常见错误,包括javac与java命令的区别,关键字的理解,循环结构的运用,以及构造函数和继承的概念。作者通过实例解析了错误原因,并分享了类的实例化过程,展示了学习过程中的思考和理解。
摘要由CSDN通过智能技术生成

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的第一次考试,卷子整体不难,但丢分较多。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值