【问题标题】:java: non-static variable this cannot be referenced from a static context [duplicate]java:非静态变量无法从静态上下文中引用[重复]
【发布时间】:2018-01-04 22:33:07
【问题描述】:

我有错误 java: non-static variable this cannot be referenced from a static context whencompile the code in line Man m1 = new Man("a1", "b1", 11);如何解决?

public class Solution
{
public static void main(String[] args)
{
    //create two object of every class here
    Man m1 = new Man("a1", "b1", 11);
    Man m2 = new Man("a2", "b2", 12);
    Woman w1 = new Woman("a11", "b11", 13);
    Woman w2 = new Woman("a22", "b22", 14);

    //output them to screen here
    System.out.println(m1.name + " " + m1.age + " " + m1.address);
    System.out.println(m2.name + " " + m2.age + " " + m2.address);
    System.out.println(w1.name + " " + w1.age + " " + w1.address);
    System.out.println(w2.name + " " + w2.age + " " + w2.address);
}

//add your classes here
public class Man
{
    private String name;
    private String address;
    private int age;

    public Man(String name, String address, int age)
    {
        this.name = name;
        this.address = address;
        this.age = age;
    }
}
}

}

【问题讨论】:

  • 您需要帮助以了解错误的含义,还是仅仅帮助解决问题?静态上下文意味着您不在类的“实例”中(因此它没有任何成员数据/函数等) - 因此当您访问非静态变量时(仅存在于类的实例中) 它说你不能,因为你没有实例。
  • 你的 Man 类不是静态的。这意味着它必须具有对外部类的引用。main 是静态的并且没有隐式的外部类。简单的解决方案是将您的 Man 类设为静态。

标签: java non-static


【解决方案1】:

一种方法

Man 类声明为静态类,您将能够从main() 中访问它,它也是静态的(不绑定到类Solution 的任何实例):

public static class Man

另一种方法

我们也可以让 Man 类保持非静态并创建一个实例级工厂方法,该方法将创建 Man 的实例:

public class Solution {

    public static void main(String[] args) {
        //create two object of every class here
        Solution solution = new Solution();
        Man m1 = solution.createMan("a1", "b1", 11);
        Man m2 = solution.createMan( "a2", "b2", 12);

        //output them to screen here
        System.out.println(m1.name + " " + m1.age + " " + m1.address);
        System.out.println(m2.name + " " + m2.age + " " + m2.address);    
    }

    Man createMan(String name, String address, int age) {
        return new Man(name, address, age);
    }

    //add your classes here
    public class Man {
        private String name;
        private String address;
        private int age;

        private Man(String name, String address, int age) {
            this.name = name;
            this.address = address;
            this.age = age;
        }
    }
}

【讨论】:

    【解决方案2】:
    public class Main {
    
        public static void main(String[] args) {
            // write your code here
            VerySimple alice = new VerySimple();
        }
    
        class VerySimple {
            private int age;
            private String name;
            //constructor
    
            VerySimple(int age, String name) {
                this.age = age;
                this.name = name;
            }
    
            //getter method
            int getAge() {
                return age;
            }
    
            //setter method
            public void setAge(int a) {
                age = a;
            }
    
            //getter
            String getName() {
                return name;
            }
        }
    }
    

    【讨论】:

    • 不要浪费时间回答那些应该在几年前就被关闭的初学者问题。此外,仅代码的答案并没有太大帮助。您应该首先解释您的代码旨在说明的点。解释应该是真正的答案;代码只是说明。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-29
    • 2014-01-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多