为什么在java中方法外的变量可以有重复的变量名?

2023-12-04

我正在学习 Java,我知道您不能将内部作用域中声明的变量命名为与外部作用域中声明的变量相同的名称,如下所示

public class Practice {
    public static void main(String[] args){
        int x = 10;
        if (x == 10){
            int x = 10;
        }           
    }   
}

但是,我注意到以下内容并不违法

public class Practice {
    int x = 10;
    public static void main(String[] args){
        int x = 10;
        if (x == 10) {
        }           
    }   
}

这不是声明了两次的变量吗?


这不是声明了两次的变量吗?

不它不是。因为两者属于不同的范围。x在外面main函数有类级别范围 while x代替main has 方法/函数级别范围.

不同作用域中的 2 个变量具有相同的名称是合法的。

请务必阅读§6.3。声明的范围来自JLS。以下是该部分的一些声明。

声明的范围是程序的区域,在该区域内 声明所声明的实体可以使用 简单的名称,只要它是可见的(第 6.4.1 节)。

声明被认为在某个特定点的范围内 当且仅当声明的范围包括该点时才执行程序。

块中局部变量声明的范围(第 14.4 节)是 声明出现的块的其余部分,从其开始 自己的初始化程序,并在右侧包含任何进一步的声明符 局部变量声明语句。

有很多与范围相关的概念,例如影子,所以请阅读§6.4。阴影和模糊.

JLS 是了解 Java 允许什么和不允许什么的最佳场所。请随意阅读那里的章节。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么在java中方法外的变量可以有重复的变量名? 的相关文章

  • 使用 Spring MVC,接受带有错误 JSON 的 POST 请求会导致返回默认的 400 错误代码服务器页面

    我正在开发 REST api 接收带有错误 JSON 的 POST 消息 例如 sdfasdfasdf 会导致 Spring 返回 400 错误请求错误的默认服务器页面 我不想返回页面 我想返回自定义 JSON 错误对象 当使用 Excep
  • 如何使用 Java Swing 创建图像映射?

    我需要使用 Swing 制作一个显示背景图像的图像地图 然后当鼠标悬停在 或单击 特定热点上时 我需要弹出一个 放大 图像并显示它 我正在考虑扩展 JPanel 以包含图像引用并通过 PaintComponent g 方法绘制该图像 到目前
  • Mockito:使用“thenReturn”中的方法返回模拟不起作用

    我遇到了我认为可能是 Mockito 的错误 但想知道是否有其他人可以解释为什么这个测试不起作用 基本上 我有两个对象 如下所示 public class FirstObject private SecondObject secondObj
  • Android update 17 似乎与外部 Jars 不兼容

    我刚刚允许我的 Mac 对其 Java 安装进行更新 现在我的一些旧罐子 例如javax mail and apache commons httpclient 正在投掷 找不到类 运行时异常 意思是 它们编译得很好 但在运行时崩溃 出现如下
  • n 个素数之和 java,困惑

    我读过几篇关于这方面的文章 我什至在一次考试中这样做过 但是是在 vb net 中 它工作得很好 但是当我尝试执行我的程序时 Eclipse 只是不停地运行 否则它会给我错误的答案 这是我的第四次尝试 我需要将前 n 个素数相加 因此我检查
  • Java:如何将所有 java 日期分组到相应的周中?

    Problem 我有一个很大的日期清单 我需要按周安排它们 问题 如何按以下方式对日期进行分组一年中的一周他们在吗 示例数据集 Date date new SimpleDateFormat parse 04 01 2015 Date dat
  • 用零向左填充字符串[重复]

    这个问题在这里已经有答案了 我见过类似的问题here https stackoverflow com questions 388461 padding strings in java and here https stackoverflow
  • 正则表达式忽略引号之间的文本

    我有一个正则表达式 它是 s 这用于分割字符串 但我不想让它分开 如果它在引号中 我不会使用 split 而是使用 Pattern 和 Matcher A demo import java util regex Matcher import
  • JOOQ初始化DAO最佳方法

    我想知道初始化 JOOQ 生成 DAO 的最佳实践 现在 我使用以下方法来初始化 JOOQ 生成的 DAO 在以下情况下 Student Dao 是 JOOQ 生成的 public class ExtendedStudentDAO exte
  • jSoup 检查跨度类是否存在

    我有一个具有以下格式的 HTML
  • 用 Maven 解决 jar 地狱问题?

    我正在使用两个 jars A 和 B B 是一个库 A 的类使用库 B 中的一些旧类 现在 当我将这两个 jars 包含在我的项目类路径中时 这给我带来了一个问题 因为它们的名称相同两个班级 但其中一个班级比另一个班级年长 并且行为方式不同
  • 当我收到 java.lang.NoClassDefFoundError: javax/ws/rs/client/RxInvokerProvider 错误时缺少什么依赖项?

    我有一个小项目 出于测试目的 我通过单元测试执行我的 jersey 2 客户端 但是 不幸的是 我收到了错误 我不知道还缺少什么依赖项 目前泽西岛的网页因维护而关闭 我把pom xml的相同相关部分 测试代码和测试代码也附上了 public
  • Java 将字符串拆分为单词逗号和句号

    我一直在使用myString split s 得到每个单词 但现在我想把逗号和句号也分开 例如 妈妈总是说生活就像一盒巧克力 你永远不知道会得到什么 to Mama always said life was like a box of ch
  • MyBatis 遵循 JPA 吗?

    作为我的第一个 ORM 我已经使用 myBatis 几个月了 现在我正在尝试学习其他东西 例如 Hibernate JPA 起初很难理解 Hibernate 和 JPA 之间的区别 经过几分钟的研究 我明白 JPA 只是一个规范 Hiber
  • 如何设置鼠标监听器的优先级

    我有一个带有列表和按钮的面板 名单已定MouseAdapter with mouseClick 我添加到面板MouseAdapter with mousePressed and mouseReleased and MouseMotionAd
  • java中接口上的抽象方法是什么[重复]

    这个问题在这里已经有答案了 可能的重复 为什么要将 Java 接口方法声明为抽象方法 https stackoverflow com questions 641536 why would one declare a java interfa
  • Web 服务器上的身份验证和授权 ?

    我正在构建一个 Android 应用程序 它与 apache tomcat 上的 Web 服务器进行通信 Web 服务器采用 JAVA EE 构建 目前 为了进行身份验证和授权 我使用用户名 密码 为了管理会话 我使用令牌 因此 当用户登录
  • Java 错误:默认构造函数未定义隐式超级构造函数

    我有一些简单的 Java 代码 其结构与此类似 abstract public class BaseClass String someString public BaseClass String someString this someSt
  • 我可以为每个片段单独提供工具栏吗?如何处理导航抽屉

    在我的应用程序中 某些页面的工具栏中有自定义视图 有些片段具有透明工具栏 有些片段具有坐标布局滚动 因此 我决定为每个片段单独设置工具栏 我想知道这是否是一个好的做法 如果有人已经这样做了 请分享代码或示例 您可以在片段中使用自定义工具栏
  • 从 Eclipse 启动时创建新的 JFrame 时 Java 将关闭。没有抛出异常

    我正在开发一个在 Eclipse 中开发的 Java 项目 直到今天一切都很好 昨天 在完成我的项目之前 我最后一次运行它以检查一切是否正常并且运行正常 但是今天 当我启动该项目并按下 运行 时 我的应用程序就神秘地关闭了 没有崩溃 没有消

随机推荐