Java|学习打卡-6

本文探讨了面向对象编程的基础概念,包括OOP与POP的区别,面向对象的三大特性,类和对象的定义、使用,以及属性(成员变量)和方法的深入解析。通过实例讲解了如何设计类、创建对象并理解内存布局。重点介绍了类的属性与方法的权限、默认值和内存位置。
摘要由CSDN通过智能技术生成

一、面向对象与面向过程

面向对象OOP和面向过程POP的区别:

  • 面向过程:强调的是功能行为,以函数为最小单位,考虑谁来做。
  • 面向对象:强调具备了功能的对象,以类/对象为最小单位,考虑谁来做。
  • 【我的理解:以一盘鱼香肉丝炒饭开始。面向过程就是自己去超市买材料:肉丝、木耳、肉丝,准备调料,自己回家动手做鱼香肉丝。面向对象就是去饭店直接点一盘鱼香肉丝炒饭,坐着等就可以吃到了,不用自己动手去做。】

面向过程:Procedure Oriented Programming

面向对象:Object Oriented Programming

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

面向对象的思想概述:

  • 程序员从面向过程的执行者转化成了面向对象的指挥者
  • 面向对象分析方法分析问题的思路和步骤:
    • 根据问题需要,选择问题所针对的现实世界中的实体。
    • 从实体中寻找解决问题相关的属性和功能,这些属性和功能就形成了概念世界中的类。
    • 把抽象的实体用计算机语言进行描述,形成计算机世界中类的定义。即借助某种程序语言,把类构造成计算机能够识别和处理的数据结构。
    • 将类实例化成计算机世界中的对象。对象是计算机世界中解决问题的最终工具。

二、 类和对象

2.1 类和对象的定义:

  • 类(Class)对象(Object)是面向对象的核心概念。
    • 类是对一类事物的描述,是抽象的、概念上的定义。
    • 对象是实际存在的该类事物的每个个体,因而也称为实例(instance)。
  • “万事万物皆对象”

可以理解为:类 = 抽象概念的人=明星;对象 = 实实在在的某个人 =蔡徐坤

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

类的设计,其实就是类的成员的设计。


2.2 Java类及类的成员

设计类,其实就是设计类的成员。

类和类的成员组成:属性、方法(常见)

  • 现实世界的生物体,大到鲸鱼,小到蚂蚁,都是由最基本的细胞构成的。同 理,Java代码世界是由诸多个不同功能的类构成的。
  • 现实生物世界中的细胞又是由什么构成的呢?细胞核、细胞质、… 那么, Java中用类class来描述事物也是如此。常见的类的成员有:
    • 属 性:对应类中的成员变量
    • 行 为:对应类中的成员方法

方法和属性的多种叫法,本质都是同一个。

属性 = 成员变量 = field = 域、字段

方法 = 成员方法 = 函数 = method

创建类的对象 = 类的实例化 = 实例化类

类的成员构造:

class Person {
    //属性,或成员变量
    String name;
    int age;
    boolean isMarried;
    //构造器
    public Person(){}
    public Person(String n, blooean im){
        name = n;
        isMarried = im;
    }
    //方法,或函数
    public void eat(){
        System.out.println("人会吃饭。");
    }
    public String display(){
        return "名字是:" + name + ",年龄为:"+"," 是否娶嫁" + isMarried;
    }
    //代码块
    {
        name = "CXK";
        age = 20;
        isMarried = false;
    }
    //内部类
    class pet{
        String name;
        float weight;
    }
}

类的语法格式:

修饰符 class 类名 {

属性声明;

方法声明;

}

说明:修饰符public:类可以被任意访问。

类的正文要用{ }括起来。

创建Java自定义类步骤:

1. 定义类(考虑修饰符、类名)

2. 编写类的属性(考虑修饰符、属性类型、属性名、初始化值)

3. 编写类的方法(考虑修饰符、返回值类型、方法名、形参等)


2.3 类和对象的使用(面向对象思想落地的实现):

* 1.创建类,设计类的成员(重心)

* 2.创建类的对象

* 3.通过“对象.属性”或“对象.方法”调用对象的结构

创建对象语法: 类名 对象名 = new 类名();

使用“对象名.对象成员”的方式访问对象成员(包括属性和方法)

  • 包名:都小写xxyyzz
  • 类名、接口名:XxxYyyZzz
  • 变量名、方法名:xxxYyyZzz
  • 常量名:XXX_YYY_ZZZ

说明:

如果创建了一个类的多个对象,则每个对象都独立的拥有一套类的属性。(非static的)

意味着:如果我们修改一个对象的属性a,则不影响另外一个对象属性a的值。

【我的理解:就是一个独立的对象,也就是 new 出来的对象,可以自己改变原来类的属性(这个属性(=成员变量)就是指的是:类里面的,如 int age =10; 啊等等的这些属性)】

对象的内存解析:

  • 第一句:先在栈中声明一个 Person类的对象 p1,new 一个Person类的对象 p1 在堆中开辟一个空间里面会存放 Person类的内容,栈中 p1 存放 p1 在堆中的空间的地址;
  • 第二句:把 p1 指向的堆中的空间里面的name = null 替换为name = Tom;
  • 第三句:把 p1 指向的堆中的空间里面的isMale = false 替换为isMale = true;
  • 第四句:先在栈中声明一个 Person类的对象 p2,new 一个Person类的对象 p2 在堆中开辟一个空间里面会存放 Person类的内容,栈中 p2 存放 p2 在堆中的空间的地址;
  • 第五句:输出 p2.name,输出结果为 null;
  • 第六句:在栈中声明一个 Person类的对象 p3 ,p3 存放 p1 在堆中的空间的地址。(可以理解为 p3 为 p1 的打开快捷方式,p3 和 p1 指向的内容相同。)
  • 第七句:把 p3 指向的堆中的空间里面的 age = 1 替换为 age = 10;(这里要注意,因为 p1 和 p3 指向的堆空间是相同的,所以 p1 的 age也是等于 10。)

匿名对象:


三、类的成员之一: 属性(field)

属性(成员变量) vs 局部变量

相同点:

  1. 都是变量,定义变量的格式:数据类型 变量名 = 变量值
  2. 先声明,后使用
  3. 变量都有其对应的作用域

不同点:

1.在类中声明的位置的不同

属性:直接定义在类的一对{}内(就是class 类名{这个位置})

局部变量:声明在方法内、方法形参、代码块内、构造器形参、构造器内部的变量

2.关于权限修饰符的不同

属性:可以在声明属性时,指明其权限,使用权限修饰符。

常用的权限修饰符:private、public、缺省、protected --->封装性细说

目前,大家声明属性时,都使用缺省就可以了。(就是比如 int age;)

局部变量:不可以使用权限修饰符。

3. 默认初始化值的情况:

属性:类的属性,根据其类型,都有默认初始化值。

(与数组相同的默认初始化值)

整型(byte、short、int、long):0

浮点型(float、double):0.0

字符型(char):0 (或'\u0000')

布尔型(boolean):false

引用数据类型(类、数组、接口):null

 

局部变量:没有默认初始化值。

意味着,我们在调用局部变量之前,一定要显式赋值。

特别地:形参在调用时,我们赋值即可。

4. 在内存中加载的位置:

属性:加载到堆空间中 (非static)

局部变量:加载到栈空间


四、类的成员之二: 方法(method)

什么是方法(method、函数):?描述类应该具有的功能。

  • 方法是类或对象行为特征的抽象,用来完成某个功能操作。在某些语言中也称为函数或过程。
  • 将功能封装为方法的目的是,可以实现代码重用,简化代码。
  • Java里的方法不能独立存在,所有的方法必须定义在类里。

方法的声明:

方法的声明:权限修饰符 返回值类型 方法名([形参列表]){

方法体

}

权限修饰符:void、public、static、final、abstract

* 注意:static、final、abstract 来修饰的方法,后面再讲

4.1 关于权限修饰符:默认方法的权限修饰符先都使用public

Java规定的4种权限修饰符:private、public、缺省、protected -->封装性再细说

4.2 返回值类型:

有返回值 vs 没有返回值

如果方法有返回值,则必须在方法声明时,指定返回值的类型。同时,方法中,需要使用return关键字来返回指定类型的变量或常量:“return 数据”。

如果方法没有返回值,则方法声明时,使用void来表示。通常,没有返回值的方法中,就不需要使用return.但是,如果使用的话,只能“return;”表示结束此方法的意思。

我们定义方法该不该有返回值?

① 题目要求

② 凭经验:具体问题具体分析

4.3 方法名:属于标识符,遵循标识符的规则和规范,“见名知意”

4.4 形参列表: 方法可以声明0个,1个,或多个形参。

格式:数据类型1 形参1,数据类型2 形参2,...

我们定义方法时,该不该定义形参?

① 题目要求

② 凭经验:具体问题具体分析

4.5 方法体:方法功能的体现。

方法的使用中,可以调用当前类的属性或方法

特殊的:方法A中又调用了方法A:递归方法。(比如快速排序)

方法中,不可以定义方法。

return关键字的使用:

  • 1.使用范围:使用在方法体中
  • 2.作用:① 结束方法

② 针对于有返回值类型的方法,使用"return 数据"方法返回所要的数据。

  • 3.注意点:return关键字后面不可以声明执行语句。(就是执行到return 后面的语句就会再执行了)


“万事万物皆对象” 的理解:

理解一:尚硅谷Java入门视频教程(在线答疑+Java面试真题)_哔哩哔哩_bilibili

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值