阶段复习
复习成果:
复习内容:面向对象的内存分析
知识要点:栈的特点:1:栈描述的是方法执行的内存模型。每个方法被调用都会创建一个栈帧(存储局部变量、操作数、方法出口等)。
2:JVM为每个线程提供一个栈,用于存放该线程执行方法的信息(实际参数,局部变量等)。
3:栈属于线程独有,不能实现线程间的共享!
4:栈的存储特性是:”先进后出,后进先出”。
5:栈是由系统自动分配,速度快,栈是一个连续的内存空间。
堆的特点:1:堆用来存储创建好的对象和数组(数组也是对象)。
2:JVM只有一个堆,被所有线程共享
3:堆是一个不连续的内存空间,分配灵活,速度慢
方法区的特点:1:JVM只有一个方法区,被所有线程共享
2:方法区实际也是堆,只是用于存储类,常量相关的信息。
3:用来存放程序中永远是不变或唯一的内容。(来信息【class对象】、静态变量、字符串常量等)
复习内容:抽象方法和抽象类
知识要点:抽象方法:使用abstract修饰的方法,没有方法体,只有声明。定义的是一种“规范”,就是告诉子类必须要给抽象方法提供具体的实现。
抽象类:包含抽象方法的类就是抽象类。通过abstract方法定义规范,然后要求子类必须定义具体实现。通过抽象类,我们就可以做到严格限制子类的设计,使子类之间更加通用。
抽象类的使用要点:1:有抽象方法的类只能定义成抽象类
2:抽象类不能实例化,即不能用new来实例化抽象类。
3:抽象类可以包含属性。方法。构造方法。但是构造方法不能用来new实例,只能用来被子类调用。
4:抽象类只能用来被继承。
5:抽象方法必须被子类实现。
复习内容:多态以及对象转型
知识要点:多态:多态指的是同一个方法调用,由于对象的不同可能有不同的行为。现实生活中,同一个方法,具体实现会完全不同。
多态的要点:
1:多态是方法的多态,不是属性的多态(多态与属性无关)。
2:多态的存在要有3个必要条件:继承,方法重写,父类引用指向子类对象。
3:父类引用指向子类对象后,用该父类引用调用子类重写的方法,此时多态就出现了。
多态的利弊:多态的主要优势是提高了代码的可扩展性,符合开闭原则。但是多态也有弊端,就是无法调用子类特有的功能。
自动类型转换:父类引用指向子类对象,我们称这个过程为向上转型,属于自动类型转换。
强制类型转换:向上转型后的父类引用变量只能调用它编译类型的方法,不能调用它运行时类型的方法,这时候需要进行类型的强制转换,称之为向下转型。
注意点:在向下转型过程中,必须将引用变量转成真实的子类类型(运行时类型),否则会出现类型转换异常ClassCastException.为了避免这种异常,可以使用instanceof运算符进行判断。
开闭原则:就是让设计的系统对扩展开放,对修改封闭。
Instanceof:instanceof是二元运算符,左边是对象,右边是类;当对象是右面类或子类所创建对象时,返回true;否则返回false。
预习成果:
预习内容:容器:泛型的概念以及自定义泛型的基本语法
知识要点:容器:用来容纳和管理数据。
泛型:JDK1.5后增加的,可以帮助建立类型安全的集合。
泛型的优势:在使用了泛型的集合中,遍历时不必进行强制类型转换。JDK提供了支持泛型的编译器,将运行时的类型检查提前到了编译时执行,提高了代码可读性和安全性。
泛型的本质:就是“数据类型的参数化”。可以将泛型理解为数据类型的一个占位符(形式参数),即告诉编译器,在调用泛型时必须传入实际类型。
泛型类的声明:
class MyCollection {// E:表示泛型;
Object[] objs = new Object[5];
public E get(int index) {// E:表示泛型;
return (E) objs[index];
}
public void set(E e, int index) {// E:表示泛型;
objs[index] = e;
}
}
其中泛型E像一个占位符一样表示“未知的某个数据类型”,在真正调用的时候传入这个“数据类型”。
泛型类的应用:
public class TestGenerics {
public static void main(String[] args) {
// 这里的”String”就是实际传入的数据类型;
MyCollection mc = new MyCollection();
mc.set("aaa", 0);
mc.set("bbb", 1);
String str = mc.get(1); //加了泛型,直接返回String类型,不用强制转换;
System.out.println(str);
}
}
预习内容:Collection接口
知识要点:Collection:它表示一组对象,是集中,收集的意思。
Collection接口的两个子接口是List,Set接口。
Collection接口中定义的方法:
由于List、Set是Collection的子接口,意味着所有List、Set的实现类都有上面的方法.