LINUX.ORG.RU

java


0

0

Начал изучать java, почему не static методы и поля нельзя вызвать 
из main? Вот пример кода:
public class lab1
{
	/**type boolean */
	boolean boolean_type;
	/**type byte 8 bit*/
	byte byte_type = 55;
	/**type short 16 bit*/
	static short short_type = 1000;
	/**type int 32 bit*/
	static int int_type;
	/**type long 64 bit*/
	static long long_type;

	static
	{
		int_type = 32000;
		long_type = 1000000;
	}

	//**method main*/
	public static void main ( String args[])
	{
		System.out.println ( "123");
		System.out.println ( byte_type);
		System.out.println ( short_type);
		System.out.println ( int_type);
		System.out.println ( long_type);
		simple_print ( byte_type);
	}

	//**method simple_print*/
	public void simple_print ( byte byte_type_in)
	{
		System.out.println ( byte_type_in );
	}

}


javac lab1.java 
lab1.java:26: non-static variable byte_type cannot be referenced from a static context
                System.out.println ( byte_type);
                                     ^
1 error
anonymous

На то они и static. Ведь main и сам static :) Учите java дальше -- в двух словах непросто объяснить.

PS. Потом смеятся над собой будете. :)

anonymous
()
Ответ на: комментарий от anonymous

А можно примет работающего не static метода.

anonymous
()
Ответ на: комментарий от anonymous

Вот так работает:
public class lab1
{
	/**type boolean */
	boolean boolean_type = true;
	/**type byte 8 bit*/
	byte byte_type = 55;
	/**type short 16 bit*/
	short short_type = 1000;
	/**type int 32 bit*/
	int int_type = 32000;
	/**type long 64 bit*/
	static long long_type = 1000000;

	//**method main*/
	public static void main ( String args[])
	{
		lab1 object = new lab1();
		object.static_method ();
		System.out.println ( long_type);
		object.static_method ();
		System.out.println ( long_type);
		object.simple_print ( );

	}

	//**method simple_print*/
	public void simple_print ( )
	{
		System.out.println ( byte_type);
	}

	//**static method*/
	public void static_method ( )
	{
		++long_type;
	}

}

Но, если simple_print передавать, например,
byte_type то получаю такое сообщение об ошибке:
$ javac lab1.java 
lab1.java:24: non-static variable byte_type cannot be referenced from a static context
                object.simple_print ( byte_type);
                                      ^
1 error

anonymous
()

Во время выполнения main у тебя нет ещё instance этого класса.

Ты можешь сделать так:

... class Main ... {

  private void tratata() {...}

  public static void main(String[] args) {
    Main me = new Main();
    me.tratata();
  }
}

anonymous
()
Ответ на: комментарий от anonymous

Все, разобрался вызывал так object.simple_print ( byte_type); а надо object.simple_print ( object.byte_type);

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.