面向对象编程 OOP Object Oriented Programming

面向对象是一种对现实世界理解和抽象的方法,是计算机编程技术发展到一定阶段后的产物。
面向对象是相对于面向过程来讲的,面向对象方法,
把相关的数据和方法组织为一个整体来看待,从更高的层次来进行系统建模,更贴近事物的自然运行模式

面向过程编程 POP Procedure Oriented Programming

是一种以过程为中心的编程思想。这些都是以什么正在发生为主要目标进行编程,不同于面向对象的是谁在受影响。

面向对象的几个重要特性

- 封装 Encaosulation 隐藏具体的实现细节,提供一个可访问的途径

- 继承 Inheritic 提高代码可重用性,抽取事物的共性

- 多态 Polymorphism  具体可实现的实例多样化

- 抽象 Abstract 对类的本身也抽象化了

面向对象程序设计的重点是对类的设计

设计类,就是设计类的成员

类和对象的关系?

什么是类? 类是对一类事物的描述,是概念的定义

理解类,对自然事物的归类,所具有的共性,就可归为一类

例如,人,猫,狗,就是对这些实际存在的动物进行归类,这只是笼统的描述,不是具体的实例 instance

就像说吃水果,只是描述,并没有具体指出是什么水果

对象,即描述的具体展现,是实际存在的事物,因此称为实例,

对象由类产生,具有类所描述的一切特性,主要包括特征和行为

特征即是对象的属性,行为即是对象的方法

  1. package cn.dai;
  2.  
  3. public class Person {
  4. // 类的主要部分
  5.  
  6. // 属性 == 字段 == 成员变量 == 域 == field
  7. int age;
  8. String name;
  9.  
  10. // 行为 == 方法 == 成员方法 == 函数 == method == function
  11. public void walk(){
  12. System.out.println("行走,散步");
  13. }
  14.  
  15. public void talk(){
  16. System.out.println("交流,谈吐");
  17. }
  18. }

实例化与调用

  1. package cn.dai;
  2.  
  3. public class Create {
  4. public static void main(String[] args) {
  5.  
  6. // 创建我们定义的类的实例
  7.  
  8. // 类名 引用名 引用指向 类实例
  9. Person person = new Person();
  10.  
  11. // 引用可以访问我们的属性 .引用
  12. person.name = "张三";
  13.  
  14. person.age = 22;
  15.  
  16. // 还可以是我们的方法
  17. person.talk();
  18. person.walk();
  19. }
  20. }

1 创建类,设计类成员

2 创建类的实例

3 调用实例的属性或者方法

类的多个对象的关系

- 每个创建出来的实例,在内存空间都有独立的存储空间 ,new 即代表新的意思

- 所以每个对象的属性和方法,是独立存在,而不是公用的

- 修改对象A的属性不会影响对象B的属性

关于new 关键字的解释:

https://blog.csdn.net/yanyuan904/article/details/80022647

https://blog.csdn.net/topdeveloperr/article/details/81194654

- 为对象开辟内存空间。

- 调用类的构造方法。

- 将生成的对象的地址返回。

属性与局部变量

成员变量和局部变量的区别?

https://www.cnblogs.com/huangminwen/p/5935130.html

- 属性定义在类体当中

- 属性可以只声明不初始化赋值,当实例创建时,赋值为默认缺省值

- 属性的作用域可以在类中的所有成员方法中

- 局部变量 只声明在方法中

- 局部变量 声明必须要在方法中赋值

- 局部变量的作用域只作用在这个方法之内

- 属性加载在堆空间中,而局部变量加载在栈空间

访问权限的设置

- private 修饰的方法和属性或者内部类 只能作用在本类之内,外部无法访问

- default 默认不写的,允许在同一个包下访问

- protected 所继承的子类可以访问,子类可以不同包

- public 可以被任意访问

访问修饰级别的解释

https://blog.csdn.net/qq_41174684/article/details/90677921

方法/函数的用法

https://www.cnblogs.com/lavender-li/p/5681790.html

- 状态修饰  访问修饰

- 返回类型

- 方法名称

- 参数列表

- 返回值

- return 表示方法的结束,在方法体return之后写下的代码都不再执行,第二时携带返回值,要注意的是 return 不能声明执行语句

- 方法可以递归,但不能在方法中声明方法

  1. package cn.dai;
  2.  
  3. public class Person {
  4.  
  5. // [状态类型][访问级别] 返回类型 方法名称(参数列表) { 方法体 }
  6. public int summation(int ...args){ // 参数列表,可以是一个或者多个参数,没有类型限制,参数就是要执行方法前必需注入的数据,这里采用了一个可变参数
  7.  
  8. // 具体执行实现的细节 也就是方法体
  9. int sum = 0;
  10. for (int param : args){
  11. sum += param;
  12. }
  13. return sum; // 方法的返回值,定义的int返回类型,所以值也必须是int类型的值,void 表示空,所以可不写return
  14. }
  15. }

递归算法

https://blog.csdn.net/f5465245/article/details/77946468

构造方法 / 构造器 Constructor

https://blog.csdn.net/qiuzhongweiwei/article/details/78965788

https://blog.csdn.net/zqixiao_09/article/details/50550035

构造重载 在初始化的同时注入参数

对象 / 实例 instance 的内存解析

匿名对象的介绍

https://blog.csdn.net/lxxiang1/article/details/82085271

- 匿名对象没有声明引用指向

- 匿名对象可以调用属性和方法

- 因为没有引用指向,在不是建造者模式的情况下,只能调用一次方法或者属性;

重载 Overload

https://www.cnblogs.com/xdp-gacl/p/3637321.html

- 在本类中允许一个以上的同名方法 但是此参数的个数和参数的类型不能相同

- 重载允许不同的返回类型和权限访问

可变参数 Variable Number Of Arguments

https://blog.csdn.net/lxxiang1/article/details/82312799

- 可变参数的本质是一个Object数组

- 可变指的是这个参数的个数可变

- 要注入多个参数,可变参数必须放在参数列表的最后一个

- 单个参数和同类型可变参数符合重载的规定

- 最多只允许声明一个可变参数

实参的值传递机制

- 当形参是基本类型时,是注入实参的数据值传递给形参【给的字面值】

- 当形参是引用类型时,是注入实参的地址值传递给形参【给的内存地址】

final关键字的解释:


- 可修饰类、方法、属性、

- 修饰类  被修饰的类不能被洽谈类所继承

- 修饰方法  被修饰的方法不能被重写

- 修饰变量  

  被修饰的属性,有且只有一次赋值的机会  可以 1 显示初始化声明、2 代码块中初始化赋值、3 构造器中初始化

  被修饰的局部变量  表示是一个常量

- static final 表示为全局常量

https://www.cnblogs.com/dolphin0520/p/3736238.html

static关键字的解释:

- 表示静态的,常态的

- 用来修饰 属性、方法、代码块、内部类

- 类创建的实例共享静态变量

- 静态变量随类的加载而加载

- 静态修饰的类成员优先实例加载,类只会加载一次,静态成员再内存中只存在一个,再方法区的静态域中

- 所以静态的,也可以称为是类的

- 静态方法 只能调用静态属性和静态方法

- 成员方法,静态非静态皆可

- 不能使用this,super

https://www.cnblogs.com/dolphin0520/p/10651845.html

静态代码块与非静态代码块

- 都是用来初始化类或者对象

- 静态的代码块,随着类加载而加载,可以设置加载信息,优先非静态代码块加载

- 非静态代码块,随着对象加载而加载,可以对属性注入

- 代码块按照编写顺序执行,不论是否静态

属性注入的位置;

- 声明即赋值   显示初始化

- 默认缺省

- 构造器注入

- setter注入

- 对象访问属性赋值

【Java】步入OOP 面向对象的更多相关文章

  1. Java实现OOP(面向对象编程)

    一.对象的综述 面向对象编程(OOP)具有多方面的吸引力.对管理人员,它实现了更快和更廉价的开发与维护过程.对分析与设计人员,建模处理变得更加简单,能生成清晰.易于维护的设计方案.对程序员,对象模型显 ...

  2. 20175212童皓桢 Java实验二-面向对象程序设计实验报告

    20175212童皓桢 Java实验二-面向对象程序设计实验报告 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O.L.I.D原则 了解设 ...

  3. Java的OOP三大特征之一——继承

    Java的OOP三大特征之一——继承 子类继承父类的特征和行为(属性和方法),使得子类具有父类的各种属性和方法.或子类从父类继承方法,使得子类具有父类相同的行为. 特点:在继承关系中,父类更通用.子类 ...

  4. Java复习5.面向对象

    Java 复习5面向对象知识 20131004 前言: 前几天整理了C++中的面向对象的知识,学习Java语言,当然最重要的就是面向对象的知识,因为可以说Java是最正宗的面向对象语言,相比C++,更 ...

  5. 0030 Java学习笔记-面向对象-垃圾回收、(强、软、弱、虚)引用

    垃圾回收特点 垃圾:程序运行过程中,会为对象.数组等分配内存,运行过程中或结束后,这些对象可能就没用了,没有变量再指向它们,这时候,它们就成了垃圾,等着垃圾回收程序的回收再利用 Java的垃圾回收机制 ...

  6. 0028 Java学习笔记-面向对象-Lambda表达式

    匿名内部类与Lambda表达式示例 下面代码来源于:0027 Java学习笔记-面向对象-(非静态.静态.局部.匿名)内部类 package testpack; public class Test1{ ...

  7. 0025 Java学习笔记-面向对象-final修饰符、不可变类

    final关键字可以用于何处 修饰类:该类不可被继承 修饰变量:该变量一经初始化就不能被重新赋值,即使该值跟初始化的值相同或者指向同一个对象,也不可以 类变量: 实例变量: 形参: 注意可以修饰形参 ...

  8. [Java入门笔记] 面向对象编程基础(二):方法详解

    什么是方法? 简介 在上一篇的blog中,我们知道了方法是类中的一个组成部分,是类或对象的行为特征的抽象. 无论是从语法和功能上来看,方法都有点类似与函数.但是,方法与传统的函数还是有着不同之处: 在 ...

  9. 0013 Java学习笔记-面向对象-static、静态变量、静态方法、静态块、单例类

    static可以修饰哪些成员 成员变量---可以修饰 构造方法---不可以 方法---可以修饰 初始化块---可以修饰 内部类(包括接口.枚举)---可以修饰 总的来说:静态成员不能访问非静态成员 静 ...

随机推荐

  1. Mol Cell Proteomics. | Identification of salivary biomarkers for oral cancer detection with untargeted and targeted quantitative proteomics approaches (解读人:卜繁宇)

    文献名:Identification of salivary biomarkers for oral cancer detection with untargeted and targeted qua ...

  2. Koadic的安装和使用

    概述 Koadic是DEFCON分型出来的一个后渗透工具,主要通过vbscript.jscript进行大部分操作 环境准备 我准备的是两台虚拟机一台kali就是攻击机器一台windows7 64位就是 ...

  3. hdu1686kmp果题

    kmp字符串匹配原理参考博客:https://blog.csdn.net/bqw18744018044/article/details/90516750 代码如下:(写一遍模板) #include&l ...

  4. 通过源码理解Spring中@Scheduled的实现原理并且实现调度任务动态装载

    前提 最近的新项目和数据同步相关,有定时调度的需求.之前一直有使用过Quartz.XXL-Job.Easy Scheduler等调度框架,后来越发觉得这些框架太重量级了,于是想到了Spring内置的S ...

  5. 重磅!刷新两项世界纪录的腾讯优图人脸检测算法DSFD开源了!

    近日,知名开源社区Github上有个名为DSFD(Dual Shot Face Detector)的算法引起了业内关注,它正是来自于腾讯优图.目前,该算法已经被计算机视觉顶级会议CVPR 2019接收 ...

  6. react 周期函数

    1.constructor():构造函数执行时间:组件被加载前最先调用,并且仅调用一次作用:定义状态机变量注意:第一个语句必须是super(props),正确定义状态机代码如下constructor( ...

  7. 2020年最新版Web前端学习路线图-前端小白入门必读-pink老师推荐

    Hello,大家好,相信很多学习前端的小伙伴,会有很多的疑惑: 我要学习那些技术? 我要到哪里去学习这些技术呢? 学习这些技术的目的对就业有什么帮助呢? 我学到什么程度可以胜任工作? ... 这里,p ...

  8. Rust入坑指南:居安思危

    任何事情都是相对的,就像Rust给我们的印象一直是安全.快速,但实际上,完全的安全是不可能实现的.因此,Rust中也是会有不安全的代码的. 严格来讲,Rust语言可以分为Safe Rust和Unsaf ...

  9. iOS 构建静态库

    一..a 文件静态库打包 打开 Xcode 创建一个新的 Static Library 工程,取名 MyStaticLibrary. 创建工程完毕后,系统自动创建了一个同名类,添加一个方法用于测试. ...

  10. Codeforces 1332F - Independent Set(树dp)

    题目链接 题意 给出一棵 n 个点的树, 求它的所有非空诱导子图的独立集种类数之和, 对 998244353 取模. n ≤ 3e5. 题解 不妨假设在独立集中的点被染色成 1, 其余不染色; 由于不 ...