简体   繁体   English

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

[英]Error while creating object instances in Java

Code: 码:

 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);
        }       
 }

Output: gold 32 german shepherd gold 32 german shepherd 输出: gold 32 german shepherd gold 32 german shepherd

Though i'm creating two object instances, only the fields of one of them are printed.Where does the bug lie? 虽然我正在创建两个对象实例,但仅打印其中一个的字段。错误在哪里?

All of the static fields are shared ( static fields are per class), but you expected instance fields (per instance). 所有static字段都是共享的( static字段是每个类的),但是您需要实例字段(每个实例)。 Change 更改

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

to

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

And you should probably have accessor ( get ters) methods - and your printing would be simplified if you added a toString() . 而且您可能应该具有accessor( get ters)方法-如果添加toString()则可以简化打印。 Like, 喜欢,

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

Then you can print with just 然后,你可以print

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

You have used static access modifier and static variable shares memory for every class object.If you do not want then just remove static from age,name , breed 您已经使用了静态访问修饰符,并且静态变量为每个类对象共享内存。如果您不想这样做,则只需从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);
        }       
 }

In your code Change Static to private : 在您的代码中将Static更改为private:

Exmple : 范例:

 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);
            }       
     }

Output : 输出:

luffy 19 pomerian
gold 32 german shepherd

And Also : 并且 :

 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();
        }       
 }

Output : 输出:

luffy 19 pomerian
gold 32 german shepherd

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

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