200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > java静态成员方法_关于java:在静态方法中访问类的静态成员

java静态成员方法_关于java:在静态方法中访问类的静态成员

时间:2024-02-23 17:09:32

相关推荐

java静态成员方法_关于java:在静态方法中访问类的静态成员

我在java中有这个代码我用netbeans写它

class sample

{

public static int x;

public int y;

sample()

{

x=0;

}

}

public class JavaApplication1 {

/**

* @param args the command line arguments

*/

sample cchild=new sample();

public static void main(String[] args) {

// TODO code application logic here

sample.x=0;

cchild.x=9; // here error

}

解释样本:

我对类示例进行组合,类示例包含静态变量x,但是当我尝试从静态方法中的实例cchild访问静态变量x时,编译器会出错,

所以在java中我无法访问静态方法中的对象,即使实例包含静态成员???

好的,但我可以通过cchild访问静态成员,它允许我通过类的名称访问静态成员,为什么我不能通过静态方法中的实例名称访问静态成员?@Johnny Mopp

如果方法不是静态的,我可以通过对象@Abhishek引用静态字段

@kernal我认为你是误解......问题不在于通过cchild访问x ...这可能......问题是在静态函数中访问cchild(非静态)

@Abhishek您的声明:"静态字段只能通过课堂使用。" 不是真的。

好的,我现在明白了,谢谢@Rakesh G R

您需要了解的第一件事是static成员属于class而不是实例,因此可以直接访问,而无需创建对类实例的引用。以下语句访问类sample中的static成员x,其中sample是类名,x是sample中的static成员:

sample.x=0;

另一方面,以下声明不起作用,因为

引用cchild不是static,因此是实例字段,而main是static方法。如果没有引用类的实例,则无法在static方法中访问实例字段。

cchild.x=9

要使上述语句起作用,您可以在JavaApplication1中将cchild声明为static,或者在main中创建JavaApplication1的实例,如下所示:

JavaApplication1 instanceOfJApp = new JavaApplication1();

hild.x=9;

这应该工作。您需要将变量cchild声明为JavaApplicaiton1类的静态成员,以便能够静态访问它。

class sample

{

public static int x;

public int y;

sample()

{

x=0;

}

}

public class JavaApplication1 {

// NEW BIT - by making this variable static we can now access it without needing an instance of the object.

static sample cchild=new sample();

public static void main(String[] args) {

sample.x=0;

cchild.x=9;

}

}

Java中的静态意味着它是类本身的属性,而不是该类类型的实例对象的属性。使用非静态属性时,您需要通过调用构造函数创建该类类型的对象,然后您可以使用该对象的引用来调用非静态方法并访问非静态变量。如果您没有该类型对象的副本,则只能调用静态方法并访问静态变量。

原来没有用,因为虽然你试图从静态上下文(在main方法中是静态的)中访问静态变量,但是你创建了用于在非静态上下文中访问静态变量(cchild)的变量。 (在课堂定义中)。通过不标记cchild变量'static',它将成为JavaApplication1类的实例变量,因此只有在通过调用构造函数创建JavaApplication1类的实例时才能使用,而不能在静态创建的main方法中使用。

我在这里建议您将变量更改为静态,以便您可以访问它。我认为这是您取得进步的最简单方法。但是,一般情况下,如果您需要进行这样的更改,可能会显示您需要更多地考虑哪些成员需要是静态的,哪些需要在实例对象上,因此只需将变量设置为静态永远是最好的事情。

在此代码示例中,您可能会采取不同的其他一些操作。首先,我建议您使用Java命名约定,以大写字母(在本例中为Sample而不是示例)启动类的名称,否则它们看起来不像Java人员的类名。

请在答案中添加至少一个简短的解释。 仅限代码的答案仅对完全理解代码的人有帮助 - 而且观众不会研究这个问题。

好的,谢谢你的回答

您可以采取以下措施来解决问题:

使cchild静态

将cchild的声明移动到main方法

非常感谢verey

@kernal,欢迎你! 很高兴我能帮上忙!

这是因为调用

static void main(String[] args){

}

不生成JavaApplication1实例。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。