Java基础知识点(对象、构造器、封装、纪衡、多态、接口、内部类、异常处理机制)

OOP详解

  • 什么是面向对象?
    1.Java的编程语言是面向对象的,采用这种语言进行编程称为面向对象编程。
    2.面向对象的本质就是:以类的方式组织代码,以对象的方式组织(封装)数据。
  • 类与对象的关系
    1.类是一种抽象的数据类型,属于引用数据类型,它是对某一类事务的整体描述定义,但并不能代表某一个具体的事务(对象)。
    2.对象是具体类的是个实例。

对象详解

  • 创建和初始化对象
    使用new关键字创建对象,分配内内存空间,还对给创建好的对象进行默认值初始化,以及对类中构造器的调用。
    具体步骤:Student s = new Student();
    1.为对象s分配内存空间(堆),将对象的实例变量初始默认值为0/flase/null。(实例变量的隐式赋值)。
    2.如果代码中有实例变量有显示赋值(成员变量直接赋值、static代码块等赋值),就会将之前的默认值覆盖。
    3.调用构造器。
    4.把对象的内存地址赋值给栈中的变量。

构造器

  • 构造器也称为构造方法,在创建对象时候必须调用,构造器有两个特点:a.名称必须和类名相同;b.必须没有返回类型,也不用写void。
  • 构造器的作用
    1.使用new创建对象的时候必须使用类的构造器。
    2.构造器中的代码执行后,可以给对象中的属性初始化赋值。
  • 构造器之间的调用使用this关键字调用,this这种调用放在构造器第一行。
  • Java中编写类即使没有写构造器,编译后会自动添加一无参构造器,即是默认构造器。

封装

  • 封装定义
    将复杂的内部细节特性全部封装起来,之对外提供一个可见的接口,就是封装。
  • 封装步骤
    1.使用private修饰需要封装的成员变量(私有目的就是对外不可见)。
    2.提供一个公开的方法设置或者访问私有属性的方法(set方法和get方法)。
  • 封装的作用和意义
    1.提高程序的安全性,保护数据,隐藏代码的实现细节(private)。
    2.统一用户的调用接口,提高系统的可维护性,便于调用者调用(统一的对外接口,set/get)。

继承

  • 继承概述
    继承是类和类之间的一种关系,继承的两个类,一个是子类(派生类),一个是父类(基类),子类继承父类,使用关键字extends来表示。

  • 继承特点
    1.继承是单继承,一个子类只能直接继承一个父类,一个父类可以被多个子类继承。
    2.父类中的属性和方法可以被子类继承,子类继承父类的属性和方法后,在子类中能不能直接使用这些属性和方法?与父类中这些属性和方法的修饰符(public,protected,default,private)相关的。例如:publish修饰的属性和方法可以直接被子类使用;private修饰的属性和方法不能直接被子类使用;
    3.Java中的每一个类都“直接”或者“间接”继承了Object类,也就是说Object类(自己除外)是所有类的父类。

  • 方法重写
    方法重写只存在于子类和父类之间(包括直接父类和简介父类),同一类中的方法只能重载,总结点有:
    1.方法重写必须存在继承关系。
    2.方法重写,方法名和形式参数必须跟父类是一致的。
    3.方法重写的时候,子类的权限修饰符要大于或者等于父类的权限修饰符(public>protected>default>private)。
    4.抛出异常的范围可以被缩小,不能扩大。(Exception < ClassNotFoundException)
    5.子类的返回值类型必须小于或者等于父类的返回值类型。(Strudent<Person)

多态

  • 多态概述
    多态是OOP中的一个重要特性,用来实现动态联编的,可以不需要关心某个对象到底是什么类型,就可以直接使用该对象的某些方法,实现了灵活编程,提高了系统的可扩展性。

  • 语法
    父类类型 父类对象名 = new 子类类型();

  • 注意事项
    1.多态是方法的多态,成员属性没有多态性。
    2.编写程序时,如果想调用运行时类型的方法,只能进行类型转换,不然不能通过编译器的编译。
    3.多态的存在3个必要条件:要有继承、要有方法重写(排除static,final,private,protected修饰的方法),父类引用指向子类对象。

  • 重写、重载和多态的区别
    1.重载是一个类中的多个相同方法名的方法,调用时候就需要确定调用的方法是谁,否则编译器报错。
    2.子类可以重写父类的属性和方法(排除static,final,private,protected),在调用重写方法时候,只有在运行期间确定是那个对象中的,才能进行调用(运行时动态和对象绑定)。

  • 方法绑定
    执行调用方法时,系统根据相关信息,能够执行内存地址中代表该方法的代码,非为静态绑定和动态绑定。
    静态绑定:在编译器完成绑定,可以提高代码的执行速度。
    动态绑定:通过对象调用的方法,采用动态绑定机制,这样提高了编程的灵活性,但是降低了代码的执行速度。
    Java中除了final类、final方法、static方法,其余所有方法JVM在运行期间才能进行动态绑定。

接口

  • 定义语法
public interface InterfaceDemo {

    // 接口静态常量 ,interface中所有变量默认都是public static final 修饰
    String INTERFACE_STATIC_VARIABLE = "静态常量";

    // 抽象方法
    void doSomething();

    // interface的静态方法
    static void staticMethod() {
        System.out.println("InterfaceDemo的静态方法");
    }
    
    // interface的默认方法
    default void doOtherSomething(){
        System.out.println("InterfaceDemo的默认方法");
    }
}
  • 接口特点
    1.接口中的属性默认都是静态常量,使用public static final进行修饰,该属性必须进行赋值。
    2.一个类可以实现多个接口,该类对象可以使用的方法有本类方法和多态父类引用接口中的方法。
    3.一个接口可以继承多个父接口。

  • Java8接口新特性
    1.接口可以有静态方法,用static修饰,使用接口类名进行调用,静态方法不能被子类所继承。
    2.接口可以有默认方法,用default修饰,子类可以对该方法进行继承重写,也可以使用子类对象进行父类方法调用。
    3.增加默认方法和静态方法,主要思想是降低:已存在接口增加添加方法时,原所有实现子类均需要增加实现抽象方法的优化。

内部类

  • 内部类概述
    1.内部类就是在一个类的内部再定义一个类,例如:A类中定义一个B类,那么B类想对于A类就是内部类,A类相对于B类就是外部类。
    2.但是一个java文件中有且只能有一个用public修饰的类。

  • 成员内部类(实例内部类,非静态内部类)的特点
    1.成员内部类的实例化,必须先实例化外部类对象,然后通过外部类对象去调用内部类构造。
    2.外部类的加载是在类加载阶段进行加载的(class源文件加载),而成员内部类的加载是在外部类对象对其进行初始化才进行加载的,因此成员内部类中不能有静态属性和方法(static修饰的将在类加载阶段进行初始化)。
    3.成员内部类中可以访问外部类的所有属性与方法(包括私有成员变量、方法、静态变量与方法)。
    4.当内部类与外部类有名字相同的属性和方法时候,成员内部类中要访问外部类该方法和属性,需要使用:外部类类名.this.方法或者属性。

  • 静态内部类(使用static修饰的内部类)的特点
    1.静态内部类初始化即可以使用外部对象进行初始化,也可以使用外部类名直接进行初始化。
    2.静态内部类中可以声明静态变量和方法。
    3.静态内部类中不能访问外部类的非静态属性和方法。

  • 局部内部类(一个方法内部申明的类)的特点
    1.局部内部类可以访问外部类的成员变量和方法。
    2.局部内部类中需要访问外部类该方法中的局部常量,那么该布局变量必须使用final修饰,也就是将该局部变量改为常量,该变量就会被放入常量池中,不会随着压栈和弹栈操作,局部变量被垃圾回收。
    3.局部内部类的实例化实在方法中定义局部内部类后续代码中直接实例化,不需要外部类对象进行实例化。

  • 匿名内部类的特点
    1.匿名内部类的语法是:new 父类名或接口名 () { 方法体}.方法名;,其中父类既可以是普通类也可以是抽象类。
    2.匿名内部类中使用外部类的成员变量或者方法时,需要使用:外部类名.this.成员变量或方法。

异常机制(Error/Exception)

  • 异常定义
    Java异常是一个描述在代码段中发生异常的对象,当异常发生时,一个代表该异常的对象被创建并且在产生该异常方法中抛出,然后根据方法调用关系,进行逐级传递。
  • Java异常分类
    1.错误(Error):由JVM生产并抛出,大多数错误与代码编写这所执行的操作无关。例如:JVM运行错误,OOM内存溢出等
    2.异常(Exception):是表示用户程序可能捕捉的异常情况或者是程序可以处理的异常情况,例如:运行异常、IO异常等。

Error通常是灾难性的致命的错误,是程序无法控制和处理的,当出现时候,JVM一般会选择终止线程;Exception通常情况下是可以被程序处理的,并且在程序中应当京可能的去处理这些异常。

  • 异常检查和不受检查的异常
    1.检查异常:正常运行的程序中,很容易出现一些清理可容的异常情况,在一定程度上这些异常是可以预测的,是可以捕捉并对应处理的。
    2.不受检查异常:包括RuntimeException及其子类和Error。

  • Java异常处理机制
    1.抛出异常
    遇到或者产生异常时候,就会实例化一个对应的异常对象,然后当前的代码执行路径被终止,并且从当前环境中弹出(传递出)该异常对象的引用。例如: throw new NullPointerException();
    2.捕获异常
    (1)在方法抛出异常之后,运行时系统将转化为寻找合适的异常处理器,当异常处理其所能处理的异常类型与抛出异常相匹配时,就是合适的异常处理器。
    (2)运行时系统从发生异常的方法开始,一次回查调用栈中的方法,直到找到好友合适的异常处理器的方法并执行。
    (3)当运行系统便遍历调用栈也没有找到合适的异常处理器,则系统终止,程序终止。
    (4)由于运行时异常及其子类的不可查性,Java规定,运行时异常将由系统自动抛出,允许应用程序忽略运行时异常。

  • 代码捕获异常处理
    异常捕获处理5个关键字:
    (1)try:用于监听。将要被监听的代码(可能抛出异常的代码)放在try代码块内,当异常发生时候, 异常就会被捕获抛出。
    (2)catch:用于捕获异常。catch用来捕获try代码块产生的异常,并进行合适异常处理器的匹配。
    (3)finally:finally语句块总是会被执行,整个捕获处理中,此处代码都会被运行,与产生异常没有关系,通常用来回收try代码块中打开的资源(数据链接,网络链接等)
    (4)throw:方法体中,抛出异常关键字。
    (5)throws:用于方法签名中,声明该方法可能抛出的异常。

  • 13
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Starry-Leo

帮到了您,有闲钱,再打赏哦~

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

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

打赏作者

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

抵扣说明:

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

余额充值