Java oop知识点

记得老师的一句话,在Java的学习中,永远都不要忘记自己是一个oop程序员

一、面向对象基础

1、类与对象:

1.类:类是OOP编程的基础,它定义了一组具有相同属性和方法的对象的集合。类是对象的蓝图或模板,可以用来创建对象。

2.对象:对象是类的实例。每个对象都有其自身的属性和方法。

二、面向对象中级

1、面向对象三大特征:封装,继承,多态

1.封装:封装是OOP中的一个重要概念,它意味着将数据和操作数据的函数捆绑在一起,形成一个独立的实体。这有助于隐藏对象的内部状态,并确保对象的行为的一致性。

2.继承:继承是一种方式,让一个类继承另一个类的属性和方法。这样可以提高代码的复用性,因为子类可以自动继承父类的属性和方法。

3.多态:多态意味着一个接口可以有多种实现方式。在OOP中,多态通常通过继承和接口实现。

三、面向对象高级

1、类变量和类方法:

类变量也叫静态变量/静态属性,是该类的所有对象共享的变量,任何一个该类的对象去访问它时,取到的都是相同的值,同样任何一个该类的对象去修改它时,也是修改的同一个变量。

类方法也叫静态方法

2、代码块

Java代码块(Code Block)是一段代码片段,可以包含任何Java程序段,例如类、方法、变量、甚至是另一个代码块。它存在于Java语言中,被用于控制访问和作用域。Java中被广泛使用的代码块类型包括类初始化块、实例初始化块、局部代码块和synchronized代码块等。

类初始化块是一种在类被实例化之前,静态代码块初始化的机制。它是类中的其中一段代码,在类加载时执行,而且只执行一次,此后无论这个类实例化多少次,这段代码只会被执行一次。这是因为它不属于对象,而是类的属性。

实例初始化块是在对象实例化时运行的代码块。它可以对实例变量进行初始化或执行一些其他操作。类中可以有多个实例初始化块,它们将按照在类中出现的顺序的方式执行。实例初始化块比构造函数优先执行,每次新建一个对象的时候,它都会被执行一次。

3、抽象类

抽象类是一种不能被实例化的类,其目的是为了被其它类继承并实现其抽象方法。抽象方法是一种没有实现的方法,只有定义,需要在子类中被实现。抽象类可以包含非抽象方法和属性,但至少要有一个抽象方法。在Java中,抽象类用abstract关键字来修饰,而抽象方法同样使用abstract关键字来修饰。

4、接口

在Java编程语言中,接口是一种重要的抽象机制,用于定义一组方法的行为规范,这些方法没有具体的实现,而是由实现接口的类来提供具体的实现。接口提供了一种方式来指定一个类必须实现的方法,但不指定这些方法的具体实现,从而实现了代码的可扩展性、可维护性和灵活性。

5、内部类

内部类(Inner Classes),顾名思义,是指在另一个类的内部定义的类。它们可以访问外部类的成员,包括私有成员,这是外部类无法做到的。内部类根据其定义位置和访问修饰符的不同,可以分为四种主要类型:成员内部类、局部内部类、静态内部类和匿名内部类。

成员内部类

成员内部类是最常见的一种内部类形式,它作为外部类的一个成员被定义。成员内部类可以访问外部类的所有成员,包括私有的成员变量和方法。定义时,成员内部类可以使用public、protected、private或默认(包级)访问修饰符,这决定了其他类如何访问这个内部类。

静态内部类

静态内部类,也称为嵌套类(Nested Classes),通过static关键字定义。与成员内部类不同,静态内部类不能访问外部类的实例成员,只能访问外部类的静态成员。由于它们不需要依赖于外部类的实例,因此在某些场景下更为高效,如用于创建实用工具类或枚举类型。

局部内部类

局部内部类是在方法或构造函数中定义的内部类,它们的生命周期仅限于该方法或构造函数的执行期间。局部内部类可以访问方法内的局部变量,但是这些变量必须声明为final,因为局部内部类的对象可能在方法执行结束后仍然存在,而局部变量的值必须保持不变。

匿名内部类

匿名内部类没有名称,通常用于创建只使用一次的类实例,尤其是在事件监听器等场景中。它们通过实现接口或继承类并在同一行代码中创建对象的方式来定义。匿名内部类通常用于简化代码,避免创建额外的类文件,但同时也降低了代码的可读性和可维护性。

6、枚举

枚举是一种特殊的数据类型,之所以特殊是因为它既是一种类(class)类型却又比类型多了些特殊的约束,但是这些约束的存在也造就了枚举类型的简洁,安全性以及便捷性。创建枚举类型要使用enum关键字,隐含了所创建的类型都是java.lang.Enum类的子类(java.lang.Enum是一个抽象类)。枚举类型符合通用模式Class Enum>,而E表示枚举类型的名称。枚举类型的每一个值都映射到protected Enum(String name,int ordinal)构造函数中,在这里,每个值的名称都转换成一个字符串,并且序数设置表示了此设置被创建的顺序。

7、注解

是一种元数据形式,用于向Java代码中的各种元素(如类、方法、字段等)提供额外的信息。注解是在Java 5中引入的一项特性,它们不直接影响代码的执行,而是提供了一种机制来对代码进行标记和解释。注解以@符号开头,放置在注解目标前面。Java提供了一些内置的注解(如‌@Override和@Deprecated),同时也支持自定义注解。‌

注解的主要作用包括:

  • 提供文档:通过注解生成文档,帮助开发者理解代码的功能和用途。
  • 编译检查:通过注解进行基本的编译检查,如方法重写检查。
  • 反射:通过反射机制读取注解信息,实现动态处理。

8、异常

中,异常(Exception)是指程序执行过程中可能出现的不正常情况或错误。它是一个事件,它会干扰程序的正常执行流程,并可能导致程序出现错误或崩溃。

异常在Java中是以对象的形式表示的,这些对象是从java.lang.Throwable类或其子类派生而来。Throwable是异常类层次结构的根类,它有两个主要的子类:java.lang.Exception和java.lang.Error。

Exception(异常):java.lang.Exception是表示可检查异常的基类。可检查异常是指在编译时需要显式处理的异常。Exception类及其子类用于表示程序运行过程中可能出现的外部条件、错误或其他可恢复的情况。例如,文件未找到、网络连接中断、输入格式错误等。开发人员需要通过捕获或声明这些异常来确保在程序中进行适当的异常处理。

Error(错误):java.lang.Error是表示严重问题或系统级错误的基类。错误是指那些程序通常无法处理或恢复的情况,例如内存溢出、堆栈溢出、虚拟机错误等。与异常不同,错误不需要在程序中显式处理,因为它们通常表示了无法解决的问题。

异常在Java中通过抛出(throw)和捕获(catch)的方式进行处理。当程序执行到可能引发异常的代码时,可以使用throw语句手动抛出异常对象。然后,可以使用try-catch语句块来捕获异常,并在catch块中提供相应的异常处理逻辑。在catch块中,可以根据异常的类型执行适当的操作,如日志记录、错误报告或异常处理。如果异常没有在当前方法中被捕获处理,它将继续向上级调用栈传播,直到找到合适的异常处理代码或导致程序终止。

9、集合

集合类是Java数据结构的实现。Java的集合是Java.util包中的重要内容,它允许以各种方式将元素分组,并定义了各种使这些元素更容易操作的方法。Java集合类是Java将一些基本的和使用频率极高的基础类进行封装和增强后再以一个类的形式提供。集合类是可以往里面保存多个对象的类,存放的是对象,不同的集合类有不同的功能和特点,适合不同的场合,用以解决一些实际问题。

10、泛型

Java 泛型(generics)是 JDK 5 中引入的一个新特性, 泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型。

泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。

11、线程

在Java中,线程是指程序中的一段顺序控制流,它负责程序的执行。线程是操作系统进行运算调度的最小单位,被包含在进程之中,是进程中的实际运作单位。一个进程可以包含多个线程,这些线程可以并发执行不同的任务,从而提高CPU资源的利用率。‌12

Java提供了两种方式来创建线程:通过继承Thread类并重写run方法,或者通过实现Runnable接口并实现其run方法。每个线程都有一个线程体,它包含了线程要执行的任务代码。线程的创建和启动通常涉及创建一个Thread对象或Runnable对象,并通过调用其start方法来启动线程。‌

线程的生命周期包括创建、就绪、运行、阻塞和终止等状态。线程的调度由JVM管理,尽管我们无法直接控制线程调度程序,但可以通过编写代码来影响线程的执行顺序和方式。‌

12、IO

在‌Java中,IO(输入/输出)是处理数据输入和输出的关键部分,它涉及从文件、网络、键盘等读取数据,或将数据写入屏幕、文件、网络等。Java的IO机制基于数据流进行输入输出,这些数据流表示了字符或字节数据的流动序列。Java的IO流提供了读写数据的标准方法,使得表示数据源的对象能够以数据流的方式读写其数据。Java的IO流可以分为字节流和字符流,其中字节流一次传送一个字节,而字符流一次传送一个字符。此外,Java还提供了缓冲流来提高IO性能,以及转换流将字节流转换为字符流。‌

13、网络编程

网络编程是指编写运行在多个设备(计算机)的程序,这些设备都通过网络连接起来。

java.net 包中 J2SE 的 API 包含有类和接口,它们提供低层次的通信细节。你可以直接使用这些类和接口,来专注于解决问题,而不用关注通信细节。

java.net 包中提供了两种常见的网络协议的支持:

TCP:TCP(英语:Transmission Control Protocol,传输控制协议) 是一种面向连接的、可靠的、基于字节流的传输层通信协议,TCP 层是位于 IP 层之上,应用层之下的中间层。TCP 保障了两个应用程序之间的可靠通信。通常用于互联网协议,被称 TCP / IP。

UDP:UDP (英语:User Datagram Protocol,用户数据报协议),位于 OSI 模型的传输层。一个无连接的协议。提供了应用程序之间要发送数据的数据报。由于UDP缺乏可靠性且属于无连接协议,所以应用程序通常必须容许一些丢失、错误或重复的数据包。

14、事务

在Java中,事务是指作为单个逻辑工作单元执行的一系列操作,这些操作要么全部成功执行,要么全部失败回滚。事务是数据库操作的基本单位,用于确保数据的完整性和一致性。事务的正确执行使得数据库从一种状态转换成另一种状态。事务必须服从ISO/IEC所制定的ACID原则,即原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability)

15、反射

Java反射是一种强大的机制,它允许程序在运行时对自身进行检查和修改。通过反射,Java程序可以访问、检测和修改其自身的状态和行为。这种能力使得Java程序更加灵活和动态,能够在运行时根据需要调整其行为。

在反射一个类时,往往需要其有无参构造器

 

 

  • 13
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
多态是面向对象编程中的一个重要概念,它允许我们使用父类类型的引用来引用子类对象,从而实现编译时的静态绑定和运行时的动态绑定。 在Java中,实现多态的关键是通过继承和方法重写来实现。 首先,我们需要有一个父类(基类)和一个或多个子类(派生类)。父类是一个通用的类型,而子类则是对父类的特化。子类继承了父类的属性和方法,并且可以添加自己的属性和方法。 接下来,我们需要在父类和子类中定义一个具有相同名称、参数列表和返回类型的方法。这个过程称为方法重写。子类可以根据自身的特性来重新实现从父类继承的方法。 当我们使用父类类型的引用来引用子类对象时,编译器会根据引用类型而不是对象类型来确定可以调用哪些方法。然而,实际调用的方法是根据对象的类型来确定的,这就是多态的运行时绑定。 多态有助于提高代码的灵活性和可扩展性。通过使用多态,我们可以编写通用的代码,适用于多个子类对象,而不需要为每个子类编写特定的代码。 下面是一个示例代码,演示了多态的使用: ```java class Animal { public void makeSound() { System.out.println("Animal makes sound"); } } class Dog extends Animal { @Override public void makeSound() { System.out.println("Dog barks"); } } class Cat extends Animal { @Override public void makeSound() { System.out.println("Cat meows"); } } public class PolymorphismExample { public static void main(String[] args) { Animal animal1 = new Dog(); Animal animal2 = new Cat(); animal1.makeSound(); // 输出:Dog barks animal2.makeSound(); // 输出:Cat meows } } ``` 在上面的例子中,我们定义了一个父类 Animal 和两个子类 Dog 和 Cat。它们都具有相同的方法 makeSound,但是子类对该方法进行了不同的实现。 在 main 方法中,我们创建了一个父类类型的引用 animal1,并将其指向一个 Dog 对象;创建了另一个父类类型的引用 animal2,并将其指向一个 Cat 对象。然后分别调用它们的 makeSound 方法。由于多态的存在,实际调用的是子类的方法,输出结果分别是 "Dog barks" 和 "Cat meows"。 这就是多态在Java中的基本使用和原理。通过多态,我们可以编写更加灵活和可复用的代码。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值