从类方法中访问类属性 - Java

时间:2013-07-02 13:05:23

标签: java class scope

我有以下代码:

public class UserRepository 
{       
    private MyDataSource myDataSource = new MyDataSource();

    public static User CreateUser( int id, String firstName, String lastName )
    {
         myDataSource.propertyOfThis...
         // myDataSource is not accessible and yet i have declared it as a property of UserRespository?
    }
...

我在这里缺少什么?

6 个答案:

答案 0 :(得分:4)

myDataSource不是static

private MyDataSource myDataSource = new MyDataSource();

CreateUserstatic

public static User CreateUser( int id, String firstName, String lastName )

因此请myDataSource static或删除CreateUser static修饰符。

哦,或new UserRepository()

答案 1 :(得分:2)

您需要将myDataSource设为静态。可以在不创建实例的情况下调用静态方法,因为myDataSource是实例变量,因此无法访问它。

答案 2 :(得分:0)

您的方法 CreateUser 是静态的,而 MyDataSource 是一个实例字段

答案 3 :(得分:0)

问题是您的字段不是static,而是在static方法中使用它。

问题是static方法不是在类(对象)的实例上执行,而是在类本身上执行。字段仅存在于对象中。因此,该方法不需要是静态的,或者字段应该是静态的。取决于您的用例。

答案 4 :(得分:0)

您的方法是static。如前所述,您无法从静态方法中访问非静态方法或变量。

这样做的原因是在没有实例化类的情况下可以访问静态成员和方法。但是,那些非静态(又称“实例”)变量属于该类的特定INSTANCE。因此,您必须具有要引用的实例化对象才能获取变量。

如果您使用的是静态代码块,则出于同样的原因,您无法使用关键字thisthis指的是该类的特定实例化对象。

答案 5 :(得分:0)

* 问题是你的字段不是静态的,但你在静态方法中使用它。 *问题是静态方法不在类的实例上执行(对象),但在课堂上。