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) 包装方式: 编带...
《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》
在注意力分散、内容高度同质化的时代,情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现,消费者对内容的“有感”程度,正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中࿰…...
解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错
出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上,所以报错,到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本,cu、torch、cp 的版本一定要对…...
三体问题详解
从物理学角度,三体问题之所以不稳定,是因为三个天体在万有引力作用下相互作用,形成一个非线性耦合系统。我们可以从牛顿经典力学出发,列出具体的运动方程,并说明为何这个系统本质上是混沌的,无法得到一般解…...
Axios请求超时重发机制
Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式: 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...
Java入门学习详细版(一)
大家好,Java 学习是一个系统学习的过程,核心原则就是“理论 实践 坚持”,并且需循序渐进,不可过于着急,本篇文章推出的这份详细入门学习资料将带大家从零基础开始,逐步掌握 Java 的核心概念和编程技能。 …...
全面解析各类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…...
Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决
Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决 问题背景 在一个基于 Spring Cloud Gateway WebFlux 构建的微服务项目中,新增了一个本地验证码接口 /code,使用函数式路由(RouterFunction)和 Hutool 的 Circle…...
莫兰迪高级灰总结计划简约商务通用PPT模版
莫兰迪高级灰总结计划简约商务通用PPT模版,莫兰迪调色板清新简约工作汇报PPT模版,莫兰迪时尚风极简设计PPT模版,大学生毕业论文答辩PPT模版,莫兰迪配色总结计划简约商务通用PPT模版,莫兰迪商务汇报PPT模版,…...
【SpringBoot自动化部署】
SpringBoot自动化部署方法 使用Jenkins进行持续集成与部署 Jenkins是最常用的自动化部署工具之一,能够实现代码拉取、构建、测试和部署的全流程自动化。 配置Jenkins任务时,需要添加Git仓库地址和凭证,设置构建触发器(如GitHub…...
Vue 模板语句的数据来源
🧩 Vue 模板语句的数据来源:全方位解析 Vue 模板(<template> 部分)中的表达式、指令绑定(如 v-bind, v-on)和插值({{ }})都在一个特定的作用域内求值。这个作用域由当前 组件…...
