多关注语法点的基本作用
多进行思考和记忆、练习
要自信
static关键字;设计模式:单例(一个类只产生一个对象);面对对象三大特征之二:继承;
目录
static静态关键字
静态,修饰成员变量和成员方法,被修饰的成员变量只在内存中只存储一份,可以被共享访问、修改
static修饰成员变量
类名 静态成员变量 (推荐)
对象(new) 静态成员变量 (不推荐)
实例成员变量:无static修饰,属于每个对象的,必须用对象名访问
同一个类中访问静态成员变量类名可以省略不写
如
简单来说就是当用static修饰成员变量时可以直接用类名来访问,对象名虽然也可以但是不推荐。而不用static修饰的成员变量则不能使用类名来访问会报错,必须使用对象名(即先new一个新的对象)来访问
静态成员变量:有static修饰,属于类,加载一次可以被共享访问,推荐用类名访问
实例成员变量:无static修饰,属于对象,用对象名访问
定义好的静态成员变量会在堆内存开发出一块区域存储成员变量,而实例成员变量并没有,因此必须要用对象名才能访问实实例成员变量
static修饰成员方法
静态成员方法:有static修饰,属于类,推荐用类名访问,也可以用对象访问
实例成员方法:无static修饰,属于对象,只能用对象名访问
使用场景:
1、 表示对象自己的行为的,且方法中需要访问实例成员的,则该方法必须申明成实例方法
即该方法需要用到实例成员时就申明成实例方法
2、如果该方法是以执行一个共用功能为目的,则可以申明成静态方法
即不用实例成员
注意事项
1、静态方法可以访问静态成员,不能直接访问实例成员(用对象访问)
2、实例成员可以访问静态成员,也可以访问实例成员
3、静态方法中不可以出现this关键词
static应用知识
工具类
类中都是一些静态方法,每个方法完成一个共同的功能,用来给系统开发人员共同使用
为什么不用实例方法:实例方法需要创建对象,浪费内存
用静态方法可以直接用类名调用(工具类无需创建对象,建议将工具类的构造器进行私有化private)
一次编写处处可用,提高代码的复用性
代码块
属于类,类中方法外
在Java下,{}围起来的就是代码块
静态代码块:
static{},通过static修饰,属于类,与类一起优先加载,自动触发执行
作用:初始化静态资源
构造代码块(实例代码块)(了解,见得少):
没有static修饰,属于对象。每次创建对象,调用构造器执行时,都会执行该代码块中的代码,并且在构造器执行前执行。(实例代码块:每次构建对象时,都会触发一次)
作用:初始化实例资源
单例
设计模式:开发中遇到的各种问题通常有n种解法,但其中的最优解会被人们总结出来,称之为设计模式
单例模式:
该模式保证这个类只有一个实例,即一个类只能选择创建一个对象
1、饿汉单例模式
饿汉单例是在获取对象前已经先创建好了一个对象;
这个对象只能是一个,所以定义静态变量来记住;
速度快,再来拿对象前对象就已经准备好了
* 定义一个类,把构造器私有
* 定义一个静态变量存储一个对象
2、懒汉单例模式
定义一个静态成员变量来存储一个对象,只加载一次,只有一份
需要时才初始化对象
* 定义一个类,把构造器私有
* 定义一个静态变量存储一个对象
* 提供一个返回单例的方法
继承
子类可以直接使用父类的方法
子类能得到父类的属性和行为
Student extends People Student是子类,People是父类
子类们的共同属性、方法可以放在父类中,子类独有的属性和行为放在各个子类中
继承的特点
1、子类可以继承父类的属性和方法,但不能继承父类的构造器
子类有自己的构造器,子类可以继承父类的私有成员
子类不能继承父类的私有成员?可以,只是不能直接访问
子类可以继承父类的静态成员?可以使用,但这不算继承,而是一种共享
2、Java是单继承模式:一个类只能继承一个直接父类
3、Java不支持多继承、但是支持多层继承
即A可以继承B,B可以继承C,则A也可以用C里面的东西
4、Java中所有的类都是Object类的子类
Object类是祖宗类
继承后:成员变量、成员方法的访问特点
就近原则
先子类局部范围找;
然后子类成员范围找;(还可以用this关键字)
然后父类成员范围找,如果父类范围还没找到就会报错(还可以用super关键字)
super.父类成员变量/父类成员方法
继承后:方法重写
在继承体系中,子类出现和父类一模一样的方法申明,就成子类这个方法是重写的方法
方法重写的应用场景
1、当子类需要父类的功能,但父类的功能不完全满足自己的需求时
2、子类可以重写父类中的方法
@Override 重写校验注解,不正确会被报错;提高程序可读性
重写方法的名称、形参列表与被重写方法必须一样
私有方法不能被重写
子类重写父类方法时,访问权限必须大于或等于父类(缺省<propected<public)
子类不能重写父类的静态方法,会报错
继承后:子类构造器的特点
默认先访问父类无参构造器,再访问子类的构造器(有参/无参)
调用父类的构造器:super();
继承后:子类构造器访问父类有参构造器
作用:初始化继承自父类的数据
如果子类没有无参构造器,父类没有无参构造器不会报错
但如果子类有无参构造器,父类没有就会报错
子类调用父类有参构造器:super(......);
this和super的使用总结
this:代表本类对象的引用
this.成员变量 访问本类成员变量 this.成员方法(......) 访问本类成员方法
this(......) 访问本类构造器
super:代表父类存储空间的标识
super.成员变量 访问父类成员变量 super.成员方法(......) 访问父类成员方法
super(......) 访问父类构造器
super(......); 必须放第一行 this(....) 也必须放在第一行
必须先初始化父类,再初始化自己