Static关键字
01-static介绍
static 是静态的意思,可以修饰成员变量,也可以修饰成员方法,被其修饰的成员只在内存中 [只存储一份],可以被 [共享] 访问、修改。
02-static修饰成员变量
特点 :
- 被 static 修饰的成员变量, 被类的所有对象所共享
- 多了一种调用方式, 可以通过类名.进行调用
- 随着类的加载而加载, 优先于对象存在
03-static修饰成员变量内存图
04-static修饰成员方法
方法的分类
- 静态方法
- 实例方法(非static的)
调用方式 :
- 静态方法
A : 类名调用 (推荐)
B : 对象调用 (不推荐) - 实例方法(非static的)
A : 只能对象调用
05-工具类
- 介绍:对于一些应用程序中多次需要用到的功能,可以将这些功能封装成静态方法,放在一个类中,这个类就是工具类。
- 好处:一是方便调用,二是提高了代码复用
- 要求: 建议将工具类的构造器私有,不让工具类对外产生对象。
练习:
需求:在实际开发中,经常会遇到一些数组使用的工具类。请按照如下要求编写一个数组的工具类:ArraysUtils
请在ArraysUtils中提供一个工具类方法toString,用于返回整数数组的内容,返回的字符串格式如:[10, 20, 50, 34, 100](只考虑整数数组,且只考虑一维数组)
经常需要统计平均值,平均值为去掉最低分和最高分后的分值,请提供这样一个工具方法getAerage,用于返回平均分。(只考虑浮点型数组,且只考虑一维数组)
定义一个测试类TestDemo,调用该工具类的工具方法,并返回结果。
面向对象-继承
01-继承介绍
- 继承 : 让类与类之间产生关系, 子父类关系, 当建立起子父类关系后, 子类就可以直接使用父类中, 非私有的成员 (成员变量, 成员方法)
- 使用继承前 :
- 使用继承后 :
- 继承的优缺点
02-继承中成员变量的访问特点
- 思考 : 子父类中, 如果出现了重名的成员变量, 会优先使用谁的 ?
- 根据就近原则, 优先使用子类的
- 思考 : 如果非要使用父类的成员, 使用那个关键字进行区分 ?
- super
03-继承中成员方法的访问特点
- 思考 : 当子父类中, 出现了相同的成员方法 (方法名, 参数, 返回值), 在创建子类对象后, 调用方法, 会调用谁的逻辑?
- 子类方法逻辑, 但这不是就近原则, 是子类的方法对父类方法进行了重写
04-方法重写-Override
05-权限修饰符
protected以后开发中基本不用,调用很麻烦,以后开发要么使用private,要么public
06-Java中继承的特点
- Java只支持单继承,不支持多继承,但支持多层继承
- 单继承:一个类,只能有一个父类
- 多层继承:子类可以继承父类,父类可以继续继承爷爷类
05-继承中构造方法的访问特点
- 问题 : 构造方法能被继承吗 ?
- 不可以, 因为构造方法要求方法名和类名保持一致
- 问题 : 子类初始化之前, 是否需要完成父类的初始化 ?
- 一定要!因为子类在初始化的过程中,很有可能会使用到父类的数据
因此,子类在初始化之前,一定要先完成父类数据的初始化. - 问题:子类是如何完成父类数据初始化的呢?
- 思考,初始化一个对象,用的是什么方法?
- 构造方法
- 所以,子类在初始化的时候,只要有办法访问到父类的构造方法,就能完成父类的初始化了
- 问题 : 子类是如何访问到父类构造方法的呢?
- 在所有构造方法中 (Object类除外),默认隐藏着一句话 super();
通过这句话来访问父类的空参构造方法
- 问题:如果父类没有空参构造,子类的 super(); 怎么办?
- 意义所在:子类可以将所需要的所有数据,通过有参构造方法接收,其中父类有的数据,就通过super()交给父类完成初始化!
package com.itheima.constructor; public class Person { private String name; private int age; public Person() { } public Person(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
package com.itheima.constructor; public class Student extends Person { private int score; public Student() { } public Student(String name, int age, int score) { super(name, age); this.score = score; } public int getScore() { return score; } public void setScore(int score) { this.score = score; } }
public class Test { public static void main(String[] args) { Student stu = new Student("钢门吹雪",23,100); System.out.println(stu.getName() + "---" + stu.getAge() + "---" + stu.getScore()); } }
- 必掌握案例
06-this和super关键字
final
01-介绍
- final 关键字是最终的意思,可以修饰(方法,类,变量)