面向对象编程 OOP Object Oriented Programming

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

面向过程编程 POP Procedure Oriented Programming

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

面向对象的几个重要特性

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

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

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

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

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

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

类和对象的关系?

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

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

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

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

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

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

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

package cn.dai;

public class Person {
// 类的主要部分 // 属性 == 字段 == 成员变量 == 域 == field
int age;
String name; // 行为 == 方法 == 成员方法 == 函数 == method == function
public void walk(){
System.out.println("行走,散步");
} public void talk(){
System.out.println("交流,谈吐");
}
}

实例化与调用

package cn.dai;

public class Create {
public static void main(String[] args) { // 创建我们定义的类的实例 // 类名 引用名 引用指向 类实例
Person person = new Person(); // 引用可以访问我们的属性 .引用
person.name = "张三"; person.age = 22; // 还可以是我们的方法
person.talk();
person.walk();
}
}

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 不能声明执行语句

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

package cn.dai;

public class Person {

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

递归算法

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. XSS-Labs(Level1-10)

    Level-1 简单尝试 使用基础poc<script>alert(1)</script> 代码审计 <?php ini_set("display_errors ...

  2. 将SublimeText加入右键菜单

    将SublimeText加入右键菜单 Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\*\shell\SublimeText] @=&q ...

  3. Java循环和数组练习题:打印素数升级版

    前两天一个小伙伴问了我一个数组的练习题,我一看思路很清晰,就是打印素数加了个数组.没想到写的时候啪啪打脸,终究还是没逃过眼高手低.本来不打算发出来了,因为发出来愈发显得我很菜,最后还是打算分享出来,一 ...

  4. Java 入门学习知识点整理

    [JAVA一个文件写多个类 ( 同级类 ) 规则和注意点] 在一个.java文件中可以有多个同级类,  其修饰符只可以public/abstract/final/和无修饰符 public修饰的只能有一 ...

  5. Redis总结--【持续更新】

    # 什么是Redis? Redis 是完全开源免费的,是一个高性能的key-value内存数据库,读的速度是110000次/s,写的速度是81000次/s     它有以下三个特点:   Redis不 ...

  6. 巴什博弈 HDU-1846

    描述:一堆石子有 n 个 ,两个人开始轮流取,每人最多取m个,最少取1个,最后一个将石子取完的是赢家. 思路:对于先手来说,如果有(m+1)个石子,先手取 k 个,后手就可以取 m+1-k 个,所以有 ...

  7. Hbase 整合 Hadoop 的数据迁移

    上篇文章说了 Hbase 的基础架构,都是比较理论的知识,最近我也一直在搞 Hbase 的数据迁移, 今天就来一篇实战型的,把最近一段时间的 Hbase 整合 Hadoop 的基础知识在梳理一遍,毕竟 ...

  8. iOS 构建静态库

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

  9. Python实现压缩解压缩,移动复制copy文件

    import shutil import os from shutil import make_archive # 查看可压缩的文件类型 print(shutil.get_archive_format ...

  10. Java内存模型和ConcurrentHashMap 1.7源码分析

    简介 ConcurrentHashMap 是 util.concurrent 包的重要成员.本文将结合 Java 内存模型,分析 JDK 源代码,探索 ConcurrentHashMap 高并发的具体 ...