静态 static
Java中成员变量按照有无static 分为 类变量 实例变量
静态变量:有static 修饰 属于类 在计算机中只有一份 会被类的全部对象共享
静态变量是属于类的,只需要通过类名就可以调用:类名.静态变量
不能使用this 调用(在java中,this用于引用当前对象,可以在非静态方法中使用,指向正在调用该方法的对象,由于静态方法不属于任何对象,是类级别的方法)
实例变量是属于对象的,需要通过对象才能调用 对象.实例变量
实例变量(对象的变量):无static修饰,属于每个对象
static修饰成员方法:有static修饰的成员方法,属于类 调用 类名.方法
随着类的加载而加载的,不用创建对象 不可以出现this关键字
实例方法 无static修饰的成员方法,属于对象,调用时需要对象调用
需要创建对象才能调用 可以出现this关键字
工具类
一个类中的方法都是静态的,直接类名调用 可以把方法私有化
Static 应用 (代码块)
静态代码块 格式 static{} 特点:类加载时自动执行,由于类只会加载一次,所以静态代码块也只会执行一次
作用:完成类的初始化,例如对类变量的初始化赋值
静态代码块不需要创建对象就能够执行
实例化代码块
格式:{}
特点:每次创建对象时,执行实例代码块,并在构造器前执行
作用:和构造器一样,都是用来完成对象的初始化的,例如“对实例变量进行初始化赋值
每次创建对象之前都会先执行实例化代码
Static 应用 单例设计模式
单例:只有一个实例,无论new几次返回的都是同一个实例
单例模式 - 饿汉式 立即需要吃东西,类加载,就已经实例化了
- 提供一个私有成员变量,类型为当前类,并且需要实例化(唯一次实例化)
- 提供一个私有的无参构造(在类外面不能通过new创建实例)
- 提供一个公共方法,用于获得唯一实例
优点:代码结构简单,容易理解 安全,可以保证最少有一个实例
缺点:不调用的化,实例也在,浪费资源
//单例模式- 懒汉式 类在加载后没有实例化,在需要(第一次使用)的时候进行实例化
- 提供一个私有的无参构造
- 提供一个私有成员变量,成员为当前类
- 提供一个类方法,如果每创建过实例,就new一个实例,再次new类时就返回刚刚创建的实例
优点:延迟加载,需要的时候再加载,节约空间
缺点:不安全,可能会出现多个实例
继承
基本语法:public class 子 extends 父亲
特点:子类能继承父亲的非私有成员(成员变量,成员方法)
每一个子类只能有一个父亲,但可以多层继承
好处:提高代码的复用性
权限修饰符
Public 公共的 private 私有的 protected 受保护的 缺省的(不写修饰符)
权限修饰符是用来限制类的成员(成员变量,成员方法,构造器)
权限修饰符访问范围:
Java 语言只支持单继承,不支持多继承,但是可以多层继承
Object类是所有java所有类的祖宗
方法重写
什么是方法重写:当子类觉得父类方法不好用,或者无法满足父类需求时,子类可以重写一个方法名称,参数列表一样的方法,去覆盖父类的方法这就是方法重写
重写注意事项
- 子类重写父类方法时,访问权限必须大于或者等于父类的方法的权限
- 重写方法的返回值,必须小于或等于父类方法的返回值的范围
- 私有方法,静态方法不能被重写,重写会报错
子类中访问成员的特点
原则 在子类中访问其他成员,依据就近原则
子类中构造器的特点
this:在当前类的构造方法,调用当前类的另一个构造方法,如this(参数列表)
super:在当前的构造方法,调用当前类父类的构造方法 super(参数列表)
注意:
使用this/super 调用构造方法,必须放在构造方法的第一行
如果存在父子类,构造方法的第一行默认super()
子类访问构造器的应用场景
子类不想使用默认的super() 方法调用父类构造器,还可以手动使用super(参数) 调用父类有参构造器
会顶掉默认的super()