当前位置: 首页 > article >正文

【java】就近原则

在 Java 中,就近原则(也称为“局部优先原则”)是指:当变量或方法的名字发生冲突时,程序会优先使用最近定义的变量或方法。这个原则主要适用于变量、方法调用以及作用域的范围。


就近原则的核心思想

  1. 局部变量优先于成员变量

    • 如果局部变量(方法内部定义的变量)和成员变量(类的属性)同名,程序会优先使用局部变量。

  2. 子类方法优先于父类方法

    • 如果子类和父类有同名方法,程序会优先调用子类的方法。

  3. 就近的作用域

    • 在嵌套的作用域中,程序会优先使用最近的作用域中定义的变量。


就近原则的例子

1. 局部变量 vs 成员变量

java

class Test {
    int x = 10; // 成员变量

    void printX() {
        int x = 20; // 局部变量
        System.out.println(x); // 输出 20,优先使用局部变量
    }

    void printMemberX() {
        System.out.println(this.x); // 输出 10,使用成员变量
    }
}

public class Main {
    public static void main(String[] args) {
        Test test = new Test();
        test.printX();        // 输出 20
        test.printMemberX();  // 输出 10
    }
}

解释

  • 在 printX 方法中,局部变量 x 和成员变量 x 同名。

  • 根据就近原则,程序会优先使用局部变量 x,所以输出 20

  • 如果想访问成员变量,可以使用 this.x


2. 子类方法 vs 父类方法

java

class Parent {
    void show() {
        System.out.println("Parent's show");
    }
}

class Child extends Parent {
    void show() {
        System.out.println("Child's show");
    }
}

public class Main {
    public static void main(String[] args) {
        Child child = new Child();
        child.show(); // 输出 "Child's show",优先调用子类的方法
    }
}

解释

  • 子类 Child 和父类 Parent 都有一个 show 方法。

  • 根据就近原则,程序会优先调用子类的 show 方法。


3. 嵌套作用域中的变量

java

public class Main {
    public static void main(String[] args) {
        int x = 10; // 外层变量

        if (true) {
            int x = 20; // 编译错误,不能重复定义变量
            System.out.println(x);
        }
    }
}

解释

  • 在同一个作用域中,不能定义同名的变量。

  • 如果在嵌套的作用域中定义同名变量,会导致编译错误。


就近原则的注意事项

  1. 避免变量名冲突

    • 在编写代码时,尽量避免局部变量和成员变量同名,以提高代码的可读性。

  2. 使用 this 关键字

    • 如果局部变量和成员变量同名,可以使用 this 关键字来明确访问成员变量。

  3. 方法重写

    • 在子类中重写父类方法时,就近原则会优先调用子类的方法。如果想调用父类的方法,可以使用 super 关键字。


总结

  • 就近原则是指程序会优先使用最近定义的变量或方法。

  • 它适用于局部变量与成员变量的冲突、子类方法与父类方法的冲突,以及嵌套作用域中的变量。

  • 通过理解就近原则,可以更好地编写清晰、易读的代码。


http://www.kler.cn/a/558489.html

相关文章:

  • vscode@右键文件夹或文件vscode打开一键配置
  • for循环可遍历但不可以修改列表原因分析
  • 物联网常见协议基础学习
  • 【软考】【2025年系统分析师拿证之路】【啃书】第十三章 系统设计(十四)
  • CSS基础(盒子模型的组成、内容溢出、隐藏元素的方式、样式的继承、元素的默认样式、布局技巧、元素之间的空白问题、行内块元素的幽灵空白问题)
  • 利用 AI 大模型驱动企业智能化转型:Cherry Studio 与 Anything LLM 的应用探索
  • 海康威视摄像头ISUP(原EHOME协议) 摄像头实时预览springboot 版本java实现,并可以在浏览器vue前端播放(附带源码)
  • deepseek云端部署及结合本地知识库(结合api调用)可视化界面应用
  • 【拓展】二进制的原码、补码、反码及相互转换方式
  • Linux系统管理与编程01:准备工作
  • 深度学习(3)-TensorFlow入门(梯度带)
  • `pip freeze > requirements.txt` 命令
  • Python 错误和异常处理
  • 正则表达式特殊字符
  • 腾讯SQL面试题解析:如何找出连续5天涨幅超过5%的股票
  • LSTM 与随机森林的对比
  • LeetCode216
  • Python 的 Lambda 函数及应用场景
  • Stm32中SysTick 定时器的使用
  • Ubuntu 下 nginx-1.24.0 源码分析 - ngx_array_init 函数