一篇文章带您了解面向对象(java)

1.简单理解面向过程编程和面向对象编程

面向过程编程:开发一个一个的方法,有数据需要处理,我们就可以调用方法来处理。

package com.web.quictstart;public class demo1 {public static void main(String[] args) {totalScore("张三", 65, 68, 35);averageScore("张三", 65, 68, 35);}public static void totalScore(String name, double chinese, double math, double english) {double total = chinese + math + english;System.out.println("姓名:" + name + ";" + "总分:" + total);}public static void averageScore(String name, double chinese, double math, double english) {double averageScore = (chinese + math + english) / 3;System.out.println("姓名:" + name + ";" + "平均分:" + averageScore);}
}

面向对象编程:开发一个一个的对象来处理数据,把数据交给对象,再调用对象的方法来完成对数据的处理。

package com.web.quictstart;public class student {String name;double chinese;double english;double math;public void totalScore() {double total = chinese + math + english;System.out.println(name + "总分:" + total);}public void averageScore() {double averageScore = (chinese + math + english) / 3;System.out.println(name + "平均分:" + averageScore);}
}
package com.web.quictstart;public class studentTest {public static void main(String[] args) {student student1 = new student();student1.name="张三";student1.chinese=90;student1.math=99;student1.english=92;student1.totalScore();student1.averageScore();}
}

2.面向对象编程的好处

我们可以理解世间万物都是对象。要什么功能去找谁就好了。比如要汽车的数据,去赵汽车这个对象就好了,这样更加能够符合人类的思维,让编程更加简单,更加直观。

3.对象在程序中长什么样呢?

注意:在这里,笔者借用了培训机构传智研究院的张泽华老师和徐磊老师的讲解思路,在此,笔者十分感谢两位老师的辛苦付出,帮助广大学子在编程的路上解决疑惑)其实我们可以把对象理解为一种特殊的表格,这张表格长成什么样子那就要看对象长成什么样子,我们去调用这个对象,就可以说是往这个对象里面填写表格。new 一个就有一张表格。那么这张表又从哪里来的呢?首先,我们需要先去设计这张表,类就是来设计这张表的,也就是说类是对象的设计图,类里面的变量用来说明可以处理什么数据,类里面的方法主要是用来描述对象有什么功能,也就是说对数据处理进行什么样的处理。

4.对象在计算机中的执行原理

先把类加载到方法区,执行main方法,main方法提取到栈内存中执行,new对象后,把类也加载到方法区,变量是放在方法里面的,所以会在main方法中开辟一块变量空间,new 出来的对象会放在堆内存,在堆内存里面开辟一块空间,用来代表该对象,也可以理解为这块空间是一张表。那么这个对象也就会有一个地址,然后按照类的变量和方法开辟变量空间,变量装的是默认值。除了这些还会有一个类的地址,类的地址会指向方法区的类,让后会把对象的地址交给栈内存的mian方法的对象。然后栈内存的对象按照这个地址去找栈内存的对象,然后把那些值赋值给那些默认值。

如果只是看这样的文字分析肯定是看不懂的,我们不如来画一张图来进行理解,我们用上面学生案例来进行画图。

 

注意:当堆内存中的对象,没有被任何变量引用(指向)时,他就会被判定为内存中的“垃圾”。

Java存在自动垃圾回收机制,会自动清除垃圾对象。

5.this

this是什么?

就是一个变量,可以用在方法中,用来指向当前对象。哪个对象调用方法,this就指向哪个对象,也就是拿哪个对象。

package com.web.quictstart.this_demo;public class Student {public void printThis(){System.out.println(this);}
}
package com.web.quictstart.this_demo;public class demo1 {public static void main(String[] args) {Student student1 =new Student();student1.printThis();System.out.println(student1);Student student2 = new Student();student2.printThis();System.out.println(student2);}
}

 

我们可以看到,this输出的地址值和调用它的对象的地址值是一样的。学生对象去调用方法的时候,它会把自己对象的地址传给这个方法的this接收,那么方法就会输出this输出的就是学生对象的地址了。

this的使用场景?

主要是用来解决:对象的成员变量与方法内部的变量名称一样的时候,导致访问冲突问题的。

package com.web.quictstart.this_demo;public class Book {private String name;private double price;public String getName() {return name;}public void setName(String name) {this.name = name;}public double getPrice() {return price;}public void setPrice(double price) {this.price = price;}
}

 

6.构造器

构造器语法:

public class Student {/**构造器*/public Student(){...}
}

构造器有什么特点?

创建对象时,对象会去调用构造器。

package com.web.quictstart.constructor;public class StudentTest {public static void main(String[] args) {Student student = new Student();}
}
package com.web.quictstart.constructor;public class Student {public Student() {System.out.println("无参数构造器被执行了。。。");}public Student(String name,double score){System.out.println("有参数构造器被执行了");}
}

package com.web.quictstart.constructor;public class StudentTest {public static void main(String[] args) {Student student = new Student("张三",99.8);}
}

构造器的常见应用场景?

创建对象时,同时完成对对象成员变量(属性)的初始化赋值。

package com.web.quictstart.constructor;public class Student {String name;double score;public Student() {System.out.println("无参数构造器被执行了。。。");}public Student(String name, double score) {System.out.println("有参数构造器被执行了");this.name = name;this.score = score;System.out.println("姓名:" + name + ":" + "成绩:" + score);}
}
package com.web.quictstart.constructor;public class StudentTest {public static void main(String[] args) {Student student = new Student("张三",99.8);}
}

类在设计的时候,如果没有写构造器,java会为类自动生成一个无参构造器的。

但是,如果我们定义了有参构造器,java就不会帮我们的类自动生成无参构造器了,但是还是建议写一个无参构造器。

7.封装

什么是封装?

就是说,用类设计对象处理某一个事物的数据的时候,应该把要处理的数据,以及处理这些这些数据的方法,设计到一个对象中。

封装的设计规范

合理的隐藏(private),合理的暴露(public)。

代码演示:

package com.web.quictstart.constructor;public class Student {private String name;private double score;public String getName() {return name;}public void setName(String name) {this.name = name;}public double getScore() {return score;}public void setScore(double score) {if (score >= 0 && score <= 100) {this.score = score;} else {System.out.println("传入的分数不在范围内");}}
}

 

package com.web.quictstart.constructor;public class StudentTest {public static void main(String[] args) {Student student = new Student();student.setName("张三");student.setScore(-5);System.out.println(student.getName());System.out.println(student.getScore());}}

8.JavaBean实体类

什么是实体类?

就是一种特殊的类,这个类的所有变量都需要私有,并且都需要对外提供相对应的get和set方法。类中必须要有一个公共的无参构造器。

package com.web.quictstart.javabean;public class Student {//成员变量必须私有的private String StudentName;private Integer age;private char sex;private double score;//必须要有一个公开的无参构造器public Student() {}public Student(String studentName, Integer age, char sex, double score) {StudentName = studentName;this.age = age;this.sex = sex;this.score = score;}public String getStudentName() {return StudentName;}public void setStudentName(String studentName) {StudentName = studentName;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}public char getSex() {return sex;}public void setSex(char sex) {this.sex = sex;}public double getScore() {return score;}public void setScore(double score) {this.score = score;}
}
package com.web.quictstart.javabean;public class StudentTest {public static void main(String[] args) {Student student = new Student();student.setStudentName("张三");student.setAge(19);student.setScore(99.3);student.setSex('男');System.out.println(student.getStudentName());System.out.println(student.getAge());System.out.println(student.getScore());System.out.println(student.getSex());}
}

实体类的应用场景?

实体类只负责数据存取,而对数据的处理交给其他类来完成,以实现数据和数据业务处理相分离。

9.成员变量和局部变量的区别

区别成员变量局部变量
类中的位置不同类中、方法外常见于方法中
初始化值不同有默认值,不需要初始化赋值没有默认值,使用之前必须完成赋值
内存位置不同堆内存栈内存
作用域不同整个对象在所归属的大括号中
生命周期不同与对象共存亡随着方法的调用而生,随着方法的运行结束而亡

注意:本文章是笔者的学习笔记,因为笔者的能力有限,如果您在浏览或者运行代码的时候发现了问题,还请您在评论区留言,笔者在看到后会在第一时间解决,谢谢。

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

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

相关文章

mac上VMware fusion net模式无法正常使用的问题

更新时间&#xff1a;2024年04月22日21:39:04 1. 问题 环境&#xff1a; intel芯片的macbook pro VMware fusion 13.5.1 无法将“Ethernet0”连接到虚拟网络“/dev/vmnet8”。在这里显示这个之后&#xff0c;应该是vmnet8的网段发生了冲突&#xff0c;所以导致无法正常使用…

【栈】Leetcode 739. 每日温度【中等】

每日温度 给定一个整数数组 temperatures &#xff0c;表示每天的温度&#xff0c;返回一个数组 answer &#xff0c;其中 answer[i] 是指对于第 i 天&#xff0c;下一个更高温度出现在几天后。如果气温在这之后都不会升高&#xff0c;请在该位置用 0 来代替。 示例 1: 输入…

【操作系统】——死锁

基础知识 一个进程需要向一个进程传递数据&#xff0c;后面的进程必须等到前面的进程到达才能继续运行&#xff0c;这是进程间的一种次序关系。称为同步 在引入线程的系统中&#xff0c;进程内的多个线程可以并发或并行运行 遇到问题&#xff1a;对资源不加限制地分配可能导致…

字符串加密

描述 这是一个古老的字符串加密方法&#xff0c;给定两个长度不超过100个字符的字符串&#xff0c;判断是否可以把其中一个重排&#xff0c;然后对26个字母做一个一一映射&#xff0c;使得两个字符串相同。 再进行映射&#xff1a;例如 每个字母映射到前一个字母&#xff08;B…

基于Spring Cloud Alibaba的异地多活设计

胡弦&#xff0c;视频号2023年度优秀创作者&#xff0c;互联网大厂P8技术专家&#xff0c;Spring Cloud Alibaba微服务架构实战派(上下册)和RocketMQ消息中间件实战派(上下册)的作者&#xff0c;资深架构师&#xff0c;技术负责人&#xff0c;极客时间训练营讲师&#xff0c;四…

论坛报名 | 中关村论坛“区块链与隐私计算论坛”报名开始!

2024中关村论坛—区块链与隐私计算论坛 正在报名&#xff01; 长安链开源社区作为区块链与隐私计算分论坛协同支持社区&#xff0c;为社区成员单位提供免费参会名额&#xff0c;名额有限先到先得&#xff0c;欢迎积极报名&#xff01; 论坛时间&#xff1a;2024年4月27日&…

前端开发攻略---拖动归类,将元素拖拽到相应位置

1、演示 2、代码 <!DOCTYPE html><html lang"en"><head><meta charset"UTF-8" /><meta http-equiv"X-UA-Compatible" content"IEedge" /><meta name"viewport" content"widthdevice-…

【ZZULIOJ】1076: 三位数求解(Java)

目录 题目描述 输入 输出 样例输入 Copy 样例输出 Copy 提示 code 题目描述 已知xyzyzzn&#xff0c;其中n是一个正整数&#xff0c;x、y、z都是数字&#xff08;0-9&#xff09;&#xff0c;编写一个程序求出x、y、z分别代表什么数字。如果无解&#xff0c;则输出“No…

2024年Q1季度平板电视行业线上市场销售数据分析

Q1季度平板电视线上市场表现不如预期。 根据鲸参谋数据显示&#xff0c;2024年1月至3月线上电商平台&#xff08;京东天猫淘宝&#xff09;平板电视累计销量约360万件&#xff0c;环比下降12%&#xff0c;同比下降30%&#xff1b;累计销售额约99亿元&#xff0c;环比下降28%&a…

学习STM32第十七天

备份域详解 一、简介 在参考手册的电源控制章节&#xff0c;提到了备份域&#xff0c;BKPR是在RTC外设中用到&#xff0c;包含20个备份数据寄存器&#xff08;80字节&#xff09;&#xff0c;备份域包括4KB的备份SRAM&#xff0c;以32位、16位或8位模式寻址&#xff0c;在VBAT…

vue中使用input上传做了文件个数限制,触发了限制之后再次上传刚刚的图片触发不了事件

如果在Vue中使用<input type"file">上传文件&#xff0c;并设置了文件个数的限制&#xff0c;那么在达到限制后&#xff0c;再次上传相同的图片可能不会触发change事件。这是因为浏览器认为文件并没有发生变化&#xff0c;所以不会触发change事件。 解决这个问…

【JavaScript编程实操15】DOM实操_轮播图

前言 焦点轮播图是通过定时器实现的,每隔2秒切换到下一张图片,并隐藏当前图片,显示下一张图片。这种方式使用一套图片以一定时间间隔进行循环播放,可以营造出一种轮播的效果,可以通过CSS3动画、jQuery插件、JavaScript来实现。。 轮播图特点: ①自动循环播放 ②指示器聚…

C++初阶学习第二弹——C++入门(下)

C入门&#xff08;上&#xff09;&#xff1a;C初阶学习第一弹——C入门&#xff08;上&#xff09;-CSDN博客 目录 一、引用 1.1 引用的实质 1.2 引用的用法 二、函数重载 三、内敛函数 四、auto关键字 五、总结 前言&#xff1a; 在上面一章我们已经讲解了C的一些基本…

代码重构:提升软件开发效率的关键

代码重构在软件开发中扮演着至关重要的角色。它不仅可以提高代码的质量和可维护性&#xff0c;还能够增强代码的可读性&#xff0c;降低后期维护成本&#xff0c;从而提高开发效率。本文将探讨代码重构的作用以及我们常用的一些重构方法。 代码重构的作用 提高代码质量&#…

Vue2进阶之Vue2高级用法

Vue2高级用法 mixin示例一示例二 plugin插件自定义指令vue-element-admin slot插槽filter过滤器 mixin 示例一 App.vue <template><div id"app"></div> </template><script> const mixin2{created(){console.log("mixin creat…

【Java网络编程】TCP通信(Socket 与 ServerSocket)和UDP通信的三种数据传输方式

目录 1、TCP通信 1.1、Socket 和 ServerSocket 1.3、TCP通信示例 2、UDP的三种通信&#xff08;数据传输&#xff09;方式 1、TCP通信 TCP通信协议是一种可靠的网络协议&#xff0c;它在通信的两端各建立一个Socket对象 通信之前要保证连接已经建立&#xff08;注意TCP是一…

【Interconnection Networks 互连网络】Torus 网络拓扑

1. Torus 网络拓扑2. Torus 网络拓扑结构References 1. Torus 网络拓扑 Torus 和 Mesh 网络拓扑&#xff0c;又可以称为 k-ary n-cubes&#xff0c;在规则的 n 维网格中包裹着 N k^n 个节点&#xff0c;每个维度都有 k 个节点&#xff0c;并且最近邻居之间有通道。k-ary n-c…

前端需要知道的知识点,附有链接

关系型数据库和非关系型数据库的区别有哪些&#xff1f; 区别&#xff1a;关系型数据天然就是表格式的&#xff0c;因此存储在数据表的行和列中&#xff1b;数据表可以彼此关联协作存储&#xff0c;也很容易提取数据。而非关系型数据不适合存储在数据表的行和列中&#xff0c;…

YOLOv9有效改进专栏汇总|未来更新卷积、主干、检测头注意力机制、特征融合方式等创新![2024/4/21]

​ 专栏介绍&#xff1a;YOLOv9改进系列 | 包含深度学习最新创新&#xff0c;助力高效涨点&#xff01;&#xff01;&#xff01; 专栏介绍 YOLOv9作为最新的YOLO系列模型&#xff0c;对于做目标检测的同学是必不可少的。本专栏将针对2024年最新推出的YOLOv9检测模型&#xff0…

《HCIP-openEuler实验指导手册》1.3Apache动态功能模块加载卸载练习

1.3.1 配置思路 mod_status 模块可以帮助管理员通过web界面监控Apache运行状态&#xff0c;通过LoadModule指令加载该模块&#xff0c;再配置相关权限&#xff0c;并开启ExtendedStatus后&#xff0c;即可使用该模块。 1.3.2 配置步骤 检查mod_status模块状态&#xff08;使…