Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中创建对象实例时出错_Java - Fatal编程技术网

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

在Java中创建对象实例时出错,java,Java,代码: 输出: 黄金32德国牧羊犬 黄金32德国牧羊犬 虽然我正在创建两个对象实例,但只打印其中一个的字段。错误在哪里?您已经使用了静态访问修饰符,并且静态变量为每个类对象共享内存。如果不想,只需从年龄、名称和品种中删除静态 public class Dog{ static int age; static String name; static String breed; public Dog(String name,int ag

代码:

输出: 黄金32德国牧羊犬 黄金32德国牧羊犬


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

您已经使用了静态访问修饰符,并且静态变量为每个类对象共享内存。如果不想,只需从年龄、名称和品种中删除静态

 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);
        }       
 }
所有的静态字段都是共享的,每个类都有静态字段,但您希望每个实例都有实例字段。改变

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

而且您可能应该有访问器getters方法——如果您添加一个toString,您的打印将会简化。像

然后你就可以用它来打印了

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

在代码中将静态更改为私有:

例如:

输出:

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

不要使用静态字段如果希望类的每个实例都有不同的值,那么就不要使用静态字段。但是,如果您希望类的每个实例都具有相同的值,那么请使用static.Ah!我明白了。所以静态是属于类的东西,一旦做了更改,就会反映在整个类中。谢谢
 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