Java第三次预习总结与问题

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 注解,并清晰地说明采用的新接口或者新服务是什么。

->不能使用过时的类或方法