五.面向对象OOP(重点)
本质:以类的方式组织代码,以对象的形式封装数据
5.1 创建对象
5.1.1 new
类名 对象名 = new 类名(); 【 类名() => 构造器 】
注:使用new创建对象的时候,会默认分配空间、调用构造器。
5.1.2 构造器(构造方法)
* [ 生成构造器快捷键 Alt+Insert >> Constructor ]
public Students(String name, int age) {
this.name = name;
this.age = age;
}
5.1.3内存分析
- new一个对象的时候,首选会创建一个引用变量名存在栈中将
- 然后将类作为模板创建一个对象到堆中(内存)
- 并且将该对象实例与引用变量名关联起来。
5.2 面向对象三大特性(重)
记:属性私有 + get/set
作用:
-
提高程序的安全性,保护数据 -
隐藏代码的实现细节 -
统一接口 -
提高系统可维护性
public class app {
public static void main(String[] args) {
Stu2 stu2 = new Stu2();
stu2.setName("小明");
System.out.println(stu2.getName());
}
}
public class Stu2 {
private String name;
public void setName(String val){
this.name = "学生"+val;
}
public String getName(){
return this.name;
}
}
* [ 生成get/set快捷键 Alt+Insert >> get and set ]
-
5.2.2继承(extends) 5.2.2-1概念:
- java中继承只能有单继承(只有一个爸爸)
- 继承的两个类,一个是子类(派生类),一个是父类(基类)
- 所有的类都默认直接或间接继承 Object 类
* [ 查看继承结构快捷键 Ctrl+H ]
5.2.2-2super : ( 就是父类的this ) 例: public class app {
public static void main(String[] args) {
son son = new son();
son.getName("paramName");
}
}
public class son extends father{
private String name = "sonName";
public void getName(String name){
System.out.println(name);
System.out.println(this.name);
System.out.println(super.name);
}
}
public class father {
String name = "faName";
}
注意:extends 默认在当前类的 构造方法 中,优先调用父类 构造方法 5.2.2-3重写(子类实现了和父类一样的方法就是重写)
* [ 创建重写方法快捷键 Alt+Insert >> override ]
- 方法名和参数列表必须一样
- 方法是修饰符不能是static 、 final 、 private (这些不能重写)
- 修饰符范围可以不一样,但子类方法只能大于等于父类方法
- 抛出异常的范围只能缩小,不能扩大
-
5.2.3多态
5.3 抽象类 abstract0
- 定义:abstract修饰
- 使用(作为子类的模板使用,约束子类)
- 抽象类的抽象方法,子类必须都实现(可以有普通方法)
- 有抽象方法的类,必须是抽象类
- 不用new抽象类,只能被继承(但存在构造器,子类通过 super 可调)
5.4 接口 interface(接口的本质是规则)
- 使用 interface 定义接口 ,使用 implements 继承接口
- 注意:
- 接口中的方法只能是抽象方法
- 实现了接口的类,就要重写接口的方法
- 可以同时继承多个接口,使用“,”分隔
5.5 内部类
- 成员内部类
public class Outer {
private float num = 3.14f;
public void out(){
System.out.println("外部类");
}
public class Inter{
public void in(){
System.out.println("内部类"+num);
}
}
}
public static void main(String[] args) {
Outer outer = new Outer();
outer.out();
Outer.Inter inter = outer.new Inter();
inter.in();
}
-
静态内部类 将内部类设置为静态后,由于静态方法先执行,所以静态方法中不能获取外部类中的非静态属性 -
局部内部类 定义在方法中的类
六.异常(Error\Exception)
java中将异常当做对象处理,所有异常基于一个基类java.lang.Throwable
- 异常关键字:try , catch , finally , throw , throws
* 快捷键:Ctrl+Al+T
6.1处理异常
try {
...
}catch (ArithmeticException e){
System.out.println("BUG,我逮住你了");
}finally {
System.out.println("打扫现场");
}
6.2抛出异常
public class app {
public static void main(String[] args) {
int a = 10;
int b = 0;
try {
new app().test(10,0);
} catch (ArithmeticException e) {
System.out.println("发现一个异常");
e.printStackTrace();
}
}
public void test(int a,int b) throws ArithmeticException{
System.out.println(a/b);
}
}
自定义异常(略)
|