Jay_is_Chou 2024-10-10 01:47 采纳率: 100%
浏览 36
已结题

遇到一个Java小问题

偶然间在java中发现一个问题,之前一直都没注意到过,记一下


/*
* java 中没有大小写 冲突,为什么 AAA 和 aaa 类 一起会运行错误
* 如果把 AAA 放在 aaa 下面,程序又能正常执行
* */

public class finders {
    public static void main(String[] args) {
        AAA A = new AAA(4);
        A.info();
    }
}

class AAA {
    private int b;

    public AAA(int b) {
        this.b = b;
    }

    public void info() {
        System.out.println("AAA->b = " + b);
    }
}

class aaa {
    private int b;

    public aaa(int b) {
        this.b = b;
    }

    public void info() {
        System.out.println("aaa->b = " + b);
    }
}
  • 写回答

1条回答 默认 最新

  • 一轮明月照丘壑 2024-10-10 01:48
    关注

    以下回复参考:皆我百晓生券券喵儿等免费微信小程序作答:

    在Java中,类名是区分大小写的。这意味着 AAAaaa 是两个不同的类。尽管Java语言本身不区分变量名的大小写(即变量名是大小写敏感的),但在类名上却是严格的。因此,你不能在同一作用域内定义两个不同大小写的同名类。这就是你遇到的问题所在。

    当你尝试创建 AAA 类的实例并调用其 info() 方法时,JVM试图寻找名为 AAA 的类。由于在同一作用域内存在另一个名为 aaa 的类(其名字大小写不同),Java编译器会因为找不到名为 AAA 的类而抛出错误。这就是你看到的现象。如果你改变创建实例的类的名称(从 AAA 改为 aaa),编译器就会找到正确的类定义并成功编译和运行程序。因为这时候你是在引用正确的类名 aaa

    总的来说,你遇到的问题主要是因为在同一作用域内存在大小写不同的同名类,从而引发的混淆和冲突。这是Java中对于类和接口的命名约定的一部分,必须遵守这个规则以避免此类问题。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 10月23日
  • 已采纳回答 10月15日
  • 创建了问题 10月10日