面相对象入门与类的识别-java

什么样的方法应该用 static 修饰?不用 static 修饰的方法往往具有什么特性? StudentgetName 应该用 static 修饰吗?

应该用static修饰方法的情况

工具方法:当方法是用于提供通用的功能,不依赖于类的实例状态时,适合用 static 修饰。比如 Java 标准库中的 Math 类,它的很多方法如 Math.sqrt() (计算平方根)、 Math.pow() (计算幂次方)等,这些方法不需要操作特定对象的属性,只对传入的参数进行计算,就可以用 static 修饰。调用时直接通过类名调用,如 double result = Math.sqrt(4) ; ,使用起来简洁方便,不需要创建Math类的实例。

工厂方法:用于创建类的实例的方法,有时也会用 static 修饰。比如 Integer 类的 valueOf() 方法, Integer num = Integer.valueOf(10) ; ,它可以根据传入的参数创建 Integer 对象,并且在这个过程中还可以进行一些优化,比如缓存一定范围内的整数对象,提高性能,而且不需要先创建 Integer 类的实例就能调用该方法来创建对象。
常量相关的方法:如果方法是用于获取类级别的常量值,也可以用 static 修饰。例如,在一个表示单位换算的类中,有一个方法用于获取固定的换算比例,它不依赖于任何实例的状态,就可以定义为 static 方法 。

不用static修饰的方法的特性

依赖实例状态:非 static 方法通常需要访问和操作对象的实例变量(成员变量)。例如,一个 Person 类有 nameage 实例变量,其 introduce() 方法用于输出个人信息,如 public void introduce() { System.out.println("My name is " + name + ", and I'm " + age + " years old."); } ,这个方法需要访问当前对象的 nameage 值,所以必须在创建 Person 类的实例后,通过实例来调用,它与具体的对象实例相关联。

具有对象特异性:不同的对象实例调用非 static 方法时,可能会因为对象自身属性的不同而产生不同的结果。比如两个 Person 对象,一个叫 "Alice",年龄 25 岁,另一个叫 "Bob",年龄 30 岁,他们调用 introduce() 方法输出的信息是不一样的,体现了方法与对象实例的紧密联系。

Student的getName方法是否应该用static修饰

Student 类的 getName 方法通常不应该用 static 修饰 。因为 getName 方法一般是用来获取某个具体学生对象的姓名,而学生姓名是属于每个学生实例的属性(实例变量)。

购物车案例中,使用了什么方法将问题描述中的类、方法、属性找出来?方法与属性到底属于哪个类,要怎么判定呢?

**从业务场景拆解实体与行为:

先找 核心实体(对应类) :识别问题中 “有哪些独立事物 / 概念”(如购物车→ShoppingCart、商品→Product、用户→User);

再定 每个实体的属性 :每个实体 “有什么特征”(如Product有id、name、price;ShoppingCart有cartItems列表);

最后补 方法 :每个实体 “能做什么操作”(如ShoppingCart有addProduct()、removeProduct();Product有getPrice())。

判定方法 / 属性属于哪个类的原则

属性:看该特征 “归属于哪个实体”(如 “商品价格” 归Product,“购物车中的商品列表” 归 ShoppingCart );

方法:看该操作 “由哪个实体发起 / 依赖哪个实体的数据” (如 “添加商品” 需操作购物车的商品列表,归 ShoppingCart ;“获取商品名称” 依赖商品自身数据,归 Product )。

一个项目中有很多类。怎样才能避免你项目中的类与别人编写的类同名呢?项目中类各种各样要怎么管理这些代码呢?举例说明

避免类同名:用 “包(Package)” 划分命名空间

  1. 包名命名规则(以 Java 为例,其他语言逻辑一致)用 “反转的公司 / 组织域名” 开头(确保全球唯一),再按 “项目→模块→功能” 分层,全小写 + 英文点分隔。

  2. 同名类不冲突示例:你的类:com.zhang.order.Order(处理订单逻辑),别人的类:com.li.payment.Order(处理支付订单的工具类)即使都叫Order,因包路径不同,编译器能精准区分,无冲突。

阅读《阿里巴巴Java开发手册 终极版(1.3.0)》,写出至少7条Java编程规范。应包含如下几个方面:变量命名、类命名、方法命名、常量命名、包命名、代码格式、OOP规约。

《阿里巴巴 Java 开发手册终极版 (1.3.0)》中的 7 条 Java 编程规范:

变量命名:方法名、参数名、成员变量、局部变量都统一使用 lowerCamelCase 风格,必须遵从驼峰形式。例如: localValueinputUserId

类命名:类名使用 UpperCamelCase 风格,必须遵从驼峰形式,但 DO/BO/DTO/VO/AO 等例外。例如:UserDOXmlService

方法命名:同变量命名,使用 lowerCamelCase 风格,如 getHttpMessage ()

常量命名:常量命名全部大写,单词间用下划线隔开,力求语义表达完整清楚。例如:MAX_STOCK_COUNT。

包命名:包名统一使用小写,点分隔符之间有且仅有一个自然语义的英语单词。包名统一使用单数形式,但是类名如果有复数含义,类名可以使用复数形式。例如:com.alibaba.open.util。

代码格式:大括号使用规范,非空代码块左大括号后换行,右大括号前换行;括号与字符间无空格,保留字与括号间加空格;运算符左右加空格,使用 4 个空格缩进,禁止使用 Tab。

OOP 规约:通过类名访问静态成员,覆写方法必须加 @Override 注解;可变参数需放置在参数列表最后,避免使用 Object ;使用常量或确定对象调用 equals 方法,避免 NPE

posted @ 2025-09-17 10:58  只整冰红茶  阅读(7)  评论(0)    收藏  举报