Это должно сработать. Вам нужно объявить переменную 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;
}
}
Static в Java означает, что это свойство класса само по себе и не является свойством объекта экземпляра типа этого класса. При использовании нестатических свойств вам необходимо создать объект типа этого класса, вызвав конструктор, а затем вы можете использовать ссылку этого объекта для вызова нестатических методов и доступа к нестационарным переменным. Если у вас нет копии объекта такого типа, вы можете вызвать только статические методы и получить доступ к статическим переменным.
Оригинал не работает, потому что, хотя вы пытались получить доступ к статической переменной из статического контекста (внутри основного статического метода), вы создавали переменную, которую вы использовали для доступа к статической переменной (cchild) в нестатический контекст (в определении класса). Не маркируя переменную cchild «static», она становится переменной экземпляра класса JavaApplication1 и поэтому может использоваться только в том случае, если вы создаете экземпляр класса JavaApplication1, вызывая конструктор, а не в основном методе, который создается статически.
Я предложил здесь изменить переменную, чтобы быть статичной, чтобы вы могли получить к ней доступ. Я думаю, что это самый простой способ добиться прогресса. Однако, в общем, если вы застряли, чтобы сделать такое изменение, это, вероятно, показывает, что вам нужно больше думать о том, какие члены должны быть статичными и которые должны быть на объекте экземпляра, и поэтому просто сделать переменную static не может всегда быть лучшим занятием.
Есть еще несколько вещей, которые вы можете сделать по-другому в этом примере кода. Во-первых, я бы предположил, что вы используете соглашение об именах Java, чтобы начинать имя ваших классов с большой буквы (вместо этого вместо примера выборки), иначе они не будут выглядеть как имена классов для людей Java.
ok, но я могу получить доступ cchild к статическому члену, он позволяет мне получить доступ к статическому члену по имени класса, почему я не могу получить доступ к статическому члену по имени экземпляра в статическом методе? @Johnny Mo pp – kernal
Если метод не статический, я могу ссылаться на статическое поле через объект @Abhishek – kernal
@kernal Я думаю, что вы недопонимаете ... проблема заключается не в доступе к x через cchild ... это возможно ... проблема в доступе к cchild (нестатический) внутри статической функции –