面向对象
- Java的核心思想就是面向对象编程
- 面向对象的本质:以类的方式组织代码,以对象的方式组织数据
- 面向对象的三大特性:封装、继承、多态
- 面向对象原则:组合>继承
类
引用传递需要实体类和属性(一个类中只能有一个公共类)
构造器
- 一个类即使是空的,没有属性代码,也会有一个默认的无参构造器
- 无参构造器便于实例化初始值,在构造器中this.属性设置初始值
- 子类无参构造默认先调用父类的无参构造
- 一旦定义有参构造,就必须显示无参构造
private String name;
public Practice() {
this.name = "卢本伟";
}
public class Test {
public static void main(String[] args) {
Practice practice = new Practice();
System.out.println(practice.getName());
}
//输出结果为卢本伟
构造方法必须和类的名字相同
不能写void也没有返回类型
idea快捷键alt+insert
封装
属性私有,get/set
可以在set处做判断保证数据的合法性
保证系统安全性,提高系统的课维护性,统一接口隐藏细节
package com.ma.study;
public class Practice {
//属性私有
private String name;
public void setName(String name) {
//可以做出判断保证数据合法性
if (name.length()>0&&name.length()<5){
this.name = name;
}else{
this.name = "11";
}
}
public String getName() {
return name;
}
}
package com.ma.study;
public class Test {
public static void main(String[] args) {
Practice practice = new Practice();
practice.setName("111111");
//输出的是11,因为不符合规则
System.out.println(practice.getName());
}
}
继承
- 关键词:extends
Java中类只能单继承和多层继承
接口可以多继承
- 子类可以继承父类的方法和属性
- Object是所有未声明继承关系类的父类
- super调用父类的构造方法
- super和this不能同时调用构造方法
Ctrl+H查看继承关系
重写
-
- 必须有继承关系
-
- 子类重写父类的方法
-
- 方法名相同,参数列表不同
-
- 修饰符范围可以扩大 public>protect>default>private
-
- 异常的范围可以被缩小但不能被扩大
为什么西药重写?
父类的功能子类不一定需要或不一定满足
多态
//父类引用指向子类类型 可以理解为爸爸有需要时候向儿子借东西
Father father = new Son();
-
- 必须在继承的前提下,且多态也是方法的多态
-
- 对象能执行的方法取决于左边的类型
- instanceof类型转换
代码块
执行顺序:
静态代码块>匿名代码块>普通代码块
static代码块只执行一次
抽象类
- 关键词:abstract
- 抽象类不能new,只能实现
有抽象方法一定是抽象类
抽象类中可以有普通方法
抽象方法必须在抽象类中
接口
- 关键词:implements
- 接口只能被实现
- 实现类实现接口后需要重写其中的方法
接口比抽象类更加抽象实现约束和实现分离
接口的本质是契约,就是一个专业的约束
接口不是类所以没有构造方法
内部类
类中还可以有类,不赘述
异常
- 检查性异常:由于用户错误或问题引起的异常
- 运行时异常,在编译时被忽略的异常
- 错误ERROR不是异常EXCEPTION,这个时脱离程序员控制的错误,在编译时检查不到
异常处理机制
- 异常处理五个关键字:try,catch,finally,throw(主动抛出异常),throws
- try是测试,catch是捕获异常,finally是最终都会走的路径快捷键:alt+enter
- try catch快捷键ctrl+alt+t
- throw new 异常名称();主动抛出异常
自定义异常
继承Exception类 ,然后调用输出