20 面向对象编程[OOP(Object Oriented Programming)]

简介: OOP编程类包含五大成员:属性、方法、构造器、代码块、内部类

OOP编程


类包含五大成员:属性、方法、构造器、代码块、内部类


1🚩 类变量(静态变量)与类方法(静态方法)


类变量或类方法也叫静态变量或静态方法,用修饰符【static】修饰


1.1 类变量(静态变量)


(1)概念:指在类中被static修饰的变量;

内存分布及生命周期:

(1). 一个静态变量是被同一个类的多个对象所共享的;

(2). 静态变量是在类加载的时候生成,类销毁的时候消失

【在jdk8以前是在方法区的静态域存放,在jdk8以后在堆内存中】

(2)静态变量的访问

访问格式:

① 类名.静态变量名

② 对象名.静态变量名

代码示例:

class TestDemo {
    static int count =100;
}
public class MainTest {
    public static void main(String[] args) {
//        类名.静态变量名
        System.out.println(TestDemo.count);
//        对象名.静态变量名
        System.out.println(new TestDemo().count);
    }
}

(3) 类变量的使用场景

当需要让某个类的对象共享一个变量时候可以使用类变量;


1.2 类方法(静态方法)


(1)概念: 静态方法指在类中被static修饰的方法;类方法可以通过类名直接调用,不用创建对象,简化调用过程,提高开发效率;

(2)使用: 静态方法只能访问静态成员,非静态方法可以访问静态成员与非静态成员

【工具类中方法大多用类方法,比如Math类中方法等】


1.3 main方法的语法


(1)代码示例:

public static void main(String[] args) {
      //方法体  
    }

(2)main方法的三大疑问?

①为什么被public修饰?

答: main方法是被java虚拟机直接调用的

②main方法为什么用static修饰?

答:因为虚拟机在调用时不需要创建对象;

③main方法中的字符串数组String[] args形参是什么时候被传值的?

答:在执行main方法时添加,会被打包成字符串数组

eg:

java 执行的程序 参数1 参数2 参数3 …

11.png


2🚩 代码块


2.1 代码块基本语法


(1)概念: 代码块又称初始化块,属于类的一个成员,与方法相似;

(2)代码块分类: 普通代码块和静态代码块

①普通代码块:没被static修饰的代码块,非静态代码块

{
 //内容
    }

①静态代码块:被static修饰的代码块为静态代码块

static {
 //内容        
    }

(3) 代码块执行时间

在使用构造器创建对象之前执行;

对代码块的理解【是对构造器的补充机制,可做初始化操作】


2.2 代码块使用的注意事项


(1) 静态代码块作用及注意事项

对类进行初始化,且随着类的加载而执行只执行一次;

【普通代码块每创建一个对象,执行一次】

(2)补充:类什么时候加载?

①创建对象实例时

②创建子类对象实例时

③使用类的静态成员时


2.3 类中部分成员的执行顺序


静态属性(初始化)/代码块 => 普通属性(初始化)/代码块 => 构造器他们的执行顺序

(1) 静态属性初始化与静态代码块的执行,优先执行

在静态属性初始化与静态代码块之间执行按照先后顺序执行

(2)普通属性初始化与普通代码块的执行,在静态属性初始化与静态代码块之后

在普通属性初始化与普通代码块之间执行按照顺序执行

(3) 构造器最后执行

构造器的最前面,隐藏了①super()和②普通代码块


3 🚩抽象类


被abstract修饰的方法叫抽象方法,被abstract修饰的类叫抽象类;

【abstract只能修饰类和方法不能修饰其他内容】


3.1 抽象类的使用


(1) 抽象类不能实例化;

(2)一个类继承了抽象类必须重写其中抽象方法,除非本身也是抽象类

(3)抽象方法不能被 final、static、private修饰【与重写相违背】


java设计模式—模板设计模式:可以体现抽象类的的作用


4 🚩接口


概念: 💡 接口就是把给出的一些未实现的方法,封装到一起;某个类需要实现接口的时候再重写这些方法


4.1 接口简介


格式:

interface 接口名{

属性

方法

}

【注意:在jdk7以前接口中的方法不允许出现方法体;jdk8以后可以有静态方法,默认方法】


4.2 实现接口和继承类有什么区别


继承之间的关系是:“is a…”

实现接口之间的关系是:“like a…”

(1) 接口和继承解决的问题不同

①继承:解决代码复用性和可维护性问题

②接口:接口主要是设计好的规范(方法),让其他类去实现这些方法;

(2) 接口比继承更加灵活,只需要满足“like a…”就可以使用

(3) 接口在一定程度上实现解耦


4.3 接口的多态


(1)接口类型的变量可以指向、实现接口的实现类的对象

(2) 在定义方法时,形式参数为接口类型,实参可以使用接口的实现类;

(3) 接口可以实现多态数组

定义接口类型数组,可存放不同接口实现类的对象

4) 接口可以多态传递

接口与接口之间有继承关系,如A接口继承B接口,F类实现了B接口;那么A类型的变量可以指向F类的对象;


5 🚩内部类


5.1 内部类的特点


可以直接访问私有属性,并且可以体现类与类之间的包含关系


5.2 四种内部类简介


1) 定义在外部类的局部位置上(如方法

①局部内部类(有类名)

②匿名内部类(无类名)

(2) 定义在外部类的成员位置

③成员内部类(无static修饰)

④静态内部类(被static修饰)


5.3 局部内部类


概念: 局部内部类是指被定义在外部类的局部位置(如方法中)且有类名;


(1) 局部内部类定义在方法或者代码块中

(2) 作用域在方法体或者代码块中

(3) 本质也是一个类

(4) 当外部类与局部内部类属性重名时,用属性名访问遵循就近原则;若要访问外部类属性可以用【外部类名.this.属性名】


5.4 匿名内部类【重要】


需要注意的四点知识:

①本质是类

②内部类

③该类没有名字

④同时还是一个对象

定义在外部类的局部位置,

(1)基本构成

new 类或接口(参数列表){

类体

}


目录
相关文章
|
3月前
|
Python
类与面向对象编程(Object-Oriented Programming, OOP)
类与面向对象编程(Object-Oriented Programming, OOP)
|
Java Python
Python面向对象编程04:重写object通用函数
正式的Python专栏第39篇,同学站住,别错过这个从0开始的文章!
234 0
Python面向对象编程04:重写object通用函数
|
Java 开发者 Windows
OOP面向对象编程(Object-Oriented Programming)概述
Java的编程语言是面向对象的,采用这种语言进行编程称为面向对象编程(Object-Oriented Programming, OOP)。
|
人工智能 Python 设计模式
[python作业AI毕业设计博客]Python 3 面向对象编程(第3版) 中英文Python 3 Object-Oriented Programming 3rd Edition - 2018.pdf
python测试开发项目实战-目录 python工具书籍下载-持续更新 python 3.7极速入门教程 - 目录 第2版 中文 介绍 本书主要介绍如何使用Python 3进行面向对象编程。1~4章介绍面向对象这一编程范式的基本准则,以及Python是如何运用这些准则实现面向对象编程的;第5~8章,介绍如何利用Python中的内置函数快速、简单地实现面向对象编程;第9~11章介绍了许多面向对象编程中常用的设计模式,以及如何使用符合 Python 语言习惯的方式来实现这些设计模式;最后第12、13章介绍了Python 3中并发编程相关的主题。
|
22天前
|
存储 Java 程序员
Java基础的灵魂——Object类方法详解(社招面试不踩坑)
本文介绍了Java中`Object`类的几个重要方法,包括`toString`、`equals`、`hashCode`、`finalize`、`clone`、`getClass`、`notify`和`wait`。这些方法是面试中的常考点,掌握它们有助于理解Java对象的行为和实现多线程编程。作者通过具体示例和应用场景,详细解析了每个方法的作用和重写技巧,帮助读者更好地应对面试和技术开发。
76 4
|
2月前
|
Java
Java Object 类详解
在 Java 中,`Object` 类是所有类的根类,每个 Java 类都直接或间接继承自 `Object`。作为所有类的超类,`Object` 定义了若干基本方法,如 `equals`、`hashCode`、`toString` 等,这些方法在所有对象中均可使用。通过重写这些方法,可以实现基于内容的比较、生成有意义的字符串表示以及确保哈希码的一致性。此外,`Object` 还提供了 `clone`、`getClass`、`notify`、`notifyAll` 和 `wait` 等方法,支持对象克隆、反射机制及线程同步。理解和重写这些方法有助于提升 Java 代码的可读性和可维护性。
|
4月前
|
Java
【Java基础面试二十】、介绍一下Object类中的方法
这篇文章介绍了Java中Object类的常用方法,包括`getClass()`、`equals()`、`hashCode()`、`toString()`、`wait()`、`notify()`、`notifyAll()`和`clone()`,并提到了不推荐使用的`finalize()`方法。
【Java基础面试二十】、介绍一下Object类中的方法
|
4月前
|
前端开发 Java 编译器
【前端学java】java中的Object类和前端中的Object有什么区别(9)
【8月更文挑战第10天】java中的Object类和前端中的Object有什么区别
45 0
【前端学java】java中的Object类和前端中的Object有什么区别(9)