(一)static 关键字
静态的
作用:
1.修饰属性, 静态属性,类属性:
使用场景: 某个类的所有对象共享某个数据, 使用静态属性
语法: static 数据类型 属性名;
此时静态属性作为该类所有的对象共享的
调用静态属性:
1) 使用对象名.静态属性名
2) 使用类名.静态属性名 (推荐)
2.修饰方法: 静态方法: 使用场景: 工具类
非静态方法的调用, 在其他类,main方法内调用: 先创建方法所在类对象,然后通过对象名.方法名() 来调用
静态方法的调用: 在其他类,main方法内调用, 直接使用类名.静态方法名()
静态方法优点: 调用简单
静态方法的缺点:
1.无法使用非静态资源(实例属性,非静态方法, this,super),只能使用静态资源, 非静态方法调用非静态资源,也调用静态资源
2.static修饰的, 不会被gc回收, 等到程序结束之后才回收
3.静态代码块: 使用场景: 做初始化操作, 做准备工作
语法:
static{
//代码块
}
静态代码块是在所在类的被加载到内存的时候, 就会自动执行该类所有的静态代码块.
只执行一次
一个类可以写多个静态代码块, 执行顺序,从上往下
4.修饰内部类, 静态内部类 (了解)
内部类
Public class Demo5{
Int a;
Int b;
Class InnerClass{
//不能调用a,b,除非加final
}
Static class InnerClass{
//不能调用a,b,除非加static
}
(二)封装
封闭隐藏, 隐藏细节, 保护安全
包装,组装: 整体的眼光看待问题
作用:
提高易用性(使用简单), 编写一个类, 内部很复杂, 这些复杂的代码,封装起来, 暴露的几个方法,
提高安全性: 对有些属性,有些方法, 屏蔽掉, 禁止用户访问,从而提高类安全
把重复的代码,抽取出来,使用方法,或者类来封装, 从而达到代码的重用
java的封装的实现:
步骤:
把属性的访问修饰符设置为 private(修饰的资源只能在本类访问)
给属性提供公开的get/set方法:
get方法: 读操作 set方法: 写操作
private int age;
//get方法 读
public int getAge(){
return age;
}
//set方法 写
public void setAge(int age){
this.age = age;
}
idea提供生成set/get方法: alt + insert
(三)继承
子类继承父类, 子类继承父类的属性和方法, 构造方法不能继承, 但是如果父类这个属性使用private 修饰, 子类继承这个属性,但是是无法访问,
作用:
实现代码的重用, 基于类层次的代码重用
把多个子类中公共的代码,抽取出来, 放到父类中, 子类继承父类, 这个公共代码,被子类继承,从而实现代码的重用
继承使用步骤:
1.把子类公共的代码抽取出来, 形成一个父类
2.让子类继承父类: 使用的关键字: extends
public class 子类 extends 父类{
}
案例: 宠物系统
小狗, 小猫
属性: 名字, 健康值, 亲密度
小狗特有属性: 类型
小猫特有属性: 颜色
领养宠物:
1.继承细节:
java的继承是单继承, 一个子类只能有一个直接父类
在 java 中只允许单继承,而不允许多重继承,也就是说一个子类只能有一 个父类,但是 java 中却允许多层继承.
多重继承:
多层继承:由上面可以发现类 B 继承了类 A,而类 C 又继承了类 B,也就是说 类 B 是类 A 的子类,而类 C 则是类 A 的孙子类。我们java的所有类都有一个祖先类,就是我们的Object类.
(四)子类对象实例过程
java所有的类都有一个祖先类: java.lang.Object, 如果一个类没有显示写继承继承那个类,默认继承java.lang.Object
1.初始化父类的属性
2.执行父类的构造方法
3.初始化子类的属性
4.执行子类的构造方法
(五)super 关键字
super 表示父类的对象, this表示本类对象
super.属性: 调用父类的属性, 无法使用, 属性进行私有化
super.方法: 调用父类的方法
super([参数]): 调用父类的构造方法,
super(): 注意事项:
只能写在子类构造方法内
只能在子类构造方法的第一行代码
不能与this() 同时存在
如果子类构造方法没有写super(), jvm会自动添加super(), 手动编写super()调用父类构造方法, jvm不会添加super()