今天学习了部分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());
}
}