Q1. 什么样的方法应该用static修饰?不用static修饰的方法往往具有什么特性?Student的getName应该用static修饰吗?
一、什么样的方法应该用static修饰?
static 修饰的方法属于类本身,而不是类的某个具体对象。这意味着你不需要创建类的实例就可以调用它。通常,满足以下条件的方法适合用 static 修饰:
1.不依赖于对象的特定状态(成员变量) :
如果一个方法只需要访问类的静态成员或者其自身传入的参数,而不需要访问任何非静态的成员变量,那么它可以是静态的。
2.通用工具方法 :
例如数学运算、辅助功能等,这些方法不需要知道具体对象的信息。
3.工厂方法 :
创建类的实例的方法,但本身不依赖于已存在的实例。
二、不用static修饰的方法往往具有什么特性?
不用 static 修饰的方法(也称为实例方法)往往具有以下特性:
1.依赖于对象的特定状态(成员变量) :
它们需要访问或修改类的实例变量,以便对特定对象执行操作。
2.需要通过对象来调用 :
你必须先创建类的实例,然后才能调用这些方法。
3.体现对象的行为 :
这些方法描述了对象能够执行的动作或行为。
三、Student的getName应该用static修饰吗?
不应该 。
Student 类的 getName() 方法的目的是获取某个特定学生的姓名。
姓名(name)是 Student 类的一个实例变量,每个学生对象都有自己的姓名。
因此,getName() 方法需要访问特定 Student 对象的 name 属性。如果 getName() 被声明为 static,它将无法访问非静态的 name 变量,因为它不属于任何特定的 Student 对象。
你需要先创建一个 Student 对象,然后通过该对象来调用 getName() 方法,以获取该对象的姓名。
Q2. 购物车案例中,使用了什么方法将问题描述中的类、方法、属性找出来?方法与属性到底属于哪个类,要怎么判定呢?
一、购物车案例中,使用了什么方法将问题描述中的类、方法、属性找出来?
在分析问题的过程中寻找名词,动词。商品,订单等名词就可以得到类,而动词对应方法(如添加商品到订单,完成付款)首先识别类,然后再为各个类添加方法。
二、方法与属性到底属于哪个类,要怎么判定呢?
名词对应类,动词对应方法。
Q3. 一个项目中有很多类。怎样才能避免你项目中的类与别人编写的类同名呢?项目中类各种各样要怎么管理这些代码呢?举例说明。
一、一个项目中有很多类。怎样才能避免你项目中的类与别人编写的类同名呢?
使用命名空间(Namespaces):
1.这是最常见和推荐的方法。命名空间提供了一种将代码组织成逻辑组的方式,并有助于防止命名冲突。
2.例如,在 C++、Java 或 C# 中,您可以将您的类放入一个唯一的命名空间中,如 MyCompany.MyProject.Networking。
使用模块(Modules)或包(Packages):
1.在 Python 或 JavaScript 等语言中,模块和包扮演着类似命名空间的角色。每个文件通常就是一个模块,您可以将相关的类组织到不同的模块或包中。
2.例如,在 Python 中,您可以有 my_project/network/connection.py,其中 connection.py 包含 Connection 类。
遵循命名约定:
1.采用一套清晰且一致的命名约定,可以降低冲突的可能性。
2.添加前缀:为您的所有类名添加一个独特的前缀,例如 MyProject_Connection 或 MP_Connection。
3.使用描述性名称:确保类名足够描述性,可以清晰地表达其用途和上下文。
避免使用过于通用或常见的名称:
1.尽量不要使用像 Utils、Helper 或 Manager 这样过于通用的类名,因为它们很容易与他人代码中的同名类冲突。
代码审查和自动化工具:
1.定期的代码审查可以帮助发现潜在的命名冲突。
2.使用静态代码分析工具,它们有时可以检测到一些命名上的问题。
二、项目中类各种各样要怎么管理这些代码呢?
包管理,例如Java编写程序时是类就在包中
Q4. 4.阅读《阿里巴巴Java开发手册 终极版(1.3.0)》,写出至少7条Java编程规范。应包含如下几个方面:变量命名、类命名、方法命名、常量命名、包命名、代码格式、OOP规约。
1.变量命名
->代码中的命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结束
->代码中的命名严禁使用拼音与英文混合的方式,更不允许直接使用中文的方式。
2.类命名
->类名使用 UpperCamelCase 风格,必须遵从驼峰形式,但以下情形例外:DO / BO /
DTO / VO / AO
->抽象类命名使用 Abstract 或 Base 开头;
异常类命名使用 Exception 结尾;
测试类命名以它要测试的类的名称开始,以 Test 结尾。
->POJO 类中布尔类型的变量,都不要加 is,否则部分框架解析会引起序列化错误。
3.方法命名
->方法名、参数名、成员变量、局部变量都统一使用 lowerCamelCase 风格,必须遵从驼峰形式。
4.常量命名
->常量命名全部大写,单词间用下划线隔开,力求语义表达完整清楚,不要嫌名字长。
5.包命名
->包名统一使用小写,点分隔符之间有且仅有一个自然语义的英语单词。包名统一使用单数形式,但是类名如果有复数含义,类名可以使用复数形式。
6.代码格式
->大括号的使用约定。如果是大括号内为空,则简洁地写成{}即可,不需要换行;
如果是非空代码块则:
1) 左大括号前不换行。
2) 左大括号后换行。
3) 右大括号前换行。
4) 右大括号后还有 else 等代码则不换行;表示终止的右大括号后必须换行。
->左小括号和字符之间不出现空格;同样,右小括号和字符之间也不出现空格。
->if/for/while/switch/do 等保留字与括号之间都必须加空格。
->任何二目、三目运算符的左右两边都需要加一个空格。
->采用 4 个空格缩进,禁止使用 tab 字符
7.OOP规约
->避免通过一个类的对象引用访问此类的静态变量或静态方法,无谓增加编译器解析成本,直接用类名来访问即可。
->所有的覆写方法,必须加@Override 注解。
->相同参数类型,相同业务含义,才可以使用 Java 的可变参数,避免使用 Object。
->外部正在调用或者二方库依赖的接口,不允许修改方法签名,避免对接口调用方产生影响。接口过时必须加@Deprecated 注解,并清晰地说明采用的新接口或者新服务是什么。
->不能使用过时的类或方法