当前位置: 首页 > news >正文

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

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.rkmt.cn/news/9195.html

相关文章:

  • EXCEL自动调整列宽的快捷键
  • 破解塔吊顶升高危难题!让事故率降 50%、审批快 70%
  • CF2086D Even String
  • logicflow___文档3
  • langraph-up-react
  • Java学生信息管理系统代码分析
  • ArcGIS Pro中 Nodata和nan 黑边的处理 - 指南
  • 浅谈字典树
  • go-mapus为局域网地图协作而生
  • 第3周预习作业
  • 01自我介绍加规划
  • 《原子习惯》-读书笔记6
  • Java LTS版本进化秀:从8到21的欢乐升级之旅
  • SpringBoot控制层接收参数处理、Logback日志入门和使用 - 实践
  • 20231321王曦轶《密码系统设计》第二周
  • R ggplot2学习Nature子刊一张图,换数据即可用! - 指南
  • 浏览器兼容性问题全解:CSS 前缀、Grid/Flex 布局兼容专业的方案与跨浏览器调试技巧
  • 深入解析:大数据领域数据产品的深度学习应用
  • 用户态与内核态的深度解析:安全、效率与优化之道 - 教程
  • 1.6μVRMS超低噪声、20V、200mA低静态电流线性稳压器IBSP3030,替代LT3042、GM1201
  • 爱锋拍照工具 - 技术支持
  • WPF资源字典合并报错 - 详解
  • 完整教程:【音视频】WebRTC 音视频延时、同步分析以及超低延时优化
  • Ubuntu操作便捷的系统下运用mysql、mongodb、redis
  • 实用指南:【SpringBoot】26 核心功能 - Web开发原理 - Spring Boot 中定制 Servlet 容器
  • 实用指南:山东大学《Web数据管理》期末复习宝典【万字解析!】
  • 01_Angular时代的前端开发变革
  • QQ 陌生人点赞 功能存在隐私泄露风险
  • Python爬虫实战——使用NetNut网页解锁器获取亚马逊电商资料
  • TCM安全学院夏季大促与免费网络安全课程发布