黑马程序员技术交流社区

标题: 关于类的小问题(结束) [打印本页]

作者: 王琪    时间: 2014-6-7 09:48
标题: 关于类的小问题(结束)
本帖最后由 王琪 于 2014-6-8 20:52 编辑

无意中修改代码,就发现现下面的问题不知该怎么解释
一个是内部类一个是外部类,同名,但是结果不同
  1. package org.demo.java;
  2. import java.util.*;
  3. class person{
  4.         String name;
  5.         int age;
  6.         public void tell(){
  7.                 System.out.println("姓名"+name+"年龄"+age+"A");
  8.         }
  9. }
  10. public class text {
  11.         private static class person{
  12.                 String name;
  13.                 int age;
  14.                 public void tell(){
  15.                         System.out.println("姓名"+name+"年龄"+age+"B");
  16.                 }
  17.         }
  18.         public static void main(String[]args){
  19.                 person p=new person();
  20.                 p.name="王琪";
  21.                 p.age=90;
  22.                 p.tell();
  23.         }
  24. }
  25. 姓名王琪年龄90B
复制代码
  1. package org.demo.java;
  2. import java.util.*;
  3. class person{
  4.         String name;
  5.         int age;
  6.         public void tell(){
  7.                 System.out.println("姓名"+name+"年龄"+age+"A");
  8.         }
  9. }
  10. public class text {
  11.         
  12.         public static void main(String[]args){
  13.                 person p=new person();
  14.                 p.name="王琪";
  15.                 p.age=90;
  16.                 p.tell();
  17.         }
  18. }
  19. 姓名王琪年龄90A
复制代码



作者: woshihq    时间: 2014-6-7 10:21
本帖最后由 woshihq 于 2014-6-7 10:23 编辑

不建议你将内部类定义为static。你可以从内存上思考这个问题,static类型的内部类,相当于一个在外部定义的类,在外部类载入时就开始创建,程序在进入你的static的main方法中时 ,你的外部类就载入了,所以你的内部类也被创建,那程序将你的
person p=new person();p.name="王琪";p.age=90; 理解成是对内部类的操作,所以就有这样的结果。这只是我的理解
作者: woshihq    时间: 2014-6-7 10:26
其实static的内部类使用方式和static的方法类似
作者: 王琪    时间: 2014-6-7 10:38
  1. class person{
  2.         String name;
  3.         int age;
  4.         public void tell(){
  5.                 System.out.println("姓名"+name+"年龄"+age+"A");
  6.         }
  7. }
复制代码
是不是 一般类在用到他时才加进内存中?
但是
  1. public class text {
  2.         private static class person{
  3.                 String name;
  4.                 int age;
  5.                 public void tell(){
  6.                         System.out.println("姓名"+name+"年龄"+age+"B");
  7.                 }
  8.         }
  9.         public static void main(String[]args){
  10.                 person p=new person();
  11.                 p.name="王琪";
  12.                 p.age=90;
  13.                 p.tell();
  14.         }
  15. }
复制代码
包含主方法的的类先加进内存中,随之static内部类自动进入内存,调用也是调用内部类,而那个类

  1. class person{
  2.         String name;
  3.         int age;
  4.         public void tell(){
  5.                 System.out.println("姓名"+name+"年龄"+age+"A");
  6.         }
  7. }
复制代码
没来得及用,所以就永远也用不到吧?
但是我想调用哪个类
  1. class person{
  2. String name;
  3. int age;
  4. public void tell(){
  5. System.out.println("姓名"+name+"年龄"+age+"A");
  6. }
  7. }
复制代码

就没有别的办法了吧?
,嘻嘻也许我想多了,谢谢你



作者: yang1352546    时间: 2014-6-7 20:34
这个应该很好理解了 ,就近原则,
作者: 王琪    时间: 2014-6-7 20:35
yang1352546 发表于 2014-6-7 20:34
这个应该很好理解了 ,就近原则,

就近原则,好熟悉啊?
不过谢谢你
作者: yang1352546    时间: 2014-6-7 20:35
其实程序中很多东西,他都是就近原则,如果有有两个相同的话,那么肯定是就近的。就好像你上课写字,你自己手边放一只笔,你隔壁位置也放一只笔,你肯定会首先选择你自己手边的。
作者: 王琪    时间: 2014-6-7 20:40
本帖最后由 王琪 于 2014-6-7 20:49 编辑
yang1352546 发表于 2014-6-7 20:35
其实程序中很多东西,他都是就近原则,如果有有两个相同的话,那么肯定是就近的。就好像你上课写字,你自己 ...

没办法得到远的那边吗?就是同名的外部类
作者: yang1352546    时间: 2014-6-7 20:59
一般没有这样写的,一般情况下不会名字起一样的。具体怎么能找到那样的,我现在也不知道。
作者: 王琪    时间: 2014-6-7 21:15
yang1352546 发表于 2014-6-7 20:59
一般没有这样写的,一般情况下不会名字起一样的。具体怎么能找到那样的,我现在也不知道。 ...

谢谢你,我可能是乱想的
作者: 面向大众    时间: 2014-6-7 21:57
改个名儿就行了,没必要钻牛角尖吧。。。
话说楼主怎么把代码的背景皮肤 导入帖子的,谢~
作者: 王琪    时间: 2014-6-7 22:07
哦,在很早前,我进入论坛,那时乔帮主发表了一个帖子,让大家规范提问与回答的书写,
单击  "<>"这个图标在上边,把代码复制进去就可以了>.<
作者: blackstones1    时间: 2014-6-7 22:14
学习下 加油
作者: 王琪    时间: 2014-6-7 22:27
blackstones1 发表于 2014-6-7 22:14
学习下 加油

:)谢谢你也加油
作者: cain    时间: 2014-6-7 23:05
如果用static 将内部内静态化,那么内部类就只能访问外部类的静态成员变量,具有局限性
作者: cain    时间: 2014-6-7 23:35
内部类的作用:
1、隐藏你不想让别人知道的操作,也即封装性。
2、一个内部类对象可以访问创建它的外部类对象的内容,甚至包括私有变量!
作者: 王琪    时间: 2014-6-8 01:08
cain 发表于 2014-6-7 23:35
内部类的作用:
1、隐藏你不想让别人知道的操作,也即封装性。
2、一个内部类对象可以访问创建它的外部类对 ...

谢谢你,我再看看
作者: cain    时间: 2014-6-8 12:44
加油啊,路过
作者: 面向大众    时间: 2014-6-8 23:11
哦了,受教,谢楼主。
作者: 王琪    时间: 2014-6-9 23:20
面向大众 发表于 2014-6-8 23:11
哦了,受教,谢楼主。

没事的,嘻嘻




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2