Java你需要了解的基础知识点(一)面向对象的三大特点

 2024-03-20 01:16:34  阅读 0

面向对象三大特性:封装、继承、多态

封装:将事物抽象成对象,将对象的属性私有化,并提供一些方法供外界访问属性;

封装就是将流程和数据包围起来,对数据的访问只能通过定义好的接口。 面向对象计算始于这样一个基本概念:现实世界可以表示为一系列完全自治的封装对象,这些对象通过受保护的接口访问其他对象。 封装是Java中通过关键字 和 实现的一种信息隐藏技术。 什么是封装? 封装将对象的所有组件组合在一起。 封装定义了程序如何引用对象的数据。 封装实际上是利用方法来隐藏类的数据,并控制用户可以修改类和访问数据的程度。 适当的封装可以使程序代码更容易理解和维护,同时也增强了程序代码的安全性。

​继承:子类扩展新的数据字段或函数,并复用父类的属性和函数,单一继承,多重实现;

继承是面向对象编程最重要的特性之一。 继承是从现有类派生新类。 新的类可以吸收现有类的数据属性和行为,并且可以扩展新的功能。

Java继承是一种使用现有类的定义作为基础来创建新类的技术。 新类的定义可以添加新数据或新功能,或者使用父类的功能,但不能选择性继承父类。

该技术使得可以非常容易地重用以前的代码,从而可以大大缩短开发周期并降低开发成本。 例如,您可以首先定义一个名为汽车的类。 汽车具有以下属性:车身尺寸、颜色、方向盘和轮胎。 然后,从汽车类派生出汽车和卡车这两个类。 汽车加一个小后备箱,卡车加一个小后备箱。 添加一个大货箱。

​多态:通过继承(多个子类重写同一个方法),或者通过接口(实现接口和重写接口)

多态性是同一行为具有多种不同表现形式或形状的能力。

多态就是同一个接口,使用不同的实例执行不同的操作

多态性存在的三个必要条件

1、继承或实现:在多态中,必须存在有继承或实现关系的子类和父类。

2、方法的重写:子类重新定义父类中的某些方法(重写,使用@注解重写)

3、基类引用指向派生类对象,即父类引用指向子类对象。 父类类型:指子类对象继承的父类类型,或者实现的父接口类型。

1.Java和C++的区别

​ 区别:C++支持多重继承,有指针的概念,程序员自己管理内存; Java具有单继承,可以使用接口来实现多继承。 Java没有提供直接访问内存的指针,因此程序内存比较安全,并且Java有JVM自动内存管理机制,不需要程序员手动释放未使用的内存。

2. 多态实现原理

多态性的底层实现是动态绑定,它在运行时将方法调用与方法实现关联起来。

静态绑定和动态绑定:

​ 一种是编译时确定的,称为静态分派,比如方法重载;

​ 一种是运行时确定的,称为动态调度,比如方法覆盖(重写)、接口实现等。

多态实现

当前方法调用的栈帧(局部变量表、操作栈、动态连接、返回地址)会保存在虚拟机栈中。 多态的实现过程就是方法调用的动态调度过程。 如果子类重写了父类的方法,那么在多态调用时,动态绑定过程会首先判断实际类型是子类,从而先查找子类。 中。这个过程的本质就是方法覆盖。

3.最后一个关键词

**:**可以修改属性和方法

​修改属性:

​ 类级别属性,由所有对象共享,在创建对象之前,在类加载时加载(仅加载一次); 可以直接使用类名来调用。

修改方法:

​ 随着类的加载而加载; 可以直接使用类名来调用; 静态方法中只能调用静态成员,不能使用this;

**final:** 关键字主要用在三个地方:变量、方法、类。

​ 最终修改变量:

​ 如果是基本数据类型的变量,其值一旦初始化就不能改变;

​ 如果是引用类型变量,初始化后就不能指向另一个对象。

​ 最终修改方法:

​ 锁定方法,防止任何继承类修改其含义(重写); 类中的所有方法都隐式指定为final。

​ 最终修改后的类:

​ 当final修饰一个类时,表明该类不能被继承。 最终类中的所有成员方法都隐式指定为最终方法。

类不能被继承。 除了final关键字之外,构造函数也可以私有化。 (内部类无效)

4. 抽象类和接口

**抽象类:**包含抽象方法的类,即修饰的类; 抽象类只能被继承,因此不能使用final修饰,并且抽象类不能被实例化。

**接口:**接口是一个抽象类型和抽象方法的集合。 该接口支持多重继承。 接口中定义的方法默认为修改后的抽象方法。

相同点:

① 抽象类和接口都不能被实例化

② 抽象类和接口都可以定义抽象方法,子类/实现类必须重写这些抽象方法。

不同之处:

① 抽象类有构造函数,接口没有构造函数。

③抽象类可以包含普通方法,接口只能修改抽象方法(Java 8之后可用)

③ 抽象类只能单独继承,接口可以多次继承。

④抽象类可以定义各种类型的成员变量,接口只能是final修饰的静态常量。

抽象类的使用场景:

​ 不仅希望约束子类具有共同的行为(但不再关心如何实现),还希望具有默认方法和实例变量。

接口应用场景:

约束多个实现类具有统一的行为,但不关心每个实现类是如何实现的; 实现类中的各个函数之间可能没有联系

5. 泛型和泛型删除

泛型:

泛型的本质是参数化类型。 这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口和泛型方法。

通用擦除:

Java 的泛型是伪泛型。 使用泛型时,会添加类型参数,当编译器编译生成的字节码时,类型参数将被删除。 这个过程称为类型擦除。

List等类型编译后会变成List。 JVM看到的只是List,泛型附加的类型信息对于JVM来说是不可见的。

可以通过反射添加其他类型的元素

6.反射原理及使用场景

Java反射:

​ 表示在运行状态下,任何一个类都可以知道该类的所有属性和方法; 并且可以调用它的任何方法;

反射原理:

​ 反射首先获取Java中反射类的字节码,然后将字节码中的方法、变量、构造函数等映射到对应的、Filed等类中。

​ 如何获取Class的实例:

	1.类名.class(就是一份字节码)
	2.Class.forName(String className);根据一个类的全限定名来构建Class对象
	3.每一个对象多有getClass()方法:obj.getClass();返回对象的真实类型

使用场景:

7.Java异常系统

是Java语言中所有错误或异常的超类。下一级分为Error和

错误:

​指Java运行时系统的内部错误和资源耗尽错误。 应用程序不会抛出此类的对象。 如果出现这样的错误,除了通知用户之外,剩下的就是尝试安全终止程序。

包括: ,

编程错误可以分为三类:语法错误、逻辑错误和操作错误。

语法错误(也称为编译错误)是编译过程中发生的错误。 语法错误是由编译器发现的。

逻辑错误是指程序的执行结果不符合预期。 通过调试可以定位和发现错误原因。

运行时错误是导致程序异常终止的错误。 运行时错误需要通过异常处理来处理。

:运行时异常,程序从逻辑角度应该尽可能避免此类异常的发生。

​ 例如,;

:检查异常,程序用它来捕获并处理

​ 如,,;

标签: 泛型 抽象类 多态

如本站内容信息有侵犯到您的权益请联系我们删除,谢谢!!


Copyright © 2020 All Rights Reserved 京ICP5741267-1号 统计代码