栈(stack)
栈存储的特点是:先进后出
堆(heap)
存放的是类的对象 ;
所有类的对象都是通过new关键字创建
new关键字, 是指告诉JVM , 需要明确的去创建一个新的对象 , 去开辟一块新的堆内存空间:
堆内存与栈内存不同, 优点在于我们创建对象时 , 不必关注堆内存中需要开辟多少存储空间 , 也不需要关注内存占用时长
堆内存中内存的释放是由GC(垃圾回收器)完成的
当栈内存中不存在此对象的引用时,则视其为垃圾 , 等待垃圾回收器回收
多态
父类的引用指向自己的子类对象,父类的引用也可以接收自己的子类对象
多态的好处:大大提高了程序的扩展性
多态的前提:必须是类与类之间有关系(继承或者实现);通常还有一个前提,存在覆盖。
多态的弊端:提高了扩展性,但是只能使用父类的引用访问父类的成员
存在引用数据类型的类型提升,即向上转型。
Object:是所有对象的直接或者间接父类,该类中定义的肯定是所有对象都具备的功能。
equals()方法比较的是对象的地址值。equals()里的参数不确定,所以使用Object,即可多态实现比较。
将一个类定义在另一个类的里面,而里面那个类就称为内部类(内置类、嵌套类)。
内部类访问特点:内部类可以直接访问外部类中的成员,包括私有成员;而外部类要访问内部类中的成员必须要建立内部类的对象。
好处:可以直接访问外部类中的成员(包括私有成员),而不用创建对象。
静态内部类
访问格式:
当内部类定义在外部类的成员位置上,而且非私有,可以在外部其他类中,直接建立内部对象。格式:外部类名.内部类名 变量名 = 外部类对象.内部类对象(Outer.Inner in = new Outer().new Inner())
当内部类在成员位置上,就可以被成员修饰符所修饰。比如,private:将内部类在外部类中进行封装,Static:内部类就具备了静态的特性。当内部类被静态修饰后,只能直接访问外部类中的静态成员了(外部成员也要用static修饰才行)。修饰出现限制了。
只有定义在成员位置上,才能被私有或静态所修饰。
1内部类定义在局部时,不能被成员修饰符修饰;
2可以直接访问外部类中的成员,因为还持有外部类中的引用,但是不可以访问它所在的局部变量,只能访问被final修饰的局部变量
匿名内部类:
1匿名内部类其实就是内部类的简写格式
2定义匿名内部类的前提:内部类必须继承一个类,或者实现接口
3匿名内部类的格式,new 父类或者接口(构造函数,可以往其传参){定义子类的内容}
3匿名内部类就是一个匿名子类对象,可以理解为带内容的对象
异常
异常:程序运行时出现不正常情况。
异常由来:问题也是现实生活中的一个具体事物,也可以通过java的类的形式来进行描述,并封装成对象。异常其实就是java对不正常情况进行描述后的对象体现。
对于问题的划分:一种是严重的问题;一种是非严重的问题。
对于严重的,java通过Error类进行描述。对于Error类问题一般不编写针对性的代码进行处理;对于非严重的问题,java通过Exception类进行描述,对于Exception类的问题可以使用针对性的处理方式进行处理。



