JAVA—面向对象编程基础
面向对象是java编程的套路。更符合人类思维习惯,编程更直观。面向对象有三大特征:封装,继承,多态。
目录
1.理解面向对象
2.对象在计算机中的执行原理
3.类和对象的一些注意事项
4.类与对象的一些语法知识
(1)this关键字
(2)构造器
(3)封装
(4)实体javaBean (实体类)
5.面向对象编程的综合案例
1.理解面向对象
(开发一个一个的对象,把数据交给对象,再调用对象的方法来完成对数据的处理。)
*1.*类(Class):类是创建对象的模板或蓝图。它定义了对象的属性和方法。属性是对象的特征(如学生的姓名,成绩),而方法是对象可以执行的操作(如计算总分和平均成绩)。
2. 对象(Object):对象是类的实例。通过类,我们可以创建多个具有相同属性和方法的对象,但每个对象可以有不同的属性值。
下面是举一个学生的类(模板)以及测试Text中创建好的对象。
import java.net.SocketOption;public class Student { //这是我们创建好的一个类String name; //这是类的属性double Chinese;double Math;//这是类的方法public void printfTotalScore(){System.out.println(name+"的总成绩"+(Chinese+Math));}public void printfAverageScore(){System.out.println(name+"的平均成绩"+((Chinese+Math)/2.0));}
}
public class Text1 {public static void main(String[] args) {Student s1 = new Student();s1.name = "楠楠";s1.Chinese = 100;s1.Math = 100;s1.printfTotalScore();s1.printfAverageScore();Student s2 = new Student(); //对象都是类new出来的s2.name = "王强";s2.Chinese = 13;s2.Math = 14;s2.printfTotalScore();s2.printfAverageScore();}
}
参照黑马的讲解,是将类比作一张空白的表格,而每个对象是已经填好数据的表。
| 姓名 | null |
| 数学 | 0 |
| 语文 | 0 |
| ..... |
| 姓名 | 楠楠 |
| 数学 | 100 |
| 语文 | 100 |
| ..... |
2.对象在计算机中的执行原理

这是参照黑马绘制的执行流程 。还是区分代码什么部分在虚拟机内存中什么位置运行。
引用类型
- Student s1 = new Student();
- s1变量中存储的是对象的地址,因此变量s1也称为引用类型的变量。
3.类和对象的一些注意事项
- 类名建议用英文单词,首字母大写,满足驼峰模式,且要有意义,类如:Student,Car
- 类中定义的变量也称为成员变量(对象的属性),类中定义的方法也称成员方法(对象的行为)。
- 成员变量本身存在默认值,同学们在定义变量时一般来说不需要赋初始值(没有意义)
数据类型 明细 默认值 基本类型 byte.short.char.int .long 0 float.double 0.0 boolean false 引用类型 数组,String null - 一个代码文件中,可以写多个class类,但只能一个用public修饰,且public修饰的类名必须成为代码文件名。
- 对象会和对象之间的数据不会相互影响,但是多个变量指向同一个对象时就会相互影响了。(定义好s1后,再让 s2 = s1,修改s2就会影响s1。 )
- 如果某个对象没有一个变量引用它,则该对象无法被操作了,该对象会成为所谓的垃圾对象。会被清除。
4.类与对象的一些语法知识
(1)this关键字
this是一个变量,可以用在方法中,来拿到当前对象。主要用来解决变量名称的冲突问题。
import java.net.SocketOption;public class Student {public void prrintthis(){System.out.println(this);}
}public class Text2 {public static void main(String[] args) {//目标:认识this,掌握this的应用场景Student s1 = new Student();System.out.println(s1);s1.prrintthis();System.out.println("________________________");Student s2 =new Student();System.out.println(s2);s2.prrintthis();}
}
this的执行原理:在方法区调用this时,堆内存会把当前对象的地址传给this。(执行图省略)
this的应用场景

在解决形参变量名和类中变量名冲突的问题时还可以修改形参名来解决,但是使用this更符合编码规范。
(2)构造器
(本质一个与类名相同的方法)
public class Student{public Student(){.....}
}
构造器的特点
创建对象时,对象会去调用构造器。
Student s = new Syudent(); //验证构造器触发的代码
package constructor;
public class Student {//无参数构造器public Student(){System.out.println("无参数构造器被触发执行了");}//有参数构造器public Student(String name,double score){System.out.println("有参数构造器被触发执行了");}
}package constructor;public class Tsxt {public static void main(String[] args) {//目标:认识构造器,并掌握构造器的特点,应用场景,和注意事项Student s = new Student();//Student s = new Student("楠楠”,100);}
}
构造器的常见应用场景
创建对象时,同时完成对对象成员变量(属性)的初始化赋值。
不使用构造器时,进行变量赋值,如果变量数量比较多,赋值就不太方便。


使用构造器时,就可以在完成创建的同时完成赋值。
构造器的注意事项
- 类在设计时,如果不写构造器,java会自动生成一个无参构造器的。
- 一旦有了有参构造器,JAVA就不会帮我们的类自动生成无参构造器了。此时就建议自己手写一个无参构造器出来。
(3)封装
封装是将对象的数据(属性)和操作数据的方法(行为)结合起来,形成一个独立的单元。通过封装,可以隐藏对象的内部实现细节,只对外提供有限的接口(即方法),从而提高了代码的安全性和可维护性。
(就是把类设计对象处理某一个事物的数据时应该把要处理的数据以及处理这些数据的方法涉及到一个对象中去。)
封装的设计规范 合理隐藏 合理暴露
前提补充:所谓隐藏与暴露,实际是类中修饰词 public(公开) 和 private(私有) 的使用。

像这里,将类中的score修饰为 pivate 后,再在外部调用就会报错。(类内部还是可以正常使用的)这里对于这个成绩,我们会发现如果暴露,可能会导致有随意赋值的情况产生,但是隐藏,又无法达到赋值成绩实现功能的目的。所以,为了合理隐藏和合理暴露,就要采用方法的手段。
package encapsulation;public class student {private double score;public void setScore(double score){if(score>=0 && score<= 100){ this.score = score;}else {System.out.println("数据非法");}}private double getScore(){return score;}public void printPass(){System.out.println(score >=60 ?"成绩合格":"成绩不合格");}
}
像这样,并不直接将数据暴露,而是只暴露修改函数,通过函数来修改值,这里我们还可以写代码来限制和判断输入数据的合法性。这是对于的成员变量的合理隐藏,合理暴露的操作,而对于方法而言,只需要看是否需要被外界访问,需要则公开,不需要则隐藏。
快捷构造get,set函数
1.在IDEA代码界面右键,选中 生成

2.生成界面选择 Getter 和 Setter

3. 弹出界面后选择要生成函数的成员名称(按住shift键可以进行多选)

4.最后确定完成
快捷生成构造器
1.和上述一致,打开生成界面 选择 构造函数 (Constructor)

2.选择构造函数要传参的成员变量,如果选择无参数类型的,选择无。
(4)实体javaBean (实体类)
实体类是一种特殊形式的类。这个类中的成员变量都要私有,并且要对外提供相应的getXXX和setXXX方法。类中必须要有一个公共的无参的构造器。
package javaBean;public class Student {//1.必须私有变量,并为每个都要提供 get set 方法private String name;private double score;//2.必须为类提供一个公开的无参数的构造器public Student() {}public String getName() {return name;}public void setName(String name) {this.name = name;}public double getScore() {return score;}public void setScore(double score) {this.score = score;}
}
package javaBean;public class Text {public static void main(String[] args) {//目标:掌握实体类的书写要求,特点,应用场景。Student s = new Student();s.setName("楠楠");s.setScore(100);System.out.println(s.getName());System.out.println(s.getScore());}
}

实体类的特点 只有为了存储某个类的数据。
实体类的应用场景 一个类中封装了太多方法时,开辟实体类,只负责数据存储,而对数据的处理交给其他类来完成,已实现数据和数据业务处理相分离。(这种开发方式比较流行)
package javaBean;public class Student {//1.必须私有变量,并为每个都要提供 get set 方法private String name;private double score;//2.必须为类提供一个公开的无参数的构造器public Student() {}public String getName() {return name;}public void setName(String name) {this.name = name;}public double getScore() {return score;}public void setScore(double score) {this.score = score;}
}class Studentperator{private Student student;public Studentperator( Student student){this.student = student;}public void printPass(){if(student.getScore() >= 60){System.out.println(student.getName()+"成绩及格");}else {System.out.println(student.getName()+"成绩不及格");}}
}

5.面向对象编程的综合案例
需求: 1.展示系统中的全部电影(每部电影展示:名称 ,价格)
2.允许用户根据电影编号(id)查询某个电影的详细信息
package Demo;public class Movie {private int id;private String name;private double price;private double score;private String director;private String actor;private String info;public Movie() {}public Movie(int id, String name, double price, double score, String director, String actor, String info) {this.id = id;this.name = name;this.price = price;this.score = score;this.director = director;this.actor = actor;this.info = info;}public int getId() {return id;}public void setId(int id) {this.id = id;}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;}public double getScore() {return score;}public void setScore(double score) {this.score = score;}public String getDirector() {return director;}public void setDirector(String director) {this.director = director;}public String getActor() {return actor;}public void setActor(String actor) {this.actor = actor;}public String getInfo() {return info;}public void setInfo(String info) {this.info = info;}
}
package Demo;import java.sql.SQLOutput;public class MoivePerator {private Movie[] movies;public MoivePerator(Movie[] movies){this.movies = movies;}//展示系统全部信息public void printAllMovies(){System.out.println("———————————系统全部电影信息——————————");for (int i = 0; i < movies.length; i++) {Movie m = movies[i];System.out.println("编号:"+ m.getId());System.out.println("名称:"+ m.getName());System.out.println("价格:"+ m.getPrice());System.out.println("_________________________________");}}public void searchMovieByid(int id){for (int i = 0; i < movies.length; i++) {Movie m = movies[i];if (m.getId() == id) {System.out.println("___________该电影的详细信息___________");System.out.println("编号:" + m.getId());System.out.println("名称:" + m.getName());System.out.println("价格:" + m.getPrice());System.out.println("得分:" + m.getScore());System.out.println("导演:" + m.getDirector());System.out.println("主演:" + m.getActor());System.out.println("其他信息:" + m.getInfo());return; //已经找到}System.out.println("没有该电影信息");}}
}
package Demo;import java.util.Scanner;public class Text {public static void main(String[] args) {//1.设计一个电影类//2.设计一个电影操作类//3.准备 全部电影数据Movie[] movies = new Movie[4];movies[0] = new Movie(1,"1",1,1,"1","1","1");movies[1] = new Movie(2,"1",1,1,"1","1","1");movies[2] = new Movie(3,"1",1,1,"1","1","1");movies[3] = new Movie(4,"1",1,1,"1","1","1");MoivePerator mp = new MoivePerator(movies);Scanner sc = new Scanner(System.in);while(true) {System.out.println("==电影信息查询==");System.out.println("==1.全部信息查询==");System.out.println("==2.id查询信息==");int command = sc.nextInt();switch (command) {case 1:mp.printAllMovies();break;case 2:System.out.println("请输入您要查询的电影id");int id = sc.nextInt();mp.searchMovieByid(id);break;default:System.out.println("输入错误 请重新输入");}}}
}

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

学习时间:2024.7.31
相关文章:
JAVA—面向对象编程基础
面向对象是java编程的套路。更符合人类思维习惯,编程更直观。面向对象有三大特征:封装,继承,多态。 目录 1.理解面向对象 2.对象在计算机中的执行原理 3.类和对象的一些注意事项 4.类与对象的一些语法知识 (1&am…...
【计算机视觉学习之CV2图像操作实战:车道识别1】
车道识别 步骤 区域感兴趣高斯模糊图片灰度化边缘提取膨胀腐蚀中值滤波霍夫圆环检测直线绘制车道 import cv2 import numpy as npdef create_roi_mask(frame):height, width frame.shape[:2]# 三角形的顶点top_vertex [int(width / 2 30), int(height * 0.5 30)]bottom_l…...
动态之美:Laravel动态路由参数的实现艺术
动态之美:Laravel动态路由参数的实现艺术 在Web开发中,路由是应用程序的神经系统,它负责将请求映射到相应的处理逻辑。Laravel框架提供了一种强大而灵活的路由系统,允许开发者定义动态路由参数,从而创建更具动态性和可…...
Python练手小项目
计算器 创建一个简单的计算器,能够进行加、减、乘、除四种基本运算。 # 定义加法函数 def add(x, y):return x y# 定义减法函数 def subtract(x, y):return x - y# 定义乘法函数 def multiply(x, y):return x * y# 定义除法函数 def divide(x, y):if y 0:return…...
苹果手机通讯录恢复教程?3招速成指南
随着科技的不断进步,手机丢失、系统崩溃等意外情况也时有发生,一旦这些情况发生,我们宝贵的通讯录资料很可能会付诸东流。对此,本文为广大苹果手机用户提供一份简洁明了的通讯录恢复教程,让你轻松掌握苹果手机通讯录恢…...
python爬虫入门(五)之Re解析
一、什么是Re解析 “Re解析”是指使用正则表达式(regular expression,简称regex)进行文本解析或匹配的过程。 解析网页内容的三种方式: 1、bs4解析(最简单) 2、re解析(解析速度最快…...
可靠的图纸加密软件,七款图纸加密软件推荐
大家好啊,我是小固,今天跟大家聊聊图纸加密软件。 作为一名设计师,我深知保护自己的知识产权有多重要。曾经就因为图纸泄露,差点血本无归,那个教训可真是惨痛啊!所以我今天就给大家推荐几款靠谱的图纸加密软件,希望能帮到你们。 固信软件https://www.gooxion.com/ 首先要隆重…...
【每日一题】【最短路】【BFS】小红走矩阵 “葡萄城杯”牛客周赛 Round 53 F题 C++
“葡萄城杯”牛客周赛 Round 53 F题 小红走矩阵 题目背景 “葡萄城杯”牛客周赛 Round 53 题目描述 n m n\times m nm的矩阵由障碍和空地组成,初始时小红位于起点 ( 1 , 1 ) (1,1) (1,1),她想要前往终点 ( n , m ) (n,m) (n,m)。小红每一步可以往上…...
无线磁吸充电宝哪个牌子值得入手?什么牌子磁吸充电宝性价比高?
在当下科技日新月异的时期,无线磁吸充电宝成为了众多电子设备用户的得力助手。然而,面对市场上众多品牌和型号的无线磁吸充电宝,消费者常常陷入选择的困境:到底哪个牌子值得入手?什么牌子的磁吸充电宝性价比高…...
互联网摸鱼日报(2024-08-01)
互联网摸鱼日报(2024-08-01) 36氪新闻 氪星晚报 | Uber与比亚迪合作,将在平台上增加10万辆电动汽车;维维股份将收购大窑汽水?公司回应:消息不实;我国科学家取得全固态锂电池研究新突破 《死侍与金刚狼》,…...
Alpla003经典的价量背离的因子在可转债列表里的因子分析(附python代码)
原创文章第605篇,专注“AI量化投资、世界运行的规律、个人成长与财富自由"。 遗传算法给出的因子五花八门,可解释性不高。 强化学习原理不同,但结果类似。 大模型之前咱们尝试过,Quantlab3.9代码:内置大模型LL…...
进阶理解——typeof 、instanceof
typeof 、instance of 先聊聊JavaScript基本类型数据类型5种含值数据类型2种不含值类型 6种类型的*对象* typeofinstanceof总结进一步扩展一下具体讨论一下typeof局限性扩展判断方法 很多时候,回头望,理解会更深刻,也希望能帮助一些初学的同学…...
不同类型的生物反应器在支架成熟过程中具有哪些特点和应用?
3D Bioprinting of Human Tissues: Biofabrication, Bioinks, and Bioreactors是发表于《International Journal of Molecular Sciences》的一篇综述,详细介绍了3D生物打印人体组织的相关技术进展,包括数据处理、生物打印技术、生物墨水配方、生物反应器…...
8. Spring Ai之入门到精通(超级详细)
简介 2024年5月30号Spring AI 的 1.0.0 里程碑 1 版本发布。表明版本已正在巩固,并且大部分主要错误和问题已经解决,API基本已确定,不会发生很大的变化。 在与大模型集成方面,继LangChain4j之后,又一重大的框架诞生。标…...
寄存器和硬件的关系
寄存器也是一种存储器,只不过普通的存储器只能写和读。里面的数据并没有赋予什么实际意义。但是寄存器就不一样了,寄存器的每一位数据,都对应了硬件电路的状态。寄存器和外设的硬件电路,是可以进行互动的。所以,程序到…...
【WEB】ctfshow-萌新-web9-15
文章目录 题目介绍:题目分析:payload: 题目介绍: ctfshow-萌新计划-web9-15 <?php # flag in config.php include("config.php"); if(isset($_GET[c])){$c $_GET[c];if(preg_match("/system|exec|highlight…...
【Vulnhub靶场AI-WEB-1.0打靶教程】
第一步:查看虚拟机的ip 第二步:扫描ip下开放的80端口 第三步:扫描查到的ip地址下的目录 第四步:访问查到的目录 访问robot.txt 第五步:访问robot.txt显示出的目录 第六步:打开kali终端,使用sqlmap功能 sq…...
html实现酷炫美观的可视化大屏(十种风格示例,附源码)
文章目录 完整效果演示1.蓝色流线风的可视化大屏1.1 大屏效果1.2 大屏代码1.3 大屏下载 2.地图模块风的可视化大屏2.1 大屏效果2.2 大屏代码2.3 大屏下载 3.科技轮动风的可视化大屏3.1 大屏效果3.2 大屏代码3.3 大屏下载 4.蓝色海洋风的可视化大屏4.1 大屏效果4.2 大屏代码4.3 …...
【C++BFS算法 二分查找】2812. 找出最安全路径
本文涉及知识点 CBFS算法 C二分查找 LeetCode2812. 找出最安全路径 给你一个下标从 0 开始、大小为 n x n 的二维矩阵 grid ,其中 (r, c) 表示: 如果 grid[r][c] 1 ,则表示一个存在小偷的单元格 如果 grid[r][c] 0 ,则表示一…...
轻触开关 KH-4.5X4.5X5.5H-STM
品 牌: kinghelm(金航标) 厂家型号: KH-4.5X4.5X5.5H-STM 封装: SMD 商品毛重: 0.317克(g) 包装方式: 编带...
XML Group端口详解
在XML数据映射过程中,经常需要对数据进行分组聚合操作。例如,当处理包含多个物料明细的XML文件时,可能需要将相同物料号的明细归为一组,或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码,增加了开…...
Flask RESTful 示例
目录 1. 环境准备2. 安装依赖3. 修改main.py4. 运行应用5. API使用示例获取所有任务获取单个任务创建新任务更新任务删除任务 中文乱码问题: 下面创建一个简单的Flask RESTful API示例。首先,我们需要创建环境,安装必要的依赖,然后…...
2025年能源电力系统与流体力学国际会议 (EPSFD 2025)
2025年能源电力系统与流体力学国际会议(EPSFD 2025)将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会,EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...
Oracle查询表空间大小
1 查询数据库中所有的表空间以及表空间所占空间的大小 SELECTtablespace_name,sum( bytes ) / 1024 / 1024 FROMdba_data_files GROUP BYtablespace_name; 2 Oracle查询表空间大小及每个表所占空间的大小 SELECTtablespace_name,file_id,file_name,round( bytes / ( 1024 …...
【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器
——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的一体化测试平台,覆盖应用全生命周期测试需求,主要提供五大核心能力: 测试类型检测目标关键指标功能体验基…...
剑指offer20_链表中环的入口节点
链表中环的入口节点 给定一个链表,若其中包含环,则输出环的入口节点。 若其中不包含环,则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...
JDK 17 新特性
#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持,不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的ÿ…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
基于matlab策略迭代和值迭代法的动态规划
经典的基于策略迭代和值迭代法的动态规划matlab代码,实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...
排序算法总结(C++)
目录 一、稳定性二、排序算法选择、冒泡、插入排序归并排序随机快速排序堆排序基数排序计数排序 三、总结 一、稳定性 排序算法的稳定性是指:同样大小的样本 **(同样大小的数据)**在排序之后不会改变原始的相对次序。 稳定性对基础类型对象…...
