12.什么时候将变量定义为成员变量
这个变量可以描述这个类的具体属性(现实具体事务的属性);如果不能描述这个类的具体属性,优先定义局部变量.
13.类的初始化过程
Student s = new Student();完成了那些事情
(1)在栈内存中开辟空间Student s,变量s开辟
(2)new Student()在堆内存中申请空间
(3)申请空间的同时对成员变量进行默认初始化
(4)默认初始化与申请空间完毕后,产生堆内存空间地址
(5)通过构造方法初始化将堆内存空间地址值赋给栈内存的变量s
(6)栈内存的变量s指向堆内存地址
(7)当对象整个完毕之后,等待垃圾回收器空闲的时候回收不用的对象.
14.继承:将多个类的共性内容抽取出来,放在一个独立类中,让这个独立类和这多个类产生一种关系.
格式:
class 子类名 extends 父类名{}
继承的好处:
(1)提高了代码的复用性
(2)提高了代码的维护性
(3)继承是多态的前提
继承的弊端:继承存在耦合性
开发的原则:低耦合,高内聚.
耦合:类与类之间的关系;低耦合:关系越简单越好
内聚:指的是某件事的执行能力;高内聚:一个类能解决尽量使用一个类完成.
继承的特点
(1)类与类的继承关系只支持单继承
(2)虽然类与类之间只能单继承,都是可以多层继承.
15.代码块
分类:
(1)局部代码块({}):在方法定义中定义
作用:限定局部变量的生命周期
(2)构造代码块({}):在构造方法之前,类的成员的位置
特点:在执行构造方法之前,如果存在构造代码块,优先执行构造代码块,然后才是构造方法
(3)静态代码块(static{}):
特点:随着类的加载而加载
优先级:静态代码块>构造代码块>构造方法
16.static关键字
static(静态修饰符):共享,共用,可以被多个对象共用.
特点:
(1)被静态修饰的变量或方法,都是随着类的加载而加载.
(2)优先于对象存在,不能和this关键字共存;被静态修饰的优先进入了static内存区,this则是需要等待对象被创建完毕.
(3)共享,共用,可以被共用.
静态修饰的变量或方法的访问:类名访问
静态的成员变量:
类名.变量名;
静态的成员方法:
类名.方法名();
使用静态的注意事项:静态永远只能访问静态.
(1)非静态的成员方法,可以访问静态的成员变量或非静态的成员变量.
(2)静态的成员方法只能访问静态的方法或者静态的成员变量.
17.静态变量和成员变量的区别
(1)数据存储区域:
静态变量:存储在方法区中的共享内存区域中静态区域中(static区域)
成员变量:堆内存中
(2)别名不同(称谓)
静态变量:与类有关系------>类成员
成员变量:对象的特有属性------->实例(对象)变量
(3)生命周期不同:
静态变量:随着类的加载而加载,随着类的加载完毕,进入static区域中消失
成员变量:随着对象的创建而存在,随着对象的创造完毕等待垃圾回收器空闲的时候回收
(4)调用方式不同:
静态变量:既可以使用对象名访问,也可以使用类名访问(建议使用)
成员变量:只能使用对象名来访问
继承的注意事项:
(1)因为私有成员只能在本类中访问,外界不能访问,所以子类继承父类是只能继承父类非私有的成员,但是私有的成员可以间接通过公共访问方法访问.
(2)子类继承父类,不能继承父类的构造方法,但是可以通过super关键字访问.
继承中成员变量的访问:
(1)子类的成员变量名称与父类的成员变量名称不一致时:分别调用.
(2)子类的成员变量名称与父类的成员变量的名称一致时:遵循就近原则.
a.先在子类的局部位置找,如果存在,使用,如果不存在------>b
b.在子类的成员位置中找,如果存在,使用,如果不存在------>c
c.在父类的成员位置中找,如果存在使用,如果不存在则报错.
继承中构造方法的访问:子类通过super关键字访问父类的构造方法.
(1)子类中所有的构造方法都要默认访问父类的无参构造方法(所有子类的构造方法中的第一句话是:super();访问父类的无参构造方法)
(2)在继承关系中,子类的构造方法可能会用到父类的数据,所以需要让父类初始化(构造方法)
(3)接着子类在进行初始化
如果在继承中,只提供有参构造方法,子类会出现什么现象?如何解决?
子类会全部报错.
报错原因:
在类中系统会默认提供一个无参构造方法,但是如果为类提供了一个有参构造方法,则系统不会提供无参构造方法;而子类的构造方法都会默认访问父类中的无参构造方法.
解决方案:
(1)给父类提供一个无参构造方法
(2)通过super()让子类中的所有构造方法直接访问父类的有参构造方法.
(3)先通过this()让子类中的有参构造方法访问本类中的无参构造方法,然后通过super()让本类中的无参构造方法访问父类的有参构造方法,让其初始化.
18.super关键字
super:代表父类的空间标识(父类对象的地址值引用)
19.this与super的区别
this:代表当前类的对象的地址值引用
super:代表父类的空间标识(父类对象的地址值引用)
访问成员变量(属性):
this:访问当前类的成员变量;格式:this.变量名
super:访问父类的成员变量;格式:super.变量名
访问构造方法:
this:访问当前类的构造方法;格式:this()
super:访问父类的构造方法;格式:super()
访问成员方法:
this:访问当前类的成员方法;格式:this.方法名()
super:访问父类的成员方法;格式:super.方法名()
20.方法重写
方法重写(覆盖/复写):子类继承父类的时候,子类的出现了和父类一模一样的方法声明
目的:使用子类的功能将父类的功能覆盖掉.
21.final关键字
final:状态修饰符,最终的,无法更改的.
特点:
(1)可以修饰类,该类不能继承,它不能在进行扩展.
(2)可以修饰变量,此时这个变量就成了一个常量:自定义常量.
(3)可以修饰成员方法,但是被修饰之后这个成员方法就不能被重写了.
应用场景:自定义常量居多(与static结合一块使用)
final修饰的基本数据类型与修饰引用数据类型的区别:
修饰基本数据类型:编译时期常量(public static final 基本数据类型 变量名 = 常量值 )
基本数据类型的值不能在改变,只能赋值一次,不能在赋值了;此时JVM只检查语法,不需要加载.
修饰应用数据类型:运行时期常量
应用数据的空间地址值不能在改变,但是里面的成员变量(没有加入final)依然可以访问;此时JVM需要加载类



