面向对象是一种非常有用的编程思想。在整个学习过程中,我的个人理解是把一系列相关的属性和方法封装成一个实体,然后将这个实体作为编程过程中可以用到的工具,这个工具又像我们现实生活中的工具一样具有各种参数和功能。我们通过一组对象互相配合通过沟通完成功能,所以我觉得面向对象就是把严格的命令式的面向过程的思想现实化,形象化的产物。
在这个复习脉络中,我将会按照为什么需要这块知识,这块知识是什么以及这块知识怎么用的逻辑顺序来进行复习,并附上常见的易错点。
所涉及的考点:
类的重载和重写java代码执行顺序继承中构造方法的使用,都继承了哪些东西内部类匿名类多态把接口用作类型,接口回调equals和==引用类型变量对象的向上映射和向下映射java容器java的垃圾回收匿名对象单例模式异常类的层次结构throws和throw区别自定义异常标识符命名规则基本数据类型位数和初始值成员变量和局部变量参数传递
参数传递
java中所有的参数传递都是采用值传递的方式,无论是基本类型变量,还是引用类型变量
实例如下:
public class Test{
static String s1 = "1";
public void change(String s) {
s = s+"2";
System.out.println(s);
}
public static void main(String[] args) {
Test t = new Test();
t.change(s1);
System.out.println(s1);
}
}
分析:引用类型变量作为参数传入函数后,会产生一个副本和原有的引用变量指向相同的对象,如果使用系统提供的改变自身的方法如append()方法,则可以改动,如果对引用类型变量重新赋值,会产生如下图二的效果。
成员变量和局部变量
成员变量会由系统根据类型自动初始化,赋予其一个默认值,而定义在方法体中的局部变量不会自动初始化。
基本数据类型位数
类型 | 位数 | 初始值 |
---|---|---|
boolean | 1 | false |
byte | 8 | 0 |
char | 16 | \u0000 |
short | 16 | 0 |
int | 32 | 0 |
long | 64 | 0L |
类
why 需要一个模版,来定义一类事物的状态和行为
what 由类的标识符(名字),类的属性和方法组成
权限控制问题:
作用域 | 当前类 | 同一package | 子孙类 | 其他package |
---|---|---|---|---|
public | √ | √ | √ | √ |
protected | √ | √ | √ | × |
默认 | √ | √ | × | × |
private | √ | × | × | × |
初始化问题: 类的成员变量会自动进行初始化而方法的局部变量不会
方法的重载: 方法重载要求方法名相同,参数不同,返回类型可以相同也可以不同
方法的重写: 方法重写要求方法名相同,参数相同,返回类型必须相同(重写不能降低访问权限)</