块
块{} : 是一个作用域
- {}写在方法中:普通语句块|局部代码块 执行时机:方法调用时候
- {}写在类中方法外:构造块 执行时机:创建对象时
- static{}写在类中方法外:静态块 执行时机:类加载
- 构造块中的代码先于构造器中的代码之前执行,因为编译的时候编译器会自动把构造块中的代码编译到构造器代码之前–>反编译工具
- 如果有多个构造块从上倒下以此执行
- 静态块中的内容在类第一次加载完成之后执行,只执行以此
- 如果有多个静态块从上倒下依次执行
- 静态块 — main—构造块—构造器
继承: 子承父业
- 子类|派生类: 继承别的类的类
- 父类|基类|超类: 被继承的类
- 继承如何使用:
- 子类 extends 父类
- 继承的优点:
- 子类一旦继承父类,就可以使用父类中所有的内容
- 提高代码的复用性
- 子类定义扩展的内容,子类独有的内容
- 特点:
- java是单继承机制,但是可以多实现接口
- 一个类可以有多个子类,但是一个子类只能有一个父类
- 单继承的优点: 使用简单
- 单继承的缺点: 不便于后期维护
- 面向对象的设计原则之一: 开闭原则 ,对修改关闭,对扩展开放
- 修饰类的修饰符只能有2个 public|default(不写 默认)
包
不要定义与 jdk 相同的包,相同的类, 否则会引起很
多你觉得莫名其妙的问题
不需要导包的情况:
1.java.lang包下的内容
2.同包下的内容
如果使用非当前包下内容:
1.使用的收写全名 报名+类名 ,只在当前位置有效
2.import导包
3.* 模糊匹配 不会影响分运行效率,只会影响编译效率
4.静态导入 只导入静态的内容(属性|方法)
javabean
javabean一系列类的同称:根据一些列对象抽取共性定义的类成为模板类|图纸
1.类是公共的
2.至少提供一个空构造
3.私有的属性
4.公共的访问方式
封装
安全隐患问题: 想要在外部不允许直接操作成员
介绍一个关键字 private,成员修饰符
私有的,只能在当前本类中使用,外部类中无法使用
属性一旦私有,就要配合设置器和访问器使用 setter getter,公共的方法
私有的属性一定安全么? 1.不允许外部直接操作 2.设置器和访问器是方法,可以进行逻辑判断
注意:以后自定义的模板类,属性都私有,并且同时提供一对公共的访问方式设置器访问器
隐藏内部的实现细节,对外提供公共的访问方式
类,方法,属性私有化…都是封装具体的体现
私有是封装,封装就是私有,这句话对么??? 不对 ,私有是封装,封装不仅仅是私有
权限修饰符: 内容被访问的权限
本类 同包类 不同包的子类 不同包的其他类
- public Y Y Y Y
- protected Y Y Y
- default Y Y
- private Y
- 特点:
-
都是成员修饰符,不能修饰局部
-
default关键字默认的,省略不写
-
能够修饰类的只能为public | default
- 能够使用被protected修饰的内容的方式:
-
1.同包下的
-
2.不同包的子类中才能使用,并且必须通过子父类之间继承的关系使用才可以
重载
- 重写和重载之间区间:
- 无论是重写还是重载都是只的方法而言
- 方法的重载:
-
同一个类中的多个方法
-
方法名相同
-
参数列表不同
- 方法的重写:
-
1.不同的类
-
2.继承|实现
-
3.方法签名相同
- 如果子父类中构成方法的重写,子类对象调用时候会调用子类中重写的那个方法,对父类的方法进行屏蔽
- 检测方法重写的方式:
-
1.左侧会出现向上的三角形
-
2.@Override 注解强制检查重写方法
- == 方法签名完全相同
- <= 返回值类型: 返回值类型为基本数据类型要求必须相同, 如果引用数据类型,子类<=父类
-
= 子类权限修饰符>=父类权限修饰符
- 注意:
-
被private修饰的方法不能被重写
-
被final关键字修饰的方法不能被重写
-
被static修饰的方法不能被重写
-
但是注意:如果子类中有与父类中的某个静态方法同名的时候,那这个方法也要为static修饰的
final,super和this
- final 关键字
-
被final修饰的变量为常量
-
被final修饰的方法不能被重写
-
被final修饰的类不能被继承 (太监类)
- super和this之间的区别:
- this:当前对象(new的对象|调用成员方法的对象)
-
1.调用本类中的其他构造器
-
this(参数列表)
-
2.区分局部和成员之间的问题
- super:指代父类对象
-
1.调用父类的构造器
-
super()
-
如果没有显示定义,调用父类的哪一个构造器,默认首行调用super()父类空构造
-
因为一般子类构造器的首行会默认调用父类空构造的问题,所以建议模板类都至少存在一个空构造
-
super()必须在首行调用使用才行
-
2.区分子父类同名问题
-
如果当子父类中存在同名成员的时候,子类中使用同名内容默认就近原则指代父类,如果先要使用父类的通过super使用
-
super指代父类对象
-
如果不存在同名问题,调用父类中的成员,super.可以省略
- 先父类后子类
- 先静态后成员