Java学习(三)

Java学习(三)

面向对象编程

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

  • 三大特性:1.封装

    ​ 2.继承

    ​ 3.多态

  • 理解类和对象:先有类,后有对象,类是对象的模版

注:一个项目里面只有一个Application里面有main方法,其他都是类,类里面包括了属性和方法

this关键字

  • this表示本对象
  • 用于访问类中的成员变量
  • 用来区分局部变量和成员变量的问题(重名问题)

类与对象

构造方法

  • 没有返回值,与类名相同的public方法
  • 一个类即使什么也不写,也会有构造方法(无惨构造)
  • 使用new关键字本质就是调构造方法,必须有构造方法
  • 需要自己写一个有参构造
  • 如果写了有参构造,必须将无参构造写出来
  • 快捷键(mac:command+n)
public class Person {
    String name;
    int age;
		//无参构造
    public Person() {
    }
		//有参构造
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
}

封装

  • 属性私有,get/set
  • 统一接口
  • 系统可维护增加
  • 隐藏代码的实现细节
  • 提高程序的安全性

Private关键字

  • 属性私有(不能对属性随便操作了,得通过get/set)
  • 属性私有后,需得为属性写get和set方法

继承

  • 对一批类的抽象
  • extends:继承就是子类对父类的扩展
  • 子类继承父类的公有方法并有自己私有的方法
  • 私有的东西无法被继承

object

  • Java只能单继承

super和this的区别

  • super调用构造方法,必须在构造方法的第一个

  • super必须出现在子类的构造方法和方法当中

  • super和this不能同时调用构造方法

  • this没有继承也可以使用,super只能用于继承条件下

  • this()表示本类的构造,super()表示父类的构造

  • super表示的是父类,比如super.name指的是继承的父类里的name属性

  • this表示的是当前类,比如this.name指的是当前类里面的name属性

  • 父类的引用指向了子类

方法的重写

  • 都是方法的重写和属性无关,重写和非静态方法有关

  • 在mac系统下要重写父类的方法是:control+回车键选中override

  • 静态方法和非静态方法:有static的时候调用的是类的方法,没有static的时候调用的是对象的方法

  • 静态方法的调用只和左边类型有关

  • 非静态方法的调用和右边的new的类型有关

  • 重写的时候不能是private限制

  • 以下几种方法不能重写: static方法它是属于类

      								  final属于常量
    

    ​ private属于方法的私有

补充

  • 修饰符范围可以被扩大,但是不能被缩小。 public>protected>default>private
  • 抛出异常范围可以缩小但是不能扩大。 ClassNotFoundException-------->Exception(大)

多态

  • 父类引用类型指向子类,下面代码示例

  • 多态是方法的多态而不是属性的多态

  • 对于引用子类对象的父类引用对象,如果子类重写了父类的方法,则运行时父类引用对象会调用子类的方法;如果子类继承了父类的方法(未重写),则运行时父类引用对象会调用父类的方法

  • 一般系统自动是由低转高类型

多态的使用条件

  • 继承:多态中必须存在有继承关系的子类和父类
  • 重写:子类对父类中某些方法进行重新定义,在调用这些方法时就会调用子类的方法
  • 向上转型:在多态中需要将子类的引用赋给父类对象,只有这样该引用才能够具备技能调用父类的方法和子类的方法
        Father father = new Son();  //向上转型

抽象类

  • 用abstract关键字来修饰的类
  • 用abstract关键字来修饰的方法称为抽象方法,只有方法的名字没有方法的实现
  • 毕竟是个类,只能单继承,不能多继承(一个类只能继承另一个类,一个孩子只有一个父亲)
  • 抽象类不能new出来只能靠子类去实现它
  • 抽象类中也可以写普通方法,但抽象方法必须写在抽象类中
public abstract class Test {
    //抽象方法
    public abstract void say();
    //普通方法
    public void go(){
        System.out.println("go!!");
    }
}

接口

  • 关键字不再是class而是interface
  • 接口中所有定义的都是抽象的,默认都是public的
  • 接口都需要实现类(Impl)
  • 实现了接口中的类都需要重写所有的方法
  • 接口可以多继承
public interface Method {
        void test();   //public是默认的
}

异常

错误和异常的区别

  • 错误(Error)是灾难性的,是程序无法控制和处理的
  • 异常(Exceotion)是可以被程序处理的,并且在程序中应该尽可能的去处理

异常处理机制

抛出异常

  • 主动抛出异常一般在方法中使用

捕获异常

  • 通常用try···catch····(finally)
  • 快捷键:command+option+t
public class Application {
    public static void main(String[] args) {
       int a = 0;
       int b = 1;
        try {   //监控异常区域
            System.out.println(b/a);
        } catch (Exception e) {
          	//catch(想要捕获异常的类型)   捕获异常
            System.out.println("exception");;
        } finally {
          //处理善后工作
            System.out.println("finally");
        }
    }
}

异常处理的五个关键字

  • try:监控区域
  • catch:捕获异常,catch括号里放的是捕获的异常类型。
  • finally:处理善后工作
  • throw
  • throws

异常小结

  • 在处理异常的时候时,采用逻辑合理去规避辅助try····catch····
  • 在多重catch块后面,加一个catch来处理异常
  • 对于不确定的代码,可以加上try···catch···处理潜在的异常
posted @ 2022-01-12 15:44  Zquen  阅读(51)  评论(0)    收藏  举报