面向对象编程
面向对象&面向对象
对于描述复杂的事物,为了从宏观上把握、从整体上合理的分析,我们需要使用面向对象的思路来分析整个系统。但是,具体到微观操作,仍然需要面向过程的思路进行解决
什么是面向对象
面向对象的本质:以类的方式组织代码,以对象的组织数据
抽象
三大特性
封装:属性私有,get/set
继承
多态
静态方法
静态方法和非静态方法
形参和实参
值传递和引用传递
构造器
-
使用new关键字,本质是在调用构造器
-
和类名相同,没有返回值
-
用来初始化值
-
Alt + insert 自动生成构造器(windows)command + n 在选择constructor(mac)
super注意点
-
super调用父类的构造函数,必须在构造方法的第一个
-
super必须出现在子类的方法中或者构造方法中
-
super和this并不能同时调用构造方法
vs this
代表的对象不同
this 代表本类
super代表父类
前提
this没有父类也可以调用
super必须在继承的条件下才可以进行使用
构造方法
this()本类的构造
super() 父类的构造
重写
-
需要有继承关系,子类重写父类的方法
-
方法名必须相同
-
参数列表必须相同
-
修饰符:范围可以扩大,但是不能缩小
-
抛出的异常:范围,可以被缩小,但不能扩大
多态
-
多态是方法的多态,属性没有多态
-
父类和子类,有联系 类型转换异常!ClassCastException
-
存在条件:继承关系,方法需要重写,父类引用指向子类对象
-
以下不可进行重写,所以也不存在多态的说法
-
static方法,属于类,她不属于实例
-
final常量
-
private方法
-
instanceof与类型转换
-
子类转换为父类,向上转型
-
父类转换为子类,向下转型
-
方便方法的调用,减少重复的代码!
代码块
静态代码块
public class Person{ { System.out.println("匿名代码块"); } //静态代码块,最早加载,和类一起加载 只执行一次 static{ System.out.println("静态代码块"); } //构造器 public Person(){ System.out.println("构造方法"); } public static void main(){ Person person1 = new Person(); System.out.println("######################"); Person person2 = new Person(); } } //输出的姐结果 //静态代码块 //匿名代码块 //构造方法 //##################### //匿名代码块 //构造方法
import static java.lang.Math.random; public class Test{ public void static main(){ System.out.println(random()); } }
-
不能new这个抽象类,只能靠子类去实现:约束
-
抽象类中可以写普通的方法
-
抽象方法必须在抽象类中
-
抽象类可以拥有构造器
public abstract class A { public abstract void run(); A(){ System.out.println("抽象类的构造器"); } }
public class outer{ private int id; public void out(){ System.out.println("这是外部类的方法"); } public class Inner{ public void in(){ System.out.println("这是内部类的方法"); } public void getId(){ System.out.println(id);//获得类的私有属性 } } }
//try catch finally throw throws public static void main(String[] args) { int a = 0; int b = 20; try { new test().a(); }catch (StackOverflowError e){ System.out.println(e); }finally { System.out.println("finally"); } } public void a(){ b(); } public void b(){ a(); } }
自定义异常
throws(在方法上抛出异常)
throw抛出异常(一般在方法中)
异常处理的五个关键字:try catch finally throw throws
-
抛出异常
-
处理异常
异常的处理机制
error通常都是灾难性的致命错误,是程序无法控制和处理的,当出现这些异常的时候,Java虚拟机一般会选择终止进程;exception通常情况下是可以被程序进行处理的,并且在程序中应该尽可能的去处理这些异常。
exception与Error
-