java相关问题:面向对象入门2与类的识别

news/2025/9/21 21:03:26/文章来源:https://www.cnblogs.com/ZhangXingHang/p/19104156

1. 关于 static 修饰符

应该用 static 修饰的方法:

*不依赖于特定对象的实例状态:执行的操作不访问或修改对象的实例变量。
*工具类方法:常用于定义工具类中的方法,这些方法提供通用功能,无需创建类实例。
*工厂方法:用于创建并返回类的新实例。
*主方法:程序的入口点 main 方法必须是静态的,因为它在任何对象创建之前就被JVM调用。

不用 static 修饰的方法往往具有的特性:

*依赖于对象实例:它们必须通过类的实例来调用。
*操作对象的状态:它们可以访问和修改该对象的实例变量,代表了对象的行为或功能。
*与特定对象相关:方法的行为或结果可能因对象的状态不同而不同。

Student 的 getName 应该用 static 修饰吗?

答:不应该。getName 方法的目的是返回某个特定 Student 对象的姓名,每个 Student 对象的姓名都可能不同。这个方法强烈依赖于特定对象的状态,因此它必须是一个实例方法。

public class Student {private String name; // 实例变量,每个Student对象都有自己的name// 这是一个实例方法,必须通过对象调用,如 stu.getName()public String getName() {return this.name;}
// 如果错误地声明为static,会出现编译错误或逻辑错误
// public static String getName() {
//return name;
// 错误!静态方法无法访问非静态变量name
}
}

2. 购物车案例中的面向对象分析与设计

使用了什么方法将问题描述中的类、方法、属性找出来?

寻找类和属性:找出描述中的名词和名词短语。

*例如:“用户”、“商品”、“购物车”、“订单”、“价格”、“数量”等。
*“用户”、“商品”、“购物车”、“订单”是类。
*“价格”、“数量”是“商品”或“订单项”类的属性。

寻找方法:找出描述中的动词和动词短语。

*例如:“添加商品”、“查看购物车”、“计算总价”、“下单”等。
*“添加商品”是 ShoppingCart 类的一个方法。
*“计算总价”是 ShoppingCart 或 Order 类的一个方法。

方法与属性到底属于哪个类,要怎么判定呢?

判定归属的核心是职责驱动设计和信息专家模式:

信息专家模式:将职责(方法或属性)分配给拥有完成该职责所需信息的那个类。

问题:“谁拥有计算购物车总价所需的数据?”
答: ShoppingCart 对象拥有一个 List,而每个 CartItem 又拥有商品价格和数量。因此, calculateTotal() 方法应该属于 ShoppingCart 类。

高内聚低耦合:高:一个类应该专注于一个明确的职责,低:类与类之间不应过度依赖。

“商品”类的职责是管理商品信息,它不应该去处理购物车的逻辑。购物车的逻辑应该放在 ShoppingCart 类中。
简单来说就是:谁的数据,谁操作。

3. 类的命名与管理

怎样才能避免你项目中的类与别人编写的类同名呢?

*使用包,包是Java提供的命名空间机制,它就像是类的“姓氏”,可以有效避免命名冲突。
*使用唯一包名:通常采用域名倒写的规则来确保全球唯一性。

项目中类各种各样要怎么管理这些代码呢?举例说明。

*通过包和目录结构对类进行逻辑上的分门别类。这是一种物理上的代码组织方式。
*举例:一个电商项目
com.companyname.ecommerce (基包)
domain / model / entity:存放实体类(如 User, Product, Order, CartItem)
dao / repository:存放数据访问对象类,负责与数据库交互(如 UserDao, ProductRepository)
service:存放业务逻辑类(如 UserService, OrderService)
controller / web / servlet:存放Web层控制器类,处理HTTP请求(如 ProductController)
util:存放工具类(如 StringUtil, DateUtil)
config:存放配置类
exception:存放自定义异常类
(deepseek搜索)
这样,即使有100个类,也能通过清晰的包结构进行有效管理,方便查找和维护。

4.《阿里巴巴Java开发手册》编程规范

  1. 变量命名:代码中的命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结束。反例:_name / _name / $name / name / name$
  2. 类命名:类名使用 UpperCamelCase风格,但以下情形例外:DO / BO / DTO / VO / AO / PO / UID 等。正例:UserDTO / XmlService / TcpUdpDeal
  3. 方法命名:方法名、参数名、成员变量、局部变量都统一使用 lowerCamelCase(小驼峰)风格。正例:localValue / getHttpMessage()
  4. 常量命名:常量命名全部大写,单词间用下划线隔开,力求语义表达完整清楚,不要嫌名字长。正例:MAX_STOCK_COUNT 反例:MAX_COUNT
  5. 包命名:包名统一使用小写,点分隔符之间有且仅有一个自然语义的英语单词。包名统一使用单数形式。正例:com.alibaba.ei.util
  6. 代码格式:如果是大括号内为空,则简洁地写成 {} 即可,不需要换行;如果是非空代码块,则:左大括号前不换行,后换行。右大括号前换行,后还有 else 等代码则不换行;表示终止的右大括号后必须换行。
  7. OOP规约:所有 POJO 类属性必须使用包装数据类型。局部变量和方法参数使用基本数据类型。

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

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

相关文章

EXCEL自动调整列宽的快捷键

在 Excel 中,自动调整列宽的快捷键是:Windows 系统:先选中要调整的列(可选中单列或多列),然后按下 Alt + H + O + I(依次按下这些键)。 Mac 系统:先选中要调整的列,然后按下 Command + Option + H + O + I。…

【C++实战⑬】解锁C++文件操作:从基础到实战的进阶之路 - 实践

【C++实战⑬】解锁C++文件操作:从基础到实战的进阶之路 - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Co…

破解塔吊顶升高危难题!让事故率降 50%、审批快 70%

在建筑施工领域,塔吊顶升作业作为关键且高危的环节,长期以来饱受诸多痛点的困扰,严重影响施工安全与进度。传统模式下,人工对塔吊顶升作业的审查多依赖现场巡检,然而人力有限,在忙碌的施工现场,难以做到时刻紧盯…

logicFlow________文档2

# LogicFlow 官方指南 - 自定义连线与事件处理## 📖 概述LogicFlow 是滴滴开源的一款流程图编辑框架,具有强大的扩展性和自定义能力。本文档基于LogicFlow官网最新版本,详细介绍如何实现自定义连线、自定义事件处理…

CF2086D Even String

题目链接:Problem - D - Codeforces 本身是一道数学题,我们可以把字符串中的奇数项和偶数项分开,形成两条序列 A 和 B。易知一种字母一定在同一条序列上。 假如说在 A 序列上分配了 \(a,b,c\) 三种字母,\(sum = c_…

logicflow___文档3

# LogicFlow 流程图编辑器开发文档## 📖 概述这是一个基于 LogicFlow 的流程图编辑器完整开发指南,包含详细的代码示例和实现方案。该编辑器支持节点创建、连接线绘制、关系管理等功能。## 🚀 快速开始### 1. 安装…

langraph-up-react

langraph-up-react https://github.com/fanqingsong/langraph-up-reactLangGraph ReAct Agent TemplateThis template showcases a ReAct agent implemented using LangGraph, works seamlessly with LangGraph Studio…

2025年运营商API安全建设最佳实践:某头部省级电信案例解析与方案推荐

2025年运营商API安全建设最佳实践:某头部省级电信案例解析与方案推荐运营商API安全需应对资产可视性缺失、动态风险防护不足、合规压力三大挑战。全知科技(Data-Sec)知影-API风险监测系统通过“规则引擎+AI引擎”双轮…

软件工程第二次作业-第一次个人编程作业

个人编程作业项目 内容这个作业属于哪个课程 [软件工程](首页 - 计科23级12班 - 广东工业大学 - 班级博客 - 博客园)这个作业要求在哪里 [作业要求](个人项目 - 作业 - 计科23级12班 - 班级博客 - 博客园)这个作业的目…

面向对象入门2与类的识别

一、什么样的方法应该用static修饰?不用static修饰的方法往往具有什么特性?Student的getName应该用static修饰吗?static 修饰方法的适用场景应该用 static 修饰的方法:方法与对象的状态无关,只依赖传入的参数完成…

202508_天山固网_to

流量分析,dvorak键盘解码, 大小写转二进制, BIN2QRCODETags:流量分析,dvorak键盘解码,大小写转二进制,BIN2QRCODE 0x00. 题目 【天山固网——2025网络安全技能竞赛】 children of stream 附件路径:https://pan.baid…

Java学生信息管理系统代码分析

Java学生信息管理系统代码分析学生信息管理系统代码分析 功能讲解 数据处理 该程序主要处理学生信息数据,包括学生的姓名、年龄、性别、学号、专业和 GPA 等信息。这些数据通过Student类的对象进行封装,并存储在Stud…

ArcGIS Pro中 Nodata和nan 黑边的处理 - 指南

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

怎么屏蔽 ahref.com 上你不想看到的网站链接(垃圾外链)

怎么屏蔽 ahref.com 上你不想看到的网站链接(垃圾外链)在 ahref 网站查看自己网站或别人网站的外链时,查询的结果里面总会充斥着各种垃圾网站的链接,你一点击过去就会弹出一个聊天窗口或者是什么广告。 虽然时间久…

浅谈字典树

本篇文章同步发表在洛谷博客。字典树 什么是字典树? 字典树,顾名思义它是一棵类似于字典的树,用树的形态存储字符串集合。具体地,它有一个自定义的无意义的根节点(通常编号为 \(0\) 或 \(1\)),所有存储进去的字…

go-mapus为局域网地图协作而生

很多年前就用mapus了,它是用实时数据库实现协作功能。可是实时数据库是国外的,不好用,速度慢,经常封掉。 这次直接用sqlite,简单快捷,加上websocket即可,没有原来想象的那么玄乎,代码也就几千行。 我把几十G的…

【工具变量】“国家级大数据综合试验区”试点城市DID(2000-2024年) - 教程

【工具变量】“国家级大数据综合试验区”试点城市DID(2000-2024年) - 教程2025-09-21 20:28 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x…

《手搓动态顺序表:从数组到自动扩容的华丽转身》 - 详解

《手搓动态顺序表:从数组到自动扩容的华丽转身》 - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas…

板子大全

整理一下常用的板子,并重新复习一下。线段树 维护复杂信息时重载 + 号,不同的修改直接在 upd() 中改。 struct SegTree{ #define ls u<<1 #define rs u<<1|1 #define mid ((l+r)>>1)ll tr[N<&l…

通过人大金仓数据库的逻辑备份与还原功能实现数据迁移

1、源数据库的操作 1.1、逻辑备份如上图所示,在源数据库进行备份。 2、目标数据库的操作 2.1、新建数据库如上图所示,新建一个目标数据库。如上图所示,设置新建数据库的名称(本例为 testDB )。如上图所示,新建目…