转载自https://github.com/Snailclimb/JavaGuide (添加小部分笔记)感谢作者!
面向对象基础#
区别
- 面向过程把解决问题的过程拆成一个个方法,通过一个个方法的执行解决问题。
- 面向对象会先抽象出对象,然后用对象执行方法的方式解决问题。
- 面向对象编程 易维护、易复用、易扩展
对象实例与对象引用的不同
new 运算符,new 创建对象实例(对象实例在堆内存中),对象引用指向对象实例(对象引用存放在栈内存中)。一个对象引用可以指向 0 个或 1 个对象(一根绳子可以不系气球,也可以系一个气球);一个对象可以有 n 个引用指向它(可以用 n 条绳子系住一个气球)。
对象的相等一般比较的是内存中存放的内容是否相等;引用相等一般比较的是他们指向的内存地址是否相等
如果一个类没有声明构造方法,该程序能正确执行吗? 如果我们自己添加了类的构造方法(无论是否有参),Java 就不会再添加默认的无参数的构造方法了
- 构造方法特点:名字与类名相同;没有返回值但不能用void声明构造函数;生成类的对象时自动执行
- 构造方法不能重写(override),但能重载 (overload)
面向对象三大特征
封装
把一个对象的状态信息(属性)隐藏在对象内部,不允许直接访问,但提供可以被外界访问的方法来操作属性public class Student { private int id;//id属性私有化 private String name;//name属性私有化 //获取id的方法 public int getId() { return id; } //设置id的方法 public void setId(int id) { this.id = id; } //获取name的方法 public String getName() { return name; } //设置name的方法 public void setName(String name) { this.name = name; } }继承
不通类型的对象,相互之间有一定数量的共同点,同时每个对象定义了额外的特性使得他们与众不同。继承是使用已存在的类的定义作为基础建立新类的技术








如上图,当方法为静态方法时,局部变量表0位置存储的是实参第1个数






clone之后有默认的别名,且已经初始化了本地库


发送给lhc


