【JavaSE】类与对象(上)类是什么?对象是什么?

news2024/11/26 9:47:23

文章目录

  • 面向过程与面向对象
  • 认识类和对象
    • 创建类
    • 类的实例化
  • 内存分布
    • 注意事项
  • 总结

面向过程与面向对象

我们说C语言是面向过程的编程语言,而Java是面向对象的编程语言,那究竟什么才是面向过程与面向对象呢?我们举一个例子来帮助大家理解:我们现在的需求是洗衣服,如何完成我们这个需求呢?

面向过程:
准备一个盆 - > 加水 - > 加洗衣粉 - > 洗衣服 - > 倒水 - > 加水 - >洗衣服 - > 拧干 - > 晾衣服
面向对象:
把衣服放进洗衣机,洗衣机洗完甩干。

通过这个例子我们可以看出面向过程和面向对象的区别,面向过程在实现一个洗衣服的需求时更注重如何完成洗衣服,而面向对象则注重于让洗衣机完成这个需求,怎么完成不需要关心。都可以完成我们的需求。只不过一个关注的是过程,而一个关注的是对象之间的合作。二者没有好坏之分。

认识类和对象

在上面我们比较了面向过程和面向对象两个思想的区别,那么在Java中究竟什么是对象呢?女朋友嘛?显然不是,要想讲明白对象我们不得不提类的概念,因为对象都是类实例化出来了的。那什么是类呢?类就是对一个实际事物的描述,例如人,我们可以用人类来描述,类描述的既然是一个实际事物肯定会有自己的属性,例如:男人,女人,年龄等,我们在类里面可以通过成员变量来定义类的属性,当然一个人类也会有自己的行为,在类里我们可以通过成员方法来描述行为

创建类

大致了解类是什么之后我们如何创建一个类呢?基本语法是这样的:

class ClassName{
field; // 字段(属性) 或者 成员变量
method; // 行为 或者 成员方法
}

我们来为大家演示创建一个人类。

public class Person {

    public String name;
    public int age;
    public String sex;

    public void eat() {
        System.out.println("吃饭");
    }

    public void sleep() {
        System.out.println("睡觉");
    }

    public void show() {
        System.out.println("name " + name + " age " + age + " sex " + sex);
    }
}

上面的代码就实现了一个人类的创建,人都有名字、性别、和年龄所以我们创建人类时,用于描述人类的成员变量也创建为姓名、性别、和年龄,因为人每天都要吃饭睡觉,所以他的成员方法可以是吃饭和睡觉。
注意事项

1、在定义类时需要注意,类名必须采用大驼峰来书写。
2、一般一个文件当中只写一个类。
3、main方法所在的类中一般要用public修饰
4、public修饰的类必须要和文件名相同
5、不要轻易修改public类的名称

类的实例化

定义了一个类,就相当于在计算机中定义了一种新的类型,那么当我们创建好了一个类之后如何使用呢?当我们有了一个类的时候,就好像我们建房子时有了图纸,如果我们要使用房子必须按照图纸造出房子后使用,类也是一样,类并不能直接使用,需要使用类实例化出一个对象后进行使用。
基本语法

1、通过new关键字可以创建一个对象
2、使用.来访问对象中的方法和属性

下面我们来看代码:

public class Person {

    public String name;
    public int age;
    public String sex;

    public void eat() {
        System.out.println("吃饭");
    }

    public void sleep() {
        System.out.println("睡觉");
    }

    public void show() {
        System.out.println("name " + name + " age " + age + " sex " + sex);
    }
}

还是上面我们已经创建好的人类,当我们需要使用时

public class Test {
    public static void main(String[] args) {
        Person p = new Person();
        p.name ="qwq";
        p.age = 18;
        p.sex = "nan";
        p.eat();
        p.sleep();
        p.show();
    }
}

首先我们Person p = new Person();实例化一个Person类的对象,通过这个对象去访问成员变量,并且给成员变量赋值,我们看这个p叫做qwq,18岁,性别为nan,还可以通过它调用成员方法。我们觉得一个对象不够,我们还可以在new一个对象:

public class Test {
    public static void main(String[] args) {
        Person p = new Person();
        p.name ="qwq";
        p.age = 18;
        p.sex = "nan";
        p.eat();
        p.sleep();
        p.show();

        Person p2 = new Person();
        p.name = "123";
        p.age = 20;
        p.sex = "nv";
        p.show();
    }
}

我们执行以下看一下结果:
在这里插入图片描述

内存分布

在上面我们new了两个Person类的对象,那么他们的空间分配是怎样的呢?我们通过画图来给大家讲解。
在这里插入图片描述
定义了一个类,就相当于在计算机中定义了一种新的类型,与int,double类似,所以 Person p = new Person();我们可以理解为创建了一个Person类型的变量,引用变量名为p,因为是在方法内实例化的,所以是局部变量所以在栈上开辟一块空间,储存的是对象的地址,Java中new的东西都会在堆上开辟空间,所以会在堆上开辟一块空间存储成员变量,简单来说就是引用指向了对象。一个类可以实例化多个对象,每实例化一个对象都会开辟一块新的空间,所以每个对象都有属于自己的成员。

注意事项

1、当引用为null时,代表这个引用不指向任何对象
2、引用能不能指向引用?

 public static void main(String[] args) {
        Person p = new Person();
        Person p2 = new Person();
        p = p2;
    }

不可以,这样写代表了,p这个引用指向了p2这个引用指向的对象。

3、一个引用可不可以指向多个对象?

   public static void main(String[] args) {
        Person p =new Person();
        p = new Person();
        p = new Person();
    }

不可以,这样写最后p之指向了一个对象。只有最后一个语句有效,其他的都被覆盖了。

总结

进行一下总结:

1、类其实就是一个模板,用来描述一个实体。
2、类其实就是类型,是一种自定义的类型,可以用来定义变量。
3、 一个类可以实例化出多个对象,实例化出的对象 占用实际的物理空间,存储类成员变量
4、做个比方。类实例化出对象就像现实中使用建筑设计图建造出房子,类就像是设计图,只设计出需要什么东西,但是并没有实体的建筑存在,同样类也只是一个设计,实例化出的对象才能实际存储数据,占用物理空间

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/4315.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PX4飞行测试

文章目录前言一、首次飞行指南飞行入门解锁飞机起飞降落飞行控制/命令辅助飞行任务飞行规划任务设置机体航向设置航点/转弯半径地理围栏故障保护地理围栏地理围栏规划安全点(集结点)创建/定义安全点地形跟随/保持地形跟随地形保持前言 本节包含有关飞行(完全配置过…

虚拟主播也带货?直播电商的变与不变

5月6日晚,海外虚拟主播vox在B站开启了中国直播首秀。从最终数据来看,直播1.7小时,营收111万人民币,当晚还登上平台热门首位,这样的直播吸金能力,让不少明星都望尘莫及。 更值得关注的是,直播间…

Matlab:表达式

Matlab:表达式变量数字矩阵运算符数组运算符函数表达式示例变量 与大多数其他编程语言一样,MATLAB 语言提供数学表达式,但与大多数编程语言不同的是,这些表达式涉及整个矩阵。 MATLAB 不需要任何类型声明或维度说明。当 MATLAB …

PyCharm 这40个使用技巧真棒

大家好,今天分享 PyCharm 40个使用技巧,内容有点长,喜欢欢迎收藏、分享、点赞。 废话不多说。我们开始吧! 文章目录技术提升第一章:运行调试篇1\. 通过指定参数,执行程序2\. 程序结束了,照样可…

Vue 3 属性绑定细节

在ButtonDemo中默认会把传给这个组件上的所有事件,都传递给Button中的最外层的元素 不管这个最外层的元素是什么!比如下图:在button外面还有一个div,那么传递给最外层的就应该是div,而不是button 最外层为div 想让组件的某一个部分,点击时被触发click事件 现在传递给最…

LeetCode-764. 最大加号标志【动态规划,二维数组】

LeetCode-764. 最大加号标志【动态规划,二维数组】题目描述:解题思路一:动态规划。用一个n*n的数组记录每个点上下左右方向上为1的最小值。最后ans返回数组中最大的加号。解题思路二:优化1。解题思路三:0题目描述&…

word制作多个单位联合发文的文件头

一、前言 word制作多个单位联合发文的文件头,好像不难。但是做起来,却发现,自己的只是储备还是不够,居然花费了1个多小时才搞定....哎 二、遇到问题 开始思路是想使用【分栏】来操作,但是不得其法,搞了一…

驱动开发基础知识

文章目录记录驱动开发前的知识储备工作一、驱动开发环境搭建二、驱动开发框架(重点:WDF框架)1、前世今生(1)Vista简介(2)发展历史2、基于框架的驱动程序的 WDM(1)驱动程序…

linux(1.nginx基础 2.使用Nginx负载均衡及动静分离)

一.nginx基础 目录 1. Nginx使用场景2. Nginx中的进程 2.1 Nginx中的多进程模型2.2 多进程模式的优点:2.3 缓存3. Ngnix的负载均衡策略 3.1 轮询法3.2 加权轮询3.3 原地址哈希3.4 最小连接数法3.5 Fair3.6 url_hash3. Nginx配置文件4. Nginxtomcat 集群示例 4.1 下…

c++学习-STL常用函数

第八部分-STL常用函数 5.1 常用遍历算法 5.1.1 for_each 5.1.2 transform 5.2 常用查找算法 5.2.1 find 5.2.2 find_if 5.2.3 adjacent_find 面试题中如果出现查找相邻重复元素,记得用stl中的adjacent_find算法 5.2.4 binary_search 5.2.5 count 5.2.6 count_if 5.…

【双十一特辑】爱心代码(程序员的浪漫)-李峋

前言 最近《点燃我温暖你》中李峋的爱心代码超级火,看着特别心动,这不,光棍节快到了,给兄弟们教学一波爱心代码,赶在双十一前表白,让这个双十一不在是孤单一个人!目录 前言 C语言简易爱心代码…

final 关键字 —— 限制继承、限制虚函数重写

final 关键字有两个作用,一个是限制继承,一个是限制重写。 目录 1、限制继承 (1) 基类的构造函数设为私有 (2) 基类类名后面加上 final 关键字修饰 2、限制虚函数重写 1、限制继承 限制继承有两种方式,一种是将基类的构造函数设为私有&am…

谷粒商城-基础篇(详细流程梳理+代码)

文章目录前言一、项目环境搭建1.1、安装virtualbox以及vagrant1.2、Docker安装MySQL与Redis1.3、前后端开发工具统一配置1.4、Git工具安装与配置1.5、Gitee创建仓库与IDEA导入1.6、构建微服务模块1.7、编写.gitignore文件(忽略上传gitee文件配置)1.8、数…

【云原生之K8s】 K8s资源控制及探针检查

文章目录一、资源限制1.资源限制的使用2.request资源(请求)和limit资源(约束)3.Pod和容器的资源请求和限制4.官方文档示例5.资源限制实操5.1 编写yaml资源配置清单5.2 释放内存(node节点,以node1为例&#…

昨晚,我用python帮学妹P证件照自拍,然后发现。。。

人生苦短,我用Python前因后果先上效果准备工作证件照尺寸调整证件照背景调整各种背景颜色图片完整代码结尾最后前因后果 事情是这样的 晚上我正在聚精会神写代码(打游戏~) 突然,收到学妹给我发来的消息 还有一张自拍照 而且是…

基于stm32单片机的超声波测距显示倒车雷达提醒报警系统Proteus仿真

资料编号:145 下面是相关功能视频演示: 145-基于stm32单片机的超声波测距显示倒车雷达提醒报警系统Proteus仿真(源码原理图仿真论文)设计内容 本次嵌入式课程设计综合实验的内容为倒车测距系统。以proteus keilU5为模拟硬件基础…

Android studio中控件TextView学习

1、TextView 基础属性 layout_ width; 组件的宽度layout. _height: 组件的高度id: 为TextView设置- -个组件idtext; 设置显示的文本内容textColor: 设置字体颜色textStyle: 设置字体风格,三个可选值: n normal(无效果),bold(加粗), italic(斜…

Springboot @Async 失效的坑

异步应用场景 为了提高接口的响应性能,当业务非常复杂的情况下,可以将一部分跟业务关联性不是特别强的逻辑进行异步处理。如日志记录、短信发送、增加积分等。通常而言会将此类业务逻辑通过异步的方式进行处理,从而加快接口的响应速度&#…

【HMS Core】集成多种HMS Core服务,让APP成为旅行小助手

1 介绍 Duration: 5:00 总览 旅行者能够使用该应用在华为地图上搜索附近名胜景点、游玩去处或是附近ATM、餐馆和医院等。 服务场景描述 Tourism应用通过集成机器学习服务的地标识别能力,能够提供旅行过程所有必要的信息,还可以识别图片中的地标建筑。…

[Python]字符串常用操作与方法

前言 系列文章目录 [Python]目录 文章目录前言1. 字符串的常用操作1.1 格式化输出1.1.1 %1.1.1.1 语法1.1.1.2 字符串格式操作符(%)的格式化符号%c:以字符的形式格式化输出整数或长度为1的字符串%r:将数据格式化为供解释器读取的形式%s:将数据…