第三章:面向对象编程1

木婉清2023/12/21

1、

image-20231221145406106

程序运行结果

b=true

c=A

i=100

f=0.8

d=100.0

s=hello

2、

image-20231221145622448

程序运行结果

b=false

c=

i=0

f=0.0

d=0.0

s=null

各个数据类型未初始化的值,char为空

3、

image-20231221145925909

程序运行结果

Area of r1 is:1

x 和 y 在无参构造函数中进行了初始化

4、

image-20231221150200198

程序运行结果

Area of r1 is:0

x 和 y 未初始化的值是 0

5、

image-20231221150246735

程序运行结果

Area of r1 is:0

Area of r1 is:6

第一行使用了无参构造函数,x 和 y 都是 0

第二行使用了有参构造函数,x 是 2,y 是 3

6、

image-20231221150351900

程序运行结果

Person初始化块:局部变量a的值大于4

Person初始化块

Person类的无参构造器

{
    a = 6;
    if(a>4){
        System.out.println("Person初始化块:局部变量a的值大于4");
    }
    System.out.println("Person初始化块");
}

上式为”代码初始化块“,类创建时会在执行构造方法前隐式调用它

执行顺序:代码初始化块 -> 构造函数

7、

image-20231221152025884

程序运行结果

2

3

无参构造函数内部初始化

8、

image-20231221152121243

程序运行结果

W:1

W:3

W:2

执行顺序:分配空间 -> 清零 -> 指定初始化 -> 构造函数初始化

上题的指定初始化是指:

Window w1 = new Window(1);
Window w2 = new Window(3); 

构造函数初始化是指:

House(){w2 = new Window(2);}

因此,输出:

W:1

W:3

W:2

9、

image-20231221152436063

程序运行结果

100

200

  • 传递的参数是基本数据类型(boolean、char、byte、short、int、long、float、double)则传递后,原值不发生改变。
  • 传递的参数是引用数据类型(类、数组、接口)则传递后,原值发生改变。

由于 temp 是 int 型属于基本数据类型,所以传参后 temp 维持原值不变。

而 pvt 是 类 类型属于引用数据类型,所以传参收要随着参数后续的变化而变化。

10、

image-20231221152803572

程序运行结果

100

-100

200

解析:

  • 第一行:temp 是 int 型属于基本数据类型,所以传参后 temp 维持原值不变
  • 第二行:输出了 obj.i 的初始值,即-100
  • 第三行:pvt 是 类 类型属于引用数据类型,所以传参收要随着参数后续的变化而变化

11、

image-20231221152922609

程序运行结果

A

1

66

A

B1

67

解析:

  • 第一行:由于 65 对应着 'A',所以输出 'A'
  • 第二行:输出 int 类型的 1
  • 第三行: char + int 或者 int + char 输出 int 类型,即输出 66(65 + 1)
  • 第四行:先输出 'A',再将 c 的值变为 'B'('A' ++)
  • 第五行:由于上句已将 c 的值改为了 'B',整句话是将 s、c、i 以字符串的方式连起来,所以会输出 B1(s 为空,c 为 B,i 为 1)
  • 第六行:
    • 由于 s 在尾部,整句话以 int 的方式进行输出,即输出 67(B 对应 66,66 + 1 = 67)
    • 如果 s 在第一位(s + i + c)或第二位(i + s + c),则均以字符串的形式输出

12、

image-20231221153043440

程序运行结果

no paramenters

char

int

double

int, float

float, int

观察数据类型及其顺序

13、

image-20231221153314903

程序运行结果

27

34

14、

image-20231221153356265

程序运行结果

x=3 y=2

z=100

15、

image-20231221153455829

程序运行结果

x=3 y=0

z=100

16、

image-20231221153612293

程序运行结果

无法运行。

错误原因:java: 可能尚未初始化变量x

局部变量未初始化

17、

image-20231221153738401

程序运行结果

无名氏说:你好

无语...

无参构造函数中使用 this 关键字调用了有参构造函数,初始化了name、age 和 gender

18、

image-20231221153830466

程序运行结果

10,10,10,0

-1,-1,10,-1

20,20,10,-1

static 所修饰的变量,为所有成员所共享

19、

image-20231221153921789

程序运行结果

static block

f

static {    System.out.println("static block"); }

上述代码为静态初始化块,在类加载时执行,在构造函数前

注意:

如果程序同时有静态初始化块代码初始化块时,先执行静态初始化块,再执行代码初始化块

20、

image-20231221154022242

程序运行结果

static block

f

f

f

静态初始化块只执行一次,但是代码初始化块可执行多次

21、

image-20231221154059443

程序运行结果

static block

As

实例化对象(new As())会自动加载类 -> 执行静态初始化块 -> 执行构造函数

22、

image-20231221154207755

程序运行结果

static block

As

As

As

静态初始化块只执行一次

23、

image-20231221154241788

程序运行结果

A:1

static block

A:2

静态属性安定义顺序执行

如果上述代码有代码初始化块,则代码初始化块在最后执行

24、

image-20231221154355023

程序运行结果

W:3

W:1

House

W:2

优先执行静态变量 -> 非静态后续执行

编辑于 2023/12/22 10:26:29