Day6.面向对象编程——java入门

这篇博客详细介绍了面向对象编程的核心概念,包括类与对象、封装、继承、多态,以及抽象和接口。同时,讲解了Java中的异常处理机制,包括异常类别、异常处理关键字和自定义异常的创建。内容涵盖了编程中的基础理论和实践应用。
摘要由CSDN通过智能技术生成

Day6.面向对象编程——java入门

1.什么是面向对象编程(Object-Oriented Programming,OOP)
  • 本质:以类的方式组织代码,以对象的组织(封装)数据。
  • 抽象
  • 三大特性:
    • 封装
    • 继承
    • 多态
  • 从认识论角度考虑是现有对象后有类,对象,是具体的事物。类,是抽象的,是对象的抽象。
  • 从代码运行角度考虑是先有类后有对象。类是对象的模板。
2.类与对象的关系
  • 类是一种抽象的数据类型,它是对某一类事物整体描述/定义,但并不能代表某一个具体事物
  • 对象是抽象概念的具体实例
    • 张三就是人的一个具体实例
    • 能购体现出特点,展现出功能的是具体的实例,而不是一个抽象的概念
3.创建与初始化对象
  • 使用new关键字创建对象

    • 使用new关键字创建的时候,除了分配内存空间,还会给创建的对象进行初始化以及对类中构造器的调用
    • 类中的构造器也称为构造方法,是在进行创建对象的时候必须要调用的。并且构造器有以下两个特点:
      • 1.必须和类的名字相同
      • 2.必须没有返回类型,也不能写void
  • 构造器必须掌握

    示例:

    // java -- >class
    public class Person {
    
      // 一个类及时什么都不写,它也会存在一个方法
      // 显示的定义构造器
    
      String name;
    
      // 实例化初始值
      // 1.使用new关键字,本质是在调用构造器
      // 2.用来初始化值
      public Person(){
      }
    
    
      //有参构造:一旦定义有参构造,无参就必须显示定义
      public Person(String name){
        this.name = name;
      }
    }
    
4.对象的引用
  • 引用类型: 基本类型(8)

    对象是通过引用来操作的:栈—>堆

5.封装
  • 通常,应禁止直接访问一个对象中数据的实际表示,而应通过 操作接口来访问,这成为信息隐藏

  • 关键:属性私有,get/set

  • 优势:
    1.提高程序的安全性,保护数据
    2.隐藏代码的实现细节
    3.统一接口
    4.系统可维护增加了
    
6.继承
  • 继承的本质是对某一批类的抽象
  • 继承是类和类之间的一种关系。除此之外,还有依赖、组合、聚合等
  • 继承关系的两个类,一是子类(派生类),一是父类(基类)。子类继承父类,使用关键字extends来表示
  • 子类和父类之间,从意义上讲应该具有“is a”的关系
  • super
    • super调用父类的构造方法,必须在构造方法的第一个
    • super必须只能出现在子类的方法或者构造方法中
    • super和this不能同时调用构造方法
  • super vs this
    • 代表对象不同
      • this:本身调用者这个对象
      • super:代表父类对象的应用
    • 前提
      • this:没有继承也可以使用
      • super:只能在继承条件才可以使用
    • 构造方法
      • this():本类的构造
      • super():父类的构造
  • 重写:需要有继承关系,子类重写父类的方法
    • 方法名必须相同
    • 参数列表必须相同
    • 修饰符:范围可以扩大但不能缩小;public>protected>default>private
    • 抛出的异常:范围可以被缩小,但不能扩大;
    • 重写,子类的方法必须和父类必须一直,方法体不同!
  • 为什么需要重写
    • 父类功能,子类不移地那个需要,或者不一定满足
7.多态
  • 即同一方法可以根据发送对象的不同而采用多种不同的行为方式。
  • 一个对象的实际类型是确定的,但可以只想对象的应用类型有很多
  • 多态存在的条件
    • 有继承关系
    • 子类重写父类的方法
    • 父类引用指向子类对象
  • 运行原理:如果子类中重写了父类方法,并且对象左边数据类型是子类,那么调用相同方法时,运行的是子类的方法;如果对象数据类型为父类,则调用父类的方法 ;如果子类中没有重写父类方法,并且对象左边数据类型是子类,那么调用父类方法。
  • 注意事项:
    • 多态是方法的多态,属性没有多态
    • 父类和子类,有联系,类型转换异常!
    • 存在条件:继承关系,方法需要重写;父类引用指向子类对象
  • instanceof (类型转换)引用类型,判断一个对象是什么类型
  • 类之间的转化
    • 父类引用指向子类的对象
    • 把子类转换为父类,向上转型
    • 把父类转换为子类,向下转型;强制转换
    • 方便方法的调用,减少重复的代码:简洁
8.abstract 抽象
  • // 抽象类的所有方法,继承了他的子类,都必须要实现它的方法
    
  • 不能new出来,只能靠子类实现

  • 抽象类中可以写普通方法,抽象方法必须在抽象类中

9.接口
  • 接口就是规范,定义的是一组规则。
  • 接口可以实现多继承,实现类必须重写接口的方法
  • 作用:
    • 约束
    • 定义一些方法,让不同的个人实现
    • public abstract
    • public static final
    • 接口不能被实例化,接口中没有构造方法
    • implements可以实现多个接口
10.内部类
  • 内部类就是在一个类的内部再定义一个类,如:A类中定义一个B类,B就是A的内部类,A就是B的外部类

  • 内部类分为:

    1. 成员内部类

      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);
          }
      
        }
      
    2. 静态内部类

      public class Outer {
      
        private int id;
        public void out(){
          System.out.println("这是外部类的方法");
        }
      }
          // 静态内部类
       public static class Inner{
          public void in(){
            System.out.println("这是内部类");
      }
      
    3. 局部内部类

      public class Outer {
          //局部内部类
       public void method(){
           class Inner{
               public void in(){
                   
               }
           }
       }
      }
      
    4. 匿名内部类

      public class Test{
          public static void main(String[] args){
              // 匿名内部类
              //没有名字初始化类
              new Apple().eat();
          }
      }
      
      class Apple{
          public void eat(){
              System.out.println("1");
          }
      }
      

Day7.异常——java入门

1.异常是什么
  • 异常指程序运行中出现的不期而至的各种状况:文件不存在,非法参数等。
2.异常的类别
  • 异常分为Error和Exception两类
  1. 检查性异常:最具代表的检查性异常时用户错误或问题引起的异常。
  2. 运行时异常:运行时异常是可能被程序员规避的异常,运行时异常可以在编译时被忽略
  3. 错误ERROR:错误不是异常,是脱离程序员控制的问题
3.Error和Exception的区别
  • Error通常时灾难性的错误,再程序控制之外,java虚拟机(JVM)一般会选择终止线程;
  • Exception通常情况下时可以被程序处理的,并且在程序中应该去处理
4.异常处理机制
  • 抛出异常
  • 捕获异常
  • 异常处理关键字
    • try
    • catch
    • finally
    • throw
    • throws
5.自定义异常
// 自定义异常类
public class MyException extends Exception{

 // 传递数字>10
 private int detail;

 public MyException(int a){
   this.detail = a;
 }

 // toString:异常信息打印
 @Override
 public String toString() {
   return "MyException{" + detail +
     '}';
 }
}
6.实际应用
  • 处理运行异常,采用逻辑去合理规避并辅助try-catch处理
  • 在多重catch块后面可以加一个catch(Exception)来处理可能会被遗漏的异常
  • 对于不确定的代码,也可以加上try-catch,处理潜在的异常
  • 尽量去处理异常,切忌知识简单地调用printStackTrace()去打印输出
  • 如何处理异常,更具具体的业务需求和异常类型去决定
  • 使用finally去释放占用的内存
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值