类与对象练习题

简介: 类与对象练习

前言

类与对象练习

练习

阅读下面一段代码,写出输出结果:

publicclassObject03 { 
publicstaticvoidmain(String[] args) {
Persona=newPerson();
a.age=10;
a.name="小明";
Personb;
b=a;
System.out.println(b.name);
b.age=20;
b=null;
System.out.println(a.age); 
System.out.println(b.age); 
    }
}
classPerson {
Stringname;
intage; 
}

输出结果为:

小明

20

可以看出,前两个输出语句都可以正常输出,但是第三个却出现了异常,这就需要分析一波内存分配了。

1)运行第一个输出语句时已经执行了 b = a,说明a和b都指向了同一个数据空间,所以输出b.name就是输出 小明。

2)第二个输出语句输出的是 a.age ,因为已经执行了 b.age = 20,所以说明更改了内存中原来的年龄10变为了20,(注意:因为a和b指向同一个内存空间,所以更改b.age就是更改内存中的地址,导致a的值也会改变!!!)所以会输出20。

3)第三个输出要很注意,为什么抛出了一个异常?这里就要去了解这个b = null语句执行后内存中发生了什么变化。


当运行到 b = a 时,说明a和b都指向了同一个内存空间0x0011(自命名,纯属讲课使用),执行了b.age后,内存中的age由10变成了20。所以执行语句System.out.println(a.age);后输出a中的年龄也是20。

       然后运行 b = null,这里要特别注意,把空字符赋给b后,堆中的内存并不会发生改变,因为将空字符指向b后代表的是让b不再指向内存空间0x0011,就等于将图中黄色的线切断,b不再指向堆,但不会影响堆中内存的值。所以语句System.out.println(a.age);不会受到影响。

总结

类与对象是学习面向对象的基础,一定要将基础打牢,循序渐进去学习,才能有所收获✔️

相关文章
|
编译器 C++
C++初阶--类与对象(2)
C++初阶--类与对象(2)
|
1月前
|
编译器 C++
C++初阶--类与对象(3)(图解)
C++初阶--类与对象(3)(图解)
|
4月前
|
自然语言处理 编译器
编译原理复习五:属性文法与三地址码的生成(附题目与答案 超详细)
编译原理复习五:属性文法与三地址码的生成(附题目与答案 超详细)
114 0
|
8月前
|
存储 编译器 数据处理
c++学习之类与对象3
c++学习之类与对象3
88 0
|
8天前
|
Java 编译器 Linux
自从学了C++之后,小雅兰就有对象了!!!(类与对象)(下)——“C++”
自从学了C++之后,小雅兰就有对象了!!!(类与对象)(下)——“C++”
|
8天前
|
存储 编译器 C++
自从学了C++之后,小雅兰就有对象了!!!(类与对象)(上)——“C++”
自从学了C++之后,小雅兰就有对象了!!!(类与对象)(上)——“C++”
|
8天前
|
编译器 C++
自从学了C++之后,小雅兰就有对象了!!!(类与对象)(中)——“C++”
自从学了C++之后,小雅兰就有对象了!!!(类与对象)(中)——“C++”
|
1月前
|
存储 编译器 C语言
C++初阶--类与对象(1)
C++初阶--类与对象(1)
|
3月前
|
Serverless 数据安全/隐私保护 C++
第八章:C++中的类与对象介绍
第八章:C++中的类与对象介绍
23 0
|
9月前
|
存储 编译器 对象存储
【C++初阶】类和对象(下)(二)
【C++初阶】类和对象(下)(二)
39 0