java基础巩固训练营【第一轮】(六) 面向对象的JAVA

微信公众号开发实战:如何高效推送模板消息(附完整代码示例) 本文详细解析了微信公众号开发中模板消息推送的核心流程与实战技巧。文章从OpenID获取、模板申请、Access Token缓存管理到完整PHP代码实现,逐步拆解了高效推送模板消息的关键步骤,并提供了可直接复用的代码示例,帮助开发者快速集成这一提升用户体验的重要功能。 阅读详情

本章的测试代码存放在 com.j2ee110.csdn.leader.oob 包路径下面

大家的练习代码存放在 com.j2ee110.csdn.student.姓名标识.oob 包路径下面 

 

面向对象又叫OOB,当他出来的时候被认为是一项软件开发的革命,我记得我当时但是公司的大牛们整天都是OO,方式谁还在面向过程谁就已经落后了。时至今日我们依然可以在各大招聘网站的招聘要求中依旧可以看到,“属性面向对象编程”,“熟悉OO”,等词汇。但是,到底什么是对象,什么是面向对象的方法,怎么样的代码算是面向对象,其实让我将我也不能描述清楚,但是我觉得java语言的面向对象我们还是可以探讨一下的。

 

首先对于OOB的灵魂类,java做了很好也很简单的定义

 

任何java代码都必须包含在类中,而在源代码级别,一个java类的源代码总是定义的一个类(当然java可以将两个类定义一个源文件中,但是一个源文件一个类已经成了事实上的标准,关于这部分具体的内容可以参考“java基础的链接”),因此当我们开始写java代码的时候总是先创建一个类,然后在类里面编写相关的业务方法。

 

有了类,下面就是对象和对象的生命周期。java对象的定义非常简单,new 关键字,至于对象的生命周期这个是java最让人放心的地方,JVM提我们管理了,它会把不需要的对象自动删除。

 

这个时候有人会提出这样的问题,JVM怎么知道哪些对象已经不在被使用呢?这就引出了GC,俗称“垃圾收集器”,他专门负责把不要使用的对象销毁并释放出这些对象占据的空间,那GC有根据哪些参数来判断呢?(这是大家在面试的时候可能会碰到的问题,虽然我个人认为这个问题很无聊,但还是有人问)

 

如果深入的去探究这些问题可能会写一本书,还真有这么一本书《深入java虚拟机》,大家可以看看,这里我想大家推荐一篇文章,因为我觉得这篇文章将的比我好

 

原文地址 Java GC 算法总结 

 

因为原文的网站不太稳定,所以我在大本营中专贴了一篇

 

我在大本营中的转帖

 

之所以在这里提到GC的相关算法,那是为了面试准备的。

 

 

 

java面向对象的三要数

 

我知道面向对象有三大基本核心就是 继承、函数重载、和多态。说到这三点,我想已经参加过面试的朋友既爱又恨,爱的是面试的时候总是会被问到这样的问题,恨的是每当被问到这个问题总是有这样的感觉,“我知道这三个概念,但是我不知道如何描述这三个概念”,呵呵,恕我直言,我觉得“不知道如何描述就是不知道这个概念”,那么java中是如何来体现这三大概念呢,我觉得用代码来说会更加清楚一点。

 

 

首先我们先看看在java中继承是怎么实现的,其实很简单只要用到extends 这个关键字即可。代码(这些代码都是部分摘要,详细的代码请到com.j2ee110.csdn.leader.oob 包路径下面产看)

 

 

 

Code:
  1. public class Employee {   
  2.   
  3.        
  4.        
  5.     private Long     id; //员工编号   
  6.     private String   name; //员工姓名   
  7.     private Date     brithday; //出生年月   
  8.     private Double   weight; //体重   
  9.     private String   job;// 0,代表普通鱼啊弄,1,代表小组负责人,2,代表部门负责人   
  10.        
  11.        
  12.     /** 默认的构造方法 */  
  13.     public Employee(){   
  14.            
  15.            
  16.     }   
  17.         
  18.     // 其余代码可请参考com.j2ee110.csdn.leader.oob下面的同名类   
  19.   
  20. }   
  21.   
  22.   
  23. public class Teamleader extends Employee {   
  24.   
  25.     /**  
  26.      *   
  27.      */  
  28.     public Teamleader() {   
  29.            
  30.            
  31.         this.setJob("1");   
  32.            
  33.     }   
  34.   
  35.     /**  
  36.      *   
  37.      * @param id  
  38.      * @param name  
  39.      * @param brithday  
  40.      * @param weight  
  41.      * @param job  
  42.      */  
  43.     public Teamleader(Long id, String name, Date brithday, Double weight) {   
  44.         super(id, name, brithday, weight, "1");   
  45.        
  46.     }   
  47.        
  48.        
  49.        
  50.     /**  
  51.      * 在本类中重新改写了 toString()方法  
  52.      */  
  53.     public String toString() {   
  54.         return new ToStringBuilder(this).append("brithday", this.getBrithday())   
  55.                 .append("name", this.getName()).append("id", this.getId()).append("job",   
  56.                         this.getJob()).append("weight", this.getWeight()).append("title","我是组长").toString();   
  57.     }   
  58.        
  59.        
  60.        
  61.        
  62.   
  63. }   
  64.   
  65.   
  66.   
  67. public class DivisionPrincipal extends Employee {   
  68.   
  69.     /**  
  70.      *   
  71.      */  
  72.     public DivisionPrincipal() {   
  73.            
  74.         this.setJob("2");   
  75.     }   
  76.   
  77.     /**  
  78.      * @param id  
  79.      * @param name  
  80.      * @param brithday  
  81.      * @param weight  
  82.      * @param job  
  83.      */  
  84.     public DivisionPrincipal(Long id, String name, Date brithday, Double weight) {   
  85.         super(id, name, brithday, weight, "2");   
  86.     }   
  87.        
  88.        
  89.     /**  
  90.      * 在本类中重新改写了 toString()方法  
  91.      */  
  92.     public String toString() {   
  93.         return new ToStringBuilder(this).append("brithday", this.getBrithday())   
  94.                 .append("name", this.getName()).append("id", this.getId()).append("job",   
  95.                         this.getJob()).append("weight", this.getWeight()).append("title","我是部门经理").toString();   
  96.     }   
  97.        
  98.   
  99.        
  100. }   
  101.   
  102.   

 

上述代码中首先定义了一个employee类,然后定义了类teamleader,这个类继承了类 employee, 代码的形式很简单。但是如果从业务角度说,关于上面的定义在业务上的解释是这样的“所有员工具有的特性组长都用,但是组长具有一些员工不具备的特性”,在代码中我们可能会看到employee中的方法teamleader中也可以用,但是如果我们仔细研究便会发现,在“也可以用”之前需要加上两个字部分,由此引出了类中方法和变量的使用范围,其实很简单只有三个关键字,private,property,public。只要记住这三个关键字,即可。

 

我一直认为代码是说明一门编程语言特性的最好的方式,为了说明这三个关键字,我在teamleader类和DivisionPrincipal类中使用到了这三个关键字。我强烈建议大家动手试一试,大家可以创建相关的对象然后尝试调用一下。注意大家可以在本章包路径以外的路径从新声明一个类然后调用teamleader类和DivisionPrincipal类的对象,如果还不清楚赶快跟我联系。

 

 

接口和抽象类

 

类和对象的基本要素我们介绍完了,但是对于java来说还有一个比较重要但是也是比较搞人的概念,接口和抽象类。曾经无数次在面试中被问及这个概念,我的答案也是从网上看来的:“接口说明一个对象像什么,而抽象类说明一个对象是什么”。这就是我的回答,似乎每次都能混过关,但是我觉得能混过关的原因是问的人也不是很清楚他们之间的概念。

 

因为我很快也成了问这个问题的人,但是我依旧不能很好的对二者做出区别,既然我也不是很清楚,按我也就不在这里胡说误导大家乐,我建议大家看看《Thinking in java》,这本书做出了一个比较好的解释,但是许多人跟我说他看不懂。但是我还是建议大家仔细阅读阅读,要想看懂,读一遍肯定是不行的。

 

一点建议

 

 大家仔细研究一下 Employee类,可以发现这个类定义了一些 private filed ,然后又很多针对这些 filed 的get和set方法。其实这就是传说中的值对象。值得对象就是把数据用对象组织起来,我想大家以后一定会非常多的见到这类对象的。再个合理我想大家一定发现了在这个对象有个 toString() 方法,至于这个方法是做什么用的,大家可以仔细的考虑考虑,后面遇到的我们在跟大家解释。 

 

 

课后练习

今天的课后练习是:

假设我们要对产品进行描述,产品的属性有(编号,名称,数量,类型),但是产品还会分为次品和废品,次品额外的增加了(发现日期,次品原因)这个两个属性,而废品增加了(报废时间,发现日期)这两个属性。要求用创建相关的类型来确定他们之间的关系

 

我提供一些英文单词给大家参考,如果自己词汇比较丰富的可以不用,但是我强烈反对用 “aaa” “bbb”之类命名

名称英文简称
产品productproduct
废品wastrelwastrel
次品defectivedefective
检查checkcheck

 

注意这些代码必须存放在com.j2ee110.csdn.student.姓名标识.oob 包路径下面 

 

暑期java基础巩固训练营开始
java基础巩固训练营 简介
java基础巩固训练营【第一轮】(一)项目环境和规范
java基础巩固训练营【第一轮】(二)JAVA基础
java基础巩固训练营【第一轮】(三) 编写、编译、运行 
java基础巩固训练营【第一轮】(四) 利器(IDE工具)
java基础巩固训练营【第一轮】(五) 基本数据类型
java基础巩固训练营【第一轮】(六) 面向对象的JAVA
java基础巩固训练营【第一轮】(七) 数据结构中的java
java基础巩固训练营【第一轮】(八) 文件读写
java基础巩固训练营【第一轮】(九) 用java通信
java基础巩固训练营【第一轮】(十) 多线程
java基础巩固训练营【第一轮】(十一) 直面错误--java异常
java基础巩固训练营【第一轮】(十二) 我们一起来找茬
ava基础巩固训练营【第一轮】(十三) java桌面应用
java基础巩固训练营【第一轮】(十四) 大家一起做项目

 

 如果您对我的文章感兴趣的话,请点击这里加我为好友,让我们一起进步
 

http://student.youkuaiyun.com/invite.php?u=106708&c=2383a3846076c876

大模型——AI对话四象限 { "摘要": "文章揭示了90%的人不会有效与AI沟通的问题,指出简单粗暴的提问只能得到标准答案。作者提出'AI对话四象限'模型:1)双方都懂时提效;2)AI懂但需学会分层提问;3)共同探索未知领域;4)向AI传授独家知识。强调沟通技巧的重要性,认为会提问的人不会被AI替代。最后呼吁读者尝试四象限思维,与AI碰撞火花。" } 阅读详情

相关推荐

WslRegisterDistribution failed with error_ 0x8007019e、0x800701bc、0x80370102

Ubuntu 20.04.4 LTS 报错解决方案。分别涉及到三个错误:WslRegisterDistribution failed with error: 0x8007019e、WslRegisterDistribution failed with error: 0x800701bc和WslRegisterDistribution failed with error: 0x80370102

一起加油~ 5万+

关于面向对象(OOB)的一些理解。主要是封装、继承、多态。

【封装】 1.将类的属性进行私有化处理,不允许外部程序直接访问。并对外提供统一的方法,设置和读取私有属性。 2.实现访问控制,限制属性访问。 优点:只能通过规定的方法访问数据,方便在方法中加入控制语句,防止不合法赋值。 3.除了属性的封装之外,将需要重复使用的代码提取到方法中加入控制语句,防止不合法赋值。 public class Demo01_Test { private String pers...

weixin_30547797的博客 600

Zemax实战:20×超高清变焦镜头设计全流程解析(从架构到制造)

本文详细解析了使用Zemax软件设计一款20倍变焦比、恒定F2.8光圈8K超高清镜头的全流程。从应对恒定光圈、宽光谱与8K解析力三大挑战的初始架构规划,到构建多重组态模型、分七阶段进行像差优化与公差分析,最终跨越制造鸿沟,为广播级影视与高精度工业检测应用提供了实战指南。

sun99的博客 551

OO(object oriented面向对象)

面向对象OO = 面向对象的分析OOA + 面向对象的设计OOD + 面向对象的编程OOP 一、OO - Object-Oriented(面向对象) 对象代表真实或抽象的事物,有一个名字(唯一标识),有明确的职责(well-defined responsibilities),展示良好的行为(well-defined behavior),接口清晰,并且尽可能简单、自相容,内聚,...

weixin_33851177的博客 410

059、肤色还原专项调优:记忆色、颜色偏好建模与主观评价标准

文章摘要:肤色还原调优的技术挑战与实践经验 本文系统探讨了手机影像中肤色还原的技术难点与解决方案。通过实际案例揭示了肤色还原的本质是记忆色与颜色偏好的博弈,而非单纯的技术指标达标。文章详细分析了记忆色的三大特性(高饱和、地域差异、场景依赖)和颜色偏好的数学建模方法,提出了基于YCbCr/Lab空间的参数化模型和代价函数设计。在评价体系方面,强调主观评价的重要性,并分享了专家评审、用户调研、场景覆盖的三级验证方法。最后总结了实战中的关键经验,包括肤色检测优化、过渡处理、动态范围管理及视频/拍照差异策略。文章指

sundong_81的博客 250

ISO13849功能安全从入门到精通(3):安全功能及其对降低风险的贡献4

例如,如果机器必须在有限速度下运行时进行设置,那么在低加速度值下进行设置时,参数P1将是正确的选择:随着危险缓慢出现并给予足够的运动自由,操作员将能够移出危险区域。例如,在无故障的条件下,在操作者的手的方向移动的滚子不能陷住它。在所有其他情况下,F1是正确的选择,前提是危险暴露的持续时间不超过机器总操作时间的1/20。需求来源于必要的风险降低。由于这些考虑而降低的PLr在任何情况下都不得低于通过比较方式考虑的机器的PLr,因为并不能从事故发生率低和严重程度低得出实施的安全功能提供的安全水平高于要求。

wdconan001的博客 834

洗礼灵魂,修炼python(31)--面向对象编程(1)—面向对象,对象,类的了解...

面向对象 1.什么是面向对象 (图片来自网络) 哈哈,当然不是图中的意思。 1).面向对象(Object Oriented,OO)是软件开发方法。利用各大搜索引擎得到的解释都太官方,完全看不懂啥意思对吧?那么我的理解是这样: 在上一篇博文说到了装饰器的含义,给一个现有的程序添加新的功能,同时又不改变其结构,作为现有对象的一个包装修饰。那么其实被用于修饰的程序就是...

dingyu6453的博客 139

78.在 Vue3 中使用 OpenLayers 实现地图地点搜索定位功能

本文详细介绍了如何在 Vue3 中集成 OpenLayers,实现地图地点搜索和定位功能。Vue3 项目环境的搭建与依赖安装。使用语法实现地图初始化和控件集成。通过 OpenLayers 的 Popup 和 Geocoder 插件,实现地址搜索和定位。希望这篇博文能帮助你快速掌握 Vue3 与 OpenLayers 的集成技术。如果在使用过程中遇到问题,欢迎在评论区留言讨论,或者参考 OpenLayers 官方文档获得更多帮助。注意。

小彭的博客 1848

python-面向对象(OOP)基本概念

面向对象基本概念 面向过程和面向对象是两种不同的编程方式 面向过程和面向对象的基本概念 (1)面向过程 把完成某一个需求的所有步骤从头到尾逐步实现 根据开发需求,将某些功能独立的代码封装成一个又一个函数 最后完成的代码,就是顺序地调用不同的函数 (2)面向对象 面向对象是更大的封装,根据职责在一个对象中封装多个方法 在完成某一个需求前,首先确定职责,----要做的事情(方法) 根据职责确定不同的对象,在对象内部封装不同的方法 最后完成的代码,就是顺序地让不同的对象调用不同的方法 特点: (1) 注重

ljsykf的博客 902

13《CAN总线五种错误类型,故障判定全解析》

CAN总线规定,发送节点在发送完EOF字段后,会留出一个ACK Slot(应答槽)。这个槽里,发送节点自己会输出隐性电平(逻辑1),然后“期待”至少有一个其他节点在这个槽里把它拉成显性电平(逻辑0)。如果这个槽结束时仍然是隐性电平,发送节点就判定:刚才那帧报文,没有任何一个节点成功接收——这就是应答错误。简单说,就是“我喊了一嗓子,却没人应声”。

2401_88858637的博客 264

【项目实战】DevOps制品管理之JFrog Artifactory介绍

JFrog Artifactory是一款领先的二进制软件制品仓库管理工具,由JFrog公司开发。

奶爸的编程之路,也就一周冷个三天 1352

java基础巩固训练营【第一轮】(六) 面向对象的JAVA 补充

当人走的太快的时候就要停下来,让灵魂能够跟上。 916

YOLOv11 改进 - C2PSA | C2PSA融合Mask Attention掩码注意力,可学习掩码矩阵破解低分辨率特征提取难题 | 2025 预印

本文提出了用于低分辨率图像分割的MaskAttn - UNet框架,并将其核心的掩码注意力机制集成到YOLOv11中。传统U - Net类模型难以捕捉全局关联,Transformer类模型计算量大,而掩码注意力机制通过可学习的掩码,让模型选择性关注重要区域,融合了卷积的局部效率和注意力的全局视野。其工作流程包括特征适配、掩码生成、定向注意力计算和特征融合。我们将掩码注意力机制代码集成到YOLOv11中。

魔改工程师的博客 403

java基础巩固训练营【第一轮】((二)JAVA基础 补充

当人走的太快的时候就要停下来,让灵魂能够跟上。 993

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

java基础巩固训练营【第一轮】(十三) java桌面应用 补

当人走的太快的时候就要停下来,让灵魂能够跟上。 1246

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

java基础巩固训练营【第一轮】(十二) 我们一起来找茬 补

当人走的太快的时候就要停下来,让灵魂能够跟上。 1261

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

java基础巩固训练营【第一轮】(十四) 大家一起做项目 补

当人走的太快的时候就要停下来,让灵魂能够跟上。 1227

java基础巩固训练营【第一轮】(八) 文件读写 补充

当人走的太快的时候就要停下来,让灵魂能够跟上。 1032

java基础巩固训练营【第一轮】(十一) 直面错误--java异常

当人走的太快的时候就要停下来,让灵魂能够跟上。 1251

java基础巩固训练营【第一轮】(一)项目环境和规范 补充

当人走的太快的时候就要停下来,让灵魂能够跟上。 896

java基础巩固训练营【第一轮】(九) 用java通信补充

当人走的太快的时候就要停下来,让灵魂能够跟上。 1056

java基础巩固训练营【第一轮】(十三) java桌面应用

当人走的太快的时候就要停下来,让灵魂能够跟上。 2361

java基础巩固训练营【第一轮】(五) 基本数据类型 补充

当人走的太快的时候就要停下来,让灵魂能够跟上。 958

java基础巩固训练营【第一轮】(十) 多线程 补充

当人走的太快的时候就要停下来,让灵魂能够跟上。 1258

java基础巩固训练营【第一轮】(七) 数据结构中的java 补充

当人走的太快的时候就要停下来,让灵魂能够跟上。 1024

java基础巩固训练营【第一轮】(一)项目环境和规范

当人走的太快的时候就要停下来,让灵魂能够跟上。 3480
上一篇: java基础巩固训练营【第一轮】(五) 基本数据类型 补充
下一篇: java基础巩固训练营【第一轮】(六) 面向对象的JAVA 补充
模事在人
博客等级 码龄17年 1546粉丝 86原创
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值