//外部类 public class HelloWorld { private String name = "爱慕课"; // 外部类中的show方法 public void show() { // 定义方法内部类 class MInner { int score = 83; public int getScore() { return score + 10; } } // 创建方法内部类的对象 MInner newScore = new MInner(); // 调用内部类的方法 newScore.getScore(); System.out.println("姓名:" + name + "\n加分后的成绩:" + newScore); } // 测试方法内部类 public static void main(String[] args) { // 创建外部类的对象 HelloWorld mo = new HelloWorld(); // 调用外部类的方法 mo.show(); } }
结果是:
姓名:爱慕课
加分后的成绩:HelloWorld$1MInner@1540e19d
我知道代码写错了,奇怪的是后面输出的@1540e19d,似乎再不同的IDE不一样
不太懂你想表达的意识。如果你是想问@1540e19d这里每次都输出不同,那么我猜测可能是因为你的方法是return一个值,但这个值你没有手动赋予它存储空间,它就系统自动存放,因此可能会不一样。
可以尝试手动定义变量,给他赋值后用指针查看空间地址。然后比对一下应该就知道是不是上述猜想了。
不好意思,我看错问题了。我的想法是,换了一个ide,应该又重新new一个MInner,内存就会给newScore重新分配一个地址。我试了一下,同一个ide输出的地址是相同的。
你在调用内部类的方法时,输出的是newScore (是一个对象,最后得到的是它的存储地址),如果你想得到93这个结果,你需要声明一个int型的变量(我这里面是s),再把 newScore.getScore() 的结果赋给变量s(也就是 int s = newScore.getScore() ),最后输出s (这才是个整型变量)。
//外部类 public class HelloWorld { private String name = "爱慕课"; // 外部类中的show方法 public void show() { // 定义方法内部类 class MInner { int score = 83; public int getScore() { return score + 10; } } // 创建方法内部类的对象 MInner newScore = new MInner(); // 调用内部类的方法 int s = newScore.getScore(); System.out.println("姓名:" + name + "\n加分后的成绩:" + s); } // 测试方法内部类 public static void main(String[] args) { // 创建外部类的对象 HelloWorld mo = new HelloWorld(); // 调用外部类的方法 mo.show(); } }