摘要:这篇笔记围绕 Java 面向对象编程的核心概念展开,涵盖四大特征(封装、继承、多态、抽象)、new 操作符与静态方法的区别、封装机制(private / setter / getter)的安全性问题,特别深入讨论了引用类型 getter 在堆内存场景下的风险与防御方式,并以内存图示例直观展示了属性、构造方法和普通方法的内存布局。
一、面向对象基础概念
面向对象的四大特征:封装、继承、多态、抽象
new 操作符的作用是创造对象、开辟新空间
静态方法可以直接通过类进行调用,非静态方法必须通过对象进行调用
二、封装与访问控制
如果变量设为 private 就只能在这个类里面调用,如果想在其他类里面访问这个变量,就只能在这个类里写 public 方法,在外部通过 public 类型方法来更改 private 类型变量
private 这种方法可以防止随意输入错误信息(setter:引用类型不安全(String 等除外),基本类型安全)
如果只提供访问器(getter),外部可以通过 getA() 破坏 private 状态
因为访问器 return 的是私有变量 flag1 在堆中的地址(引用类型)
String 虽然是引用类型但是也是安全的
如果是私密的是基本类型,返回的是值的副本,所以不会被破坏
三、引用类型 getter 的安全性
引用类型的 get 像这样就安全了(因为 for 循环里面是 int 数组是值的传递不是地址传递)
Demo1 中的 flag1 的 flag1[0] 开始设置为 1;
只有 k1 的值改成了 900,另外两个没有变还是 1,因为每次调用 getAA 都会创建一个全新的 flag1new 数组;这三个数组同时存在不同内存里;
四、内存图示例
上面三个代表属性、构造方法、普通方法
下面是画内存图的一个例子
下面是上面代码的内存图所以