繁体   English   中英

在Java中创建对象实例时出错

[英]Error while creating object instances in Java

码:

 public class Dog{
        static int age;
        static String name;
        static String breed;
        public Dog(String name,int age,String breed){
            this.name=name;
            this.age=age;
            this.breed=breed;
        }
        public Dog(String name,int age){
            this(name,age,"greed");
        }
        public static void main(String args[]){
            Dog high=new Dog("luffy",19,"pomerian");
            Dog low=new Dog("gold",32,"german shepherd");
            System.out.println(low.name+" "+low.age+" "+low.breed);
            System.out.println(high.name+" "+high.age+" "+high.breed);
        }       
 }

输出: gold 32 german shepherd gold 32 german shepherd

虽然我正在创建两个对象实例,但仅打印其中一个的字段。错误在哪里?

所有static字段都是共享的( static字段是每个类的),但是您需要实例字段(每个实例)。 更改

static int age;
static String name;
static String breed;

private int age;
private String name;
private String breed;

而且您可能应该具有accessor( get ters)方法-如果添加toString()则可以简化打印。 喜欢,

@Override
public String toString() {
    return name + " " + age + " " + breed; 
}

然后,你可以print

System.out.println(low);
System.out.println(high);

您已经使用了静态访问修饰符,并且静态变量为每个类对象共享内存。如果您不想这样做,则只需从age,name,

public class Dog{
        int age;
        String name;
        String breed;
        public Dog(String name,int age,String breed){
            this.name=name;
            this.age=age;
            this.breed=breed;
        }
        public Dog(String name,int age){
            this(name,age,"greed");
        }
        public static void main(String args[]){
            Dog high=new Dog("luffy",19,"pomerian");
            Dog low=new Dog("gold",32,"german shepherd");
            System.out.println(low.name+" "+low.age+" "+low.breed);
            System.out.println(high.name+" "+high.age+" "+high.breed);
        }       
 }

在您的代码中将Static更改为private:

范例:

 public class Dog{
            private int age;
            private String name;
            private String breed;
            public Dog(String name,int age,String breed){
                this.name=name;
                this.age=age;
                this.breed=breed;
            }
            public Dog(String name,int age){
                this(name,age,"greed");
            }


            }
            public static void main(String args[]){
                Dog high=new Dog("luffy",19,"pomerian");
                Dog low=new Dog("gold",32,"german shepherd");
                System.out.println(low.name+" "+low.age+" "+low.breed);
                System.out.println(high.name+" "+high.age+" "+high.breed);
            }       
     }

输出:

luffy 19 pomerian
gold 32 german shepherd

并且 :

 public class Dog{
        private int age;
        private String name;
        private String breed;
        public Dog(String name,int age,String breed){
            this.name=name;
            this.age=age;
            this.breed=breed;
        }
        public Dog(String name,int age){
            this(name,age,"greed");
        }

        void toStrig (){
         System.out.println(name+" "+ age+" "+breed);
        }
        public static void main(String args[]){
            Dog high=new Dog("luffy",19,"pomerian");
            Dog low=new Dog("gold",32,"german shepherd");
            high.toStrig();
            low.toStrig();
        }       
 }

输出:

luffy 19 pomerian
gold 32 german shepherd

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM