static关键字
static关键字 : 状态修饰符 -> 静态的 作用: 是用来修饰成员的 (成员变量和成员方法) static修饰的成员具备的特点: 1. 被static修饰的成员被所有对象共享 2. 被static修饰的成员不再属于对象,属于类 3. 被static修饰的成员可以直接使用类名调用 4. 被static修饰的成员随着类的加载而加载,优先于对象加载的
静态的访问特点
静态成员变量 | 静态成员方法 | 非静态成员变量 | 非静态成员方法 | |
---|---|---|---|---|
非静态成员方法 | √ | √ | √ | √ |
静态成员方法 | √ | √ | X | X |
静态虽好,但是只能访问静态! -> 静态只能访问静态!! 为什么静态只能访问静态?? 加载时机问题 静态成员是随着类的加载而加载 -> 早出现的东西 非静态成员是随着对象的加载而加载 -> 晚出现的东西 非要在静态方法里访问非静态成员! 创建对象,使用对象调用非静态成员即可 static修饰的方法中就不可以使用this关键字!
静态的使用场景
静态的使用场景 : 工具类 工具类的编写步骤: 1. 定义一个类 : 类名叫 XxxxUtils -> Xxxx指得是完成的功能 2. 私有无参构造方法,并不提供任何其他的构造方法 -> 治疗手贱的! Do not let anyone instance this class!!! 3. 把类中所有的成员方法和成员变量全部用 static 修饰 //需求: 自己编写一个属于自己的数组操作的工具类!! JDK 提供的 Math 数学操作的工具类 static double E : 自然对数的底数 static double PI : 圆周率 static int abs(int a) : 求一个数的绝对值 static double cbrt(double a) : 求a的立方根 static double ceil(double a) : 天花板 -> 向上取整 static double floor(double a) : 地板 -> 向下取整 static long round(double a) : 四舍五入 static int max(int a, int b) : 求2个数的较大值 static int min(int a, int b) : 求2个数的较小值 static double pow(double a, double b) : 求a的b次幂 static double random() : 生成一个随机数 -> [0,1.0)
继承特性
继承的本质 : Java中 类 与 类 之间的关系;(Java中类和类只有继承关系或者没关系) //子类 继承 父类 继承的特点: 1. 子类继承父类,可以使用父类中所有非私有的成员 (成员变量和成员方法) -> 父爱如山 2. Java中继承关系 : 单一继承,多层继承 -> 一个儿子只能有一个亲爹,亲爹自己也可以有自己的亲爹 3. 一个父类可以有多个子类 -> 一个爹可以有多个儿子 4. 父类对象坚决不会使用子类的成员 -> 父亲是渣男,不知道有这个子类 5. 如何一个成员子类中有,父类中也有,子类对象要使用的话,会优先使用子类自己的 -> 子类孝顺 ***6. 子类要加载,优先加载父类 -> 先有爹再有儿子 7. 继承关系下,一定是子类对象的功能多-> 后续要创建对象优先创建子类对象!, 子类功能多,子类可以调用父类非私有的方法以及自己的方法 8. Java中所有的类都直接或者间接的继承于 Object //如果一个类没有父类,默认继承 Object object 类 : 超类,根类,基类
继承的格式
继承的格式 : extends //父类的父类 public class Ye /*extends Object*/{ } //父类 public class Fu extends Ye{ } //子类 public class Zi extends Fu{ }
继承关系下成员访问问题
继承关系下成员变量的访问问题
a. 在子类的方法内访问: 1. 子类可以使用父类所有非私有的成员变量 2. 子类访问和父类同名的成员变量优先使用子类自己的 -> 变量访问的就近原则 就近原则 : 局部 < 本类成员 < 本类父类成员 强制访问本类成员位置上的变量 : this.变量名 b. 在父类的方法内访问 : 父类只能访问父类自己和父类父类的成员 c. 在第三方类中访问 : 1. 子类对象只能访问子类自己的和父类非私有的,如果子类有父类也有,只能访问子类自己的 2. 父类对象只能访问父类自己和父类父类的成员 总结: 子类中访问 : 就近原则 第三方类中访问 : 子类对象访问自己的和自己父类的,自己有的优先访问自己的
继承关系下成员方法的访问问题
a. 在子类中访问 可以访问子类自己的,父类非私有的,如果子父类有一样声明的方法优先访问子类自己的 如果非要访问父类成员位置上的同名方法 : super.方法名(实参); b. 在父类中访问 : 父类只能访问父类自己和父类父类的成员方法 c. 在第三方类中访问: 1. 创建子类对象 : 自己有访问自己的 2. 创建父类对象 : 父类对象只能访问父类自己和父类父类的成员方法 总结: 继承关系下方法的访问特点是 真实的对象是谁就执行谁的方法
继承关系下构造方法的访问问题
方法的重写
方法的重载: overload -> 用的多,写的少 (方便别人的) 1. 在同一个类中 2. 同名方法 3. 形参列表不一样 (类型,类型顺序,个数) 4. 与返回值无关 5. 与形参名无关 方法的重写: override -> 方法的覆盖 -> 用的多.写的多 1. 必须有继承/实现关系 -> 不在同一个类中 2. 子类重写父类的方法要求: 子类重写的方法声明必须和父类一模一样!! 3. 可以不一样的是 : 方法体 --------------以上是百分之99的情况-------------------------- 方法重写中可以不一样的: 1. 形参的变量名 2. 方法的访问权限修饰符可以不一样 : 子类重写的方法访问权限修饰符要 >= 父类方法的权限修饰符 public > protected > 默认不写 > private 3. 子类重写方法的返回值类型可以不一样 a 父类方法返回值是 void 子类必须是 void b 父类方法返回值是 基本数据类型 子类必须一样 c 父类方法返回值是 引用数据类型 子类的方法返回值类型 可以是 父类方法返回值类型的 子类或者同类 Object > Number > Integer static 方法 是没有重写概念的!!
九阳神功
九阳神功 : 内力 九阳神功使用前提 : 必须要看到 --> 对象. 对象.成员变量 对象.成员方法 对象.静态成员方法 公式的使用步骤 1. 只要看到对象调用 XXX -> 可以用公式 2. 找到对象创建的语句 -> 类名 对象名 = new 类名(); //找到对象是如何创建的 3. 看对象在干嘛 对象.成员变量 : 编译看左边, 运行看左边 对象.成员方法 : 编译看左边, 运行看右边 对象.静态成员方法 : 编译看左边, 运行看左边 左边 : 创建对象语句左边的类 右边 : 创建对象语句右边的类 编译看 : 作用是用来为代码调错的 -> 如果代码没有出错,就不需要编译看` Java语句的原则是 : 对象所属的类或者其父类中如果没有这个成员是不可以调用的 运行看 : 作用是用来说程序结果的 运行看的类是哪一个那就执行那一个类中的代码