面向对象编程(OOP:Object-OrientedProgramming)

面向对象编程(OOP:Object-OrientedProgramming)

个人理解:就是把复杂的问题看作一个整体,即对象;然后再去面向过程,在对象里面去实现方法,语句啥的。

面向对象的本质就是:以类的方式组织代码,以对象的方式组织(封装)数据。

从代码运行的角度考虑是先有类后有对象。类是对象的模板。

个人理解:在编程过程中,一定是先创建一个类,然后就可以用类去创建很多个对象!妙啊!!


break和return的区别:break:跳出switch,结束循环;return结束方法,返回一个结果。

回顾方法的调用

区分:

  1. 静态方法的调用:有static关键字的方法,可以直接用类去点方法名
  2. 非静态方法的调用:没有static关键字的方法,需要先将类实例化(比如:Student student = new Student();),然后再去点方法名(比如:student.方法名();)
  3. 静态方法可以调用静态方法,非静态方法不可以调用静态方法

构造器(必须掌握)

Alt + Insert 快捷键,生成有参函数无参函数

默认存在一个无参构造方法,生成一个有参构造方法之后,默认存在的无参构造方法就没了,需要重新手动去生成它。


面向对象三大特性

  • 封装

  1. 程序设计追求“高内聚,低耦合”;高内聚就是类的内部数据操作细节自己完成不允许外部干涉低耦合就是仅暴露少量的方法给外部使用
  2. 封装(数据的隐藏):通常应该禁止直接访问一个对象中数据的实际表示,而应该通过操作接口来访问,这称为信息隐藏
  3. 记者这句话就够了:属性我私有(private),get/set
  • 继承

  • 多态


super和 this:

方法重写:重点

重写都是方法的重写,和属性无关

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BtLxyBUp-1618032689994)(https://cdn.jsdelivr.net/gh/niuniu-niu/niuniu_img/myImg/4`}RZQCR1I1]}JV$1N%BX41.png)]

因为:定义的是什么类,就调用什么类的静态方法

快捷键:Alt + Insert ----->选择Override Methods…


多态

static final private 这些修饰符修饰的方法没有多态,因为它们重写都不能被重写,更别谈多态了啊!!!

个人理解:当父类引用指向子类对象时:

  1. 当某一个方法,在父类和子类中都存在,如果此时用父类创建的对于像这个方法,那么执行的就是子类中的方法;(执行的是子类对父类中的方法重写之后的同名方法);
  2. 子类中有一个独有的方法,父类中并不存在同名的方法,如果此时用父类创建的对于像这个方法,那么就会报错

instanceof(类型转换) 引用类型

个人理解:

我们学这里的类型转换,是为了在父子继承中,去使用子类中特有的方法,而不是重写的方法;

(其实就是父类不能直接使用子类中特有的方法,所以强转一下,把自己伪装成子类,然后就可以去使用子类中的方法了,哈哈,妙啊!😄😄😄😄😄😄😄😄😄😄😄😄)

借鉴评论大神理解:

低(子类)转高(父类)时,由于子类已经继承了父类的所有方法了,所以只需要删除子类中自己独有的一些方法,自然而然就转换成父类了;

而父类转换为子类,就需要重新去开辟出属于子类的空间,则需要强制转换!妙极啊!👍👍👍👍👍👍👍👍👍👍👍👍


Static关键字(总结)

在类中,类( 或者静态的方法)可以去直接访问静态的方法(或静态变量),但是不能访问非静态的方法(或非静态变量)(类也不能去访问非静态的方法(或非静态变量));

而非静态的方法却可以直接访问静态方法,这是为什么呢?

因为在类加载的过程中,静态方法、静态变量以及常量也被存入了方法区,或者说类加载的同时,静态方法、静态变量以及常量是一起被加载的。所以就可以直接调用了,像非静态的方法还没被加载进内存,所以就不能去访问非静态的方法。


抽象类

抽象类的所有方法必须要由它的子类去实现,但是假如它的子类也是一个抽象类,那就要由它子类的子类去实现它的方法了。以此类推…

个人理解:就是无限套娃。。。


Java里,extends是单继承,类没有多继承,但是接口有多继承


接口

接口必须要有实现类


内部类(各种套娃。。。)


异常机制


捕获和抛出异常

异常处理机制

异常处理的五个关键字:

  • try
  • catch
  • finally
  • throw
  • throws
public class Test {
    public static void main(String[] args) {
        int a = 1;
        int b = 0;


        //假如要捕获多个异常,要按照捕获范围,从小到大
        try {//try监控区域
            System.out.println(a/b);//捕获到一个异常后就直接跳出监控区域,即下面一行代码不执行了
            new Test().a();
        }catch (ArithmeticException e){
            //捕获到异常之后,执行下面的代码
            System.out.println("程序出现异常,除法分母不能为零(ArithmeticException)");
        }catch (Exception e){
            //捕获到异常之后,执行下面的代码
            System.out.println("Exception");
        }catch (Error e){
            //捕获到异常之后,执行下面的代码
            System.out.println("Error");
        }catch (Throwable e){
            //捕获到异常之后,执行下面的代码
            System.out.println("Throwable");
        }finally {//最后必定执行的语句,可以不要finally,try和catch一定要
            System.out.println("finally");
        }
    }

    public void a(){b();}
    public void b(){a();}




}

idea中捕获抛出异常的快捷键是:Ctrl + Alt + T------------>由于我的笔记本可能键位冲突,所以我自己改成了Alt + T;(针对跟我一样快捷键没反应的情况)

假如在方法中,处理不了某个异常,就可以主动抛出异常,用throw

public class Test {
    public static void main(String[] args) {
        int a = 1;
        int b = 0;

        new Test().test(a,b);
        //
    }
    //假设这个方法中,处理不了这个异常
    public void test(int a,int b){
        if (b==0){
            throw new ArithmeticException();//一般在方法中,去主动抛出异常
        }
    }
}

如果用try catch ,那么程序抛出异常后可以继续运行,但是如果用throw抛出异常,程序就会停止运行。


自定义异常

public class MyException extends Exception{
    private int detail;

    public MyException(int a) {

        this.detail = a;
    }

    //toString():异常的打印信息


    @Override
    public String toString() {
        return "MyException{" +
                "detail=" + detail +
                '}';
    }
}
public class Test {
    //可能会存在异常的方法
    static void test(int a) throws MyException {//在这里,我选择了抛出这个异常(throws MyException)

        System.out.println("传递的参数为:" + a);
        if (a > 10) {
            throw new MyException(a);//在这里,我选择了抛出这个异常(throws MyException),抛到更高的地方,让调用这个test方法的人来捕获这个异常,当然也可以选择直接在这里try/catch捕获它
        }
        System.out.println("OK!");
    }

    public static void main(String[] args) {
        try {
            test(11);
        } catch (MyException e) {
            System.out.println("MyException---->"+e);
        }
    }
}


果断就会白给,犹豫就会败北,坚持才是胜利!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

牛牛ō^ō

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值