java内存---java内存垃圾回收----属性封装-----继承

3/8/2017来源:ASP.NET技巧人气:1299

今天学习了部分java课程,以下为今天课堂的总结:

   java 内存:

两种内存存在形式:

栈内存-------------------------------------------堆内存

【基本数据类型】                                     开辟的数组空间

【首地址】                                                  对象空间【成员变量,成员方法】

java垃圾回收(Gc):

jvm(java 虚拟机)在执行程序的过程中,会启动垃圾回收线程,该程序会自动扫描内存中数据,判断是否为垃圾数据;如果是垃圾数据,将会回收该数据释放内存空间,可以防止内存溢出。

内存溢出:内存占满了,不能写入新的数据,导致程序不能继续执行。

注意:垃圾回收不需要程序员处理,同时程序员不能干预垃圾回收过程,但是程序用完的数据,需要断开对其的引用。

面向对象的三大特点:封装,继承,多态

封装的目的:程序的安全性和完整性

封装:将类中的成员变量、成员方法、构造器隐藏,不让外部的其他类访问

属性封装:1.将属性设为PRivate

                     2.提供公共的getter和setter方法

子类可以继承同包下父类所有的非私有化属性和方法;

子类在非同包下只能继承公共的和受保护的属性和方法。

子类不能继承父类的构造器,但是可以调用父类的构造器。

继承:当多个类出现相同的属性和方法时,我们将这些属性和方法抽取出来放入一个类中,让多个类共享这个类中的属性和方法。其中,这个类我们叫做父类,多个类我们叫做子类。

作用: 减少类之间重复代码的定义,提高代码的重用性

继承的语法:

【修饰符】  class 子类名 extends 父类{}

继承的范围:  子类只能继承父类中的成员变量和成员方法,不能继承构造器

    1.同包下,子类继承父类的非私有的属性和方法

     2.不同包下,子类继承父类的公共的和受保护的属性和方法

子类的扩展:

子类继承父类的属性和方法,同时还可以可以扩展自己特有的属性和方法。

继承的特点:  java 单继承,不可多继承,但是允许类之间多层继承关系

方法重写的前提:1.继承  2.子类修饰符范围大于父类  3.返回值类型、方法名、参数相同

关键字 super

super代表父类对象

1.使用方法;super.成员变量/成员方法

如果子类的属性和方法覆盖了父类的属性和方法时,在子类中,直接访问属性和方法,访问的时子类的属性和方法,要想访问父类的属性和方法需要使用super关键字

在子类实例化的时候,系统会先实例父类,然后再实例化子类

系统在实例化父类时,默认调用父类的无参构造器

2.super(参数) 可以用于调用父类的有参构造器,在子类构造器中使用supper来指定

多态:

多态的实现情况:1.继承 2.方法重写 3.向上转型

向上转型:【子对象】由子类型转为【父类型】

子对象向上转型之后,只能访问继承的属性和方法,如果该方法被重写,则访问重写之后的方法

多态的作用:减少代码量,减少代码的耦合性

方法重写的概念:子类对继承的方法进行重新定义的现象

方法重写的例子:

package _0303; public class Override1 { int a,b,c; public void test1(){ System.out.println("Override1---------------test1"); } public void test1(int i){ System.out.println("Override1----"+i+"-------test1"); } }

package _0303; public class Override2 extends Override1{ public void test1(){ System.out.println("Override2---------------test1"); } }

多态和继承的例子:

package duotai; public class C1 extends P{     @Override     public void test1() {     // TODO Auto-generated method stub     System.out.println("C1 11111111");     } }

package duotai; public class C2 extends P{ public void test1(){ System.out.println("C2   2222222"); } }

package duotai; public class P { public void test1(){ System.out.println("test1p111111"); } public void test2(){ System.out.println("test2p111111"); } }

package duotai; public class Test1 {      private void test(P p) {          p.test1();         }      public static void main(String[] args) { Test1 t1 = new Test1(); t1.test(new P()); t1.test(new C1()); t1.test(new C2()); } }