A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Tesla时光 中级黑马   /  2012-7-22 16:25  /  1302 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 翁发达 于 2012-7-22 16:38 编辑

下面我在创建第二个对象p1的时候,我并没有给其赋值,但为什么打印出的结果却是2,而不是默认的0?按理来讲,创建一个新对象和之前创建的对象没有关系才是,麻烦看哪里出了问题?
class Test
{
        static int age;
        public void getAge(int age)
        {
                this.age=age;
                System.out.println("age="+age);
        }
        public int setAge()
        {
                return age;
        }
}
public class FaDa
{
        public static void main(String[] args)
        {
                Test p =new Test();
                Test p1 =new Test();
                p.getAge(2);
                System.out.println(p1.setAge());
        }
}

3 个回复

倒序浏览
你把age设置成静态的了,所以你在给p赋值的时候,p1的值也随着p的值更改了,把static去掉就好了
回复 使用道具 举报
static int age;
这里为什么要加静态?
回复 使用道具 举报
class Test
{
         static int age;
         public void getAge(int age)
         {
                 this.age=age;
                 System.out.println("age="+age);
         }
         public int setAge()
         {
                 return age;
         }
}
public class FaDa
{
         public static void main(String[] args)
         {
                 Test p =new Test();
                 Test p1 =new Test();
                 p.getAge(2);
                 System.out.println(p1.setAge());
         }
}
//很好解释,因为 你将age定义为静态变量,而且也是Test的成员变量,
//成员变量都随着创建对象而创建,会在堆内存中初始化,但是age是静态变量
//存储在静态方法区中,不用对象调用只用类名就可以调用,和创建对象没关系了
//就是说它的权限大了,所以age值是2
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马