Java | 编程技巧

实践来源:Spring手撸源码

编程技巧:类代码中方法的位置顺序结构

常见的排列顺序

  1. 常量和静态变量
  2. 实例变量
  3. 构造方法
  4. 公共方法(public)
  5. 受保护的方法(protected)
  6. 私有方法(private)
  7. getter 和 setter 方法

示例

覆盖的方法往往代表了类的重要行为和逻辑,应该放在更显眼的位置。这有助于快速找到类的主要功能和行为。

public class MyClass extends ParentClass {

    // 字段(属性)
    private String name;
    private int age;

    // 构造方法
    public MyClass(String name, int age) {
        this.name = name;
        this.age = age;
    }

    // 覆盖超类的方法
    @Override
    public void parentMethod() {
        // 方法实现
    }

    // 公共方法
    public void myMethod() {
        // 方法实现
    }

    // 受保护的方法
    protected void protectedMethod() {
        // 方法实现
    }

    // 私有方法
    private void privateMethod() {
        // 方法实现
    }
    // Getter 和 Setter 方法
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

}

编程技巧:分析类的步骤

分析一个Java类的过程涉及多个步骤,以便全面理解其结构、功能和用途。以下是一个系统化的方法:

1. 源文件分析

a. 包声明

首先检查包声明,了解该类在项目中的位置以及它的层级结构。

package com.example.myproject;

b. 导入语句

查看导入的类和包,以了解类的依赖关系。

import java.util.List;
import java.util.stream.Collectors;

2. 类声明部分

a. 类的修饰符

检查类是public、abstract还是final,以了解类的可访问性和继承关系。

public class MyClass { }

b. 类名和泛型

了解类的名称和是否使用了泛型。

public class MyClass<T> { }

c. 继承和实现

查看类是否继承自某个类或实现某些接口。

public class MyClass extends SuperClass implements MyInterface { }

3. 类的成员

a. 成员变量

查看类中的字段,了解类的数据结构。

private int id;
private String name;

b. 静态成员

识别静态字段和方法,理解它们在类中的作用。

private static final Logger logger = Logger.getLogger(MyClass.class);

4. 构造方法

分析类的构造方法,了解对象的创建过程以及初始化逻辑。

public MyClass(int id, String name) {
    this.id = id;
    this.name = name;
}

5. 方法

a. 公共方法

重点查看公共方法,这些方法定义了类的主要功能。

public void doSomething() {
    // method implementation
}

b. 私有方法

查看私有方法,理解内部逻辑和辅助功能。

private void helperMethod() {
    // method implementation
}

c. 静态方法

分析静态方法,了解它们是否提供了与对象无关的功能。

public static void staticMethod() {
    // method implementation
}

d. 覆盖和实现的方法

查看重写的父类方法和实现的接口方法,了解该类如何特化或扩展父类和接口的功能。

@Override
public void interfaceMethod() {
    // method implementation
}

6. 注解

查看类和成员上使用的注解,理解它们的元数据和框架集成。

@Deprecated
public void oldMethod() { }

7. 设计模式

识别该类是否实现了某些设计模式,如单例模式、工厂模式、代理模式等,理解它的设计意图。

public class Singleton {
    private static final Singleton instance = new Singleton();
    
    private Singleton() { }
    
    public static Singleton getInstance() {
        return instance;
    }
}

8. 文档注释

查看类和方法的Javadoc注释,了解开发者提供的文档说明和使用建议。

/**
 * This class represents a user in the system.
 */
public class User { }

9. 异常处理

查看方法中的异常处理逻辑,理解类如何应对错误情况。

public void riskyMethod() {
    try {
        // risky code
    } catch (Exception e) {
        // handle exception
    }
}

10. 测试和用例

如果有单元测试或集成测试,查看测试代码,了解如何验证类的功能。

@Test
public void testDoSomething() {
    MyClass myClass = new MyClass();
    myClass.doSomething();
    assertTrue(myClass.isSuccessful());
}

综合分析

综合以上各个方面,理解类的整体功能、设计和在系统中的角色。这些步骤帮助你全面地分析和理解一个Java类,确保你能清楚地看到它的设计意图、实现细节和应用场景。

编程技巧:bean != null 与 null != bean

在编写Java代码时,进行if判断时使用null != beanbean != null在逻辑上是等价的,都是用来检查bean是否不为null。然而,在某些情况下,选择其中一种写法可能有特定的意义或偏好。以下是对这两种写法的一些分析和区别:

1. null != beanbean != null 的功能上没有区别

在逻辑功能上,这两种写法没有区别,编译器会生成相同的字节码:

if (null != bean) {
    // do something
}

if (bean != null) {
    // do something
}

无论采用哪种方式,都可以正确判断bean是否不为null

2. null != bean 的写法优势

  • 防止赋值错误:在一些代码风格指南中,推荐使用null != bean的写法,以防止在条件判断中出现赋值错误。例如,如果不小心将=误写成==,编译器会报错,从而避免意外的赋值操作:
if (null = bean) {  // 这种写法会导致编译错误
    // do something
}

if (bean = null) {  // 这种写法不会导致编译错误,但逻辑错误
    // do something
}

使用null != bean时,如果不小心写成null = bean,编译器会报错,因为null是一个常量,不能赋值。

3. bean != null 的写法优势

  • 可读性和一致性:大多数程序员更习惯并认为bean != null更自然、更易读。它按照正常的思维顺序:我们首先考虑对象,然后考虑它的状态(是否为null)。

4. 个人和团队习惯

  • 一致性和习惯:在团队开发中,保持代码风格的一致性是很重要的。如果团队或项目的编码规范中有明确的要求,应遵循团队规范。例如,有些团队习惯使用null != bean来防止赋值错误,而有些团队则更倾向于使用bean != null

总结

虽然null != beanbean != null在功能上没有区别,但在实际编写代码时,可以根据以下几点进行选择:

  1. 防止赋值错误:如果你担心在判断中出现赋值错误,可以选择null != bean
  2. 可读性:如果你更关注代码的可读性和易理解性,选择bean != null
  3. 团队规范:遵循团队或项目的编码规范,保持代码风格的一致性。

无论选择哪种写法,最重要的是代码要清晰、易读,并且避免潜在的错误。

posted @ 2024-07-17 00:09  Neking  阅读(3)  评论(0编辑  收藏  举报