当前位置: 首页 > 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.hskmm.com/?act=detail&tid=12453

相关文章:

  • EXCEL自动调整列宽的快捷键
  • 【C++实战⑬】解锁C++文件操作:从基础到实战的进阶之路 - 实践
  • 破解塔吊顶升高危难题!让事故率降 50%、审批快 70%
  • logicFlow________文档2
  • CF2086D Even String
  • logicflow___文档3
  • 2025年运营商API安全建设最佳实践:某头部省级电信案例解析与方案推荐
  • 软件工程第二次作业-第一次个人编程作业
  • 面向对象入门2与类的识别
  • 202508_天山固网_to
  • jmeter分布式压测
  • 怎么屏蔽 ahref.com 上你不想看到的网站链接(垃圾外链)
  • 浅谈字典树
  • go-mapus为局域网地图协作而生
  • 《手搓动态顺序表:从数组到自动扩容的华丽转身》 - 详解
  • 板子大全
  • 通过人大金仓数据库的逻辑备份与还原功能实现数据迁移
  • 第十二节:订单普通下单、支付回调、退款、退款回调详解
  • 《原子习惯》-读书笔记7
  • 第3周预习作业
  • 《原子习惯》-读书笔记6
  • Java LTS版本进化秀:从8到21的欢乐升级之旅
  • 201912_EASER
  • 搜索百科(3):Elasticsearch — 搜索界的“流量明星”
  • 打印机漏洞、匿名协议与AWS安全:一周技术热点解析
  • 从零开始训练推理模型:GRPO+Unsloth改造Qwen实战指南
  • ALLinSSL,开源免费的SSL证书自动化管理平台
  • 《原子习惯》-读书笔记5
  • 03-袁东申论-概括原因
  • 包和final