static 关键字
static : adj. 静态的
static 可以修饰成员变量和成员方法;
static 修饰的成员具备的特点:
1. 被static修饰的成员被所有对象共享
2. 被static修饰的成员能被类名直接调用
3. 被static修饰的成员优先于对象加载的
4. 被static修饰的成员随着类的加载而加载的
静态成员内存图

静态成员的访问问题
| 非静态成员变量 | 非静态成员方法 | 静态成员变量 | 静态成员方法 |
---|
非静态成员方法 | √ | √ | √ | √ |
静态成员方法 | X | X | √ | √ |
工具类的自定义
工具类 : Arrays,Math,System,Collections....
工具类的编写步骤:
1. 定义一个类,名称 XxxxUtils --> Xxxx操作的事物
2. 私有无参构造方法,并不提供其他任何构造方法 -> 不允许程序员创建对象
3. 把所有的成员变量和成员方法都static修饰
继承
继承 : 继承在Java中表示的是 类与类之间的关系 (类和类之间只有继承关系)
继承特性中最重要的几个特点:
1. 子类继承父类可以使用父类所有的非私有的成员 -> 父爱如山
2. 子类要加载优先加载父类
3. 一个子类只可以有一个父类(Java继承的单一继承)
一个父类可以有多个子类;
父类还可以有自己的父类(多层继承)
4. 父类对象不可以使用子类中的成员 -> 父亲是渣男
继承的格式
继承的格式 是定义在子类的类声明上;
关键字 : extends
格式:
public class 父类名 {
}
public class 子类名 extends 父类名{
}
Object : 超类,根类,基类
是所有类直接或者间接的父类;
继承关系下成员访问的特点
成员变量的访问特点
继承关系下成员变量的访问特点: 就近原则
1. 在父类中访问 : 只能访问父类中有的成员变量,子类的访问不到
2. 在子类中访问 : 可以访问子类自己的和父类所有非私有的成员
特点: 遵循变量访问的就近原则
局部位置 < 本类成员 < 本类父类成员
this: 打破局部的约束,强制访问本类成员位置上的变量
super:打破本类成员的约束,强制访问本类父类成员位置上的变量
3. 在第三方类中访问 : 子类对象只能访问父类所有非私有的成员和自己本类中的成员
成员方法的访问特点
继承关系下成员方法的访问特点: 真正对象是哪个,就调用哪个对象的方法
1. 在父类中访问: 父类不能访问子类成员
2. 在子类中访问: 子类可以使用父类所有非私有的成员
若想强制访问本类父类同名方法,需要在方法调用的前面加super : super.方法名();
3. 在第三方类中访问:
子类调用和父类同名的方法时,优先调用子类自己的
构造方法的访问特点
子类对象要加载优先加载父类!!!
1. 每一个构造方法的第一句都隐藏着 super();
super(): 调用父类的无参构造
2. super()类似语句必须是构造方法的第一句有效代码
3. 一个构造方法内只可以使用一次super()类似代码
4. 除了有super()之外还有super(实参),this(),this(实参)
super():调用本类父类无参构造
super(实参): 调用本类父类有参构造
this():调用本类的无参构造
this(实参):调用本类的有参构造
5. 如果说你使用了 super(实参) ,this() ,this(实参)中的任何一个,默认赠送的super()就不送
6. 在子类的构造方法中调用其他构造方法,必须有一个构造中是去加载父类!!
方法的重写 Override
为什么有方法的重写:
当父类行为的方法体不能满足子类的使用,可以在子类中重写父类的方法,覆盖父类方法的方法体;
方法重写的特点:
1. 必须有继承/实现关系
2. 子类方法和父类方法的声明完全一致(99.99%)
方法名必须一致
形参列表必须一致
3. 方法体可以不一样
------------
重写中子类方法可以不一样的东西:
1. 权限修饰符 : 子类的重写方法权限修饰符必须大于等于父类的方法
public > protected > 不写 > private
2. 返回值类型
void : 必须一样
基本数据类型 : 必须一样
引用数据类型 : 子类重写方法的返回值类型必须是父类方法的子类或者同类
Integer < Number < Object
注解: @Override 可以用来约束重写方法的格式
加在子类重写方法声明上
static 修饰的方法没有重写的概念!
this 和 super
this : 本类对象的引用
哪个对象调用含有this的方法,this就代表那个对象 --> 对象调方法: 对象照镜子,镜子里是谁this就是谁
super : 本类父类对象的引用
哪个对象调用含有super的方法,super就代表那个对象的某个父类对象 -> 对象调方法 : 对象照镜子,镜子里出现的是此对象的某个父类对象,而这个父类对象就是super
-------------------------以上是关于super和this关键字的理解---------------------------
this.变量 : 打破局部约束,强制访问本类成员位置的变量
this.方法(实际参数) : 调用本类成员位置的方法 -> 不会写!!所有的方法都是成员方法
this() : 调用本类的无参构造方法
this(实际参数) : 调用本类的有参构造方法
super.变量 : 打破本类成员的约束,强制访问本类父类成员位置上的变量
super.方法名(实际参数) : 调用本类父类的成员方法 -> 会用!!
super() : 调用本类父类的无参构造方法 -> 构造方法的默认第一句代码
super(实际参数) : 调用本类父类的有参构造方法
九阳神功
你只要看到了有对象调,就可以使用公式;
第一式 : 只要看到了对象调,找到对象创建的位置(观察对象创建的语句)
第二式 : 看对象在调什么:
对象调属性(成员变量):
对象调方法(成员方法):
对象调静态成员(静态成员变量和静态成员方法):
第三式 :
对象调属性(成员变量): 编译看左边,运行看左边;
对象调方法(成员方法): 编译看左边,运行看右边;
对象调静态成员(静态成员变量和静态成员方法): 编译看左边,运行看左边;
继承思想的好处和弊端
继承的好处:
子类往父类看 : 抽取共性到父类中,提高代码的复用性
父类往子类看 : 子类父类后,可能功能得到拓展
继承的弊端:
内聚 : 独立完成功能的能力
耦合 : 和别人的联系和关系 -> 依赖关系
继承缺提高了代码的耦合性!
继承的利大于弊!!有继承果断用!!