内存管理 继承 super

回顾:
1.方法的签名
:方法名+参数列表
2.方法的重载(Overload):
  1)发生在一个类中,方法名称相同,参数列表不同
  2)编译器根据签名自动绑定调用不同的方法
3.构造方法:构造器、构建器、构造函数
  1)常常用于给成员变量赋初值
  2)与类同名,没有返回值类型
  3)创建对象时被自动调用
  4)若不写则默认一个无参的,若写了则不再默认提供
  5)可以重载
4.this:指代当前对象,哪个对象调指的就是哪个对象
       只能用在方法中,方法中访问成员变量之前默认有个this.
  this的用法:
    this.成员变量名------------访问成员变量
    this.方法名()--------------调用方法
    this()---------------------调用构造方法
5.引用类型数组
    Cell[] cells = new Cell[4]; //创建Cell数组对象
    cells[0] = new Cell(2,5); //创建Cell对象
    int[][] arr = new int[3][];
    arr[0] = new int[2];
    int[][] arr = new int[3][4];


笔记:
1.内存管理:由JVM来管理

  1)堆:
    1.1)存储所有new出来的对象(包括成员变量)
 1.2)没有任何引用指向的对象就是垃圾,
     垃圾回收器(GC)不定时到内存中清扫垃圾,
     回收过程是透明的(看不到的),并不一定发现垃圾就马上回收,
  调用System.gc()建议虚拟机尽快调度gc来回收垃圾
                                   垃圾回收器(GC)----不定时的清扫垃圾
                                   System.gc()
 1.3)内存泄漏:不再使用的内存没有被及时的回收
              建议:对象不再使用时及时将引用设置为null
 1.4)成员变量的生命周期:
       创建对象时存在堆中,对象被垃圾回收器回收时一并消失
  2)栈:

    2.1)存储正在调用的方法中的所有局部变量(包括参数)
 2.2)调用方法时会为该方法在栈中分配一块对应的栈帧,
        栈帧中包含方法中的所有局部变量(包括参数),
  方法调用结束时,栈帧被消除,局部变量随之消失
 2.3)局部变量的生命周期:
       调用方法时存在栈中,方法结束栈帧被清除时一并消失
 成员变量:
1)类中,方法外
2)创建对象时存在堆中,对象被回收时一并消失
3)有默认值,可以不显式初始化
局部变量:
1)方法中
2)方法被调用时存在栈中,方法结束栈帧被清除时一并消失
3)没有默认值,必须显式初始化
eg:
Aoo o = new Aoo(); //a=0;
o.show(5); //int b=5;
class Aoo{
  int a;
  void show(int b){
    int c;
 System.out.println(a); //正确
 System.out.println(b);
 System.out.println(c); //编译错误
  }
}
  3)方法区:

    3.1)存储.class字节码文件(包括方法)
    3.2)方法只有一份,通过this来区分具体的对象
每个对象有自己的row和col
Cell c = new Cell();
c.row = 2;
c.drop(); ----------c.row=3
Cell cc = new Cell();
cc.row = 4;
cc.drop(); ---------cc.row=5
结果正确,意味着在drop()正确的区分出来到底是c还是cc了
this只能用在方法中
2.继承:
/*class Person{ //父类
  String name;
  int age;
  String address;
  void eat(){}
  void sleep(){}
}
class Student extends Person{ //子类
  String className;
  void study(){}
}
class Teacher extends Person{ //子类
  double salary;
  void teach(){}
}
class Doctor extends Person{ //子类
  String level;
  void cut(){}
}*/

  1)作用:代码的复用
  2)通过extends来实现继承
  3)父类/基类:所有子类所共有的属性和行为
    子类/派生类:子类所特有的属性的行为
  4)子类继承父类后,子类具有: 子类的+父类的
  5)一个父类可以有多个子类,
    一个子类只能继承一个父类-----单一继承
  6)继承具有传递性
  7)java规定:构造子类之前必须先构造父类
    子类构造方法中若没有调用父类的构造方法,
 则默认super()调父类的无参构造,
 若子类构造方法中调用了父类的构造方法,则不再默认提供
    super()调父类构造必须位于子类构造方法的第一句
3.super:指代当前对象的父类对象
  super的用法:
   1)super.成员变量名----------访问父类的成员变量
   2)super.方法名()------------调用父类的方法
   3)super()-------------------调用父类的构造方法
//super的演示
public class SuperDemo {
	public static void main(String[] args) {
		Boo o = new Boo();
	}
}

class Coo{
	Coo(int n){
		
	}
}
class Doo extends Coo{
	Doo(){
		super(2);
	}
}








class Aoo{
	Aoo(){
		System.out.println("父类构造方法");
	}
}
class Boo extends Aoo{
	Boo(){
		super(); //默认---调父类无参构造
		System.out.println("子类构造方法");
	}
}


4.向上造型:有两种,自己造型或者是系统帮助造型
  1)父类型的引用指向子类的对象
  2)能点出来什么,看引用的类型
package oo.day03;
//向上造型
public class UpDemo {
	public static void main(String[] args) {
		Eoo o1 = new Eoo();
		o1.e = 1;
		o1.show();
		//o1.f = 2; //编译错误,父不能访问子的
		
		Foo o2 = new Foo();
		o2.f = 1;
		o2.test();
		o2.e = 2; //正确,子可以访问父的
		o2.show();
		
		//能点出来什么,看引用的类型
		Eoo o3 = new Foo(); //向上造型
		o3.e = 1;
		o3.show();
		//o3.f = 2; //编译错误,Eoo型的引用不能访问Foo的成员	
	}
}

class Eoo{
	int e;
	void show(){}
}
class Foo extends Eoo{
	int f;
	void test(){}
}
1)继承要符合is a的关系
2)问:子类可以继承父类的构造方法吗?
  答:不能,因为父类的构造方法是被子类调用的


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值