Java - Metodos estáticos DUDA breve.

 
Vista:

Metodos estáticos DUDA breve.

Publicado por Agustín (4 intervenciones) el 12/07/2019 05:31:22
Una duda, partiendo de esta definicion:

“El metodo estatico solo puede acceder a datos estaticos”

¿Entonces porque el metodo main que es estático puede acceder a datos que no lo son? Como por ejemplo, otros metodos no-estaticos y/o atributos no-estaticos?
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Metodos estáticos DUDA breve.

Publicado por Agustin (4 intervenciones) el 12/07/2019 17:21:47
Pues de paginas de google y tratando de acceder a datos no-estáticos desde un método estático, me sale error, y eso me entrevera, de hecho lo dice ahi en la pagina ''El método estático no puede usar un miembro de datos no estáticos o llamar al método no estático directamente.'', por eso digo ¿porque el main si puede hacerlo? es porque utiliza un objeto de por medio?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Daniel
Val: 16
Ha aumentado 1 puesto en Java (en relación al último mes)
Gráfica de Java

Metodos estáticos DUDA breve.

Publicado por Daniel (6 intervenciones) el 12/07/2019 17:37:55
Hola Agustín,

Diría que es verdad, sólo puede acceder datos estáticos.

No entiendo cómo podría ser el código de "main" que estás viendo accediendo a datos no estáticos.. sería imposible
(datos: variables o métodos también). Puedes compartir ese ejemplo en el que un main supuestamente accede a non static?

Saludos!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Metodos estáticos DUDA breve.

Publicado por Agustin (4 intervenciones) el 12/07/2019 18:14:57
Hola, buenas :), te dejo un ejemplo de lo que me refiero aqui:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class Main {
	public static void main(String[] args) {
 
 
		ejemplo(); // Al ser estatico y estar en la misma clase, lo puedo llamar sin más
		ejemplo2(); // Sale error, no deja
	}
 
	public static void ejemplo() {
		System.out.println("Es un ejemplo");
	}
 
	public void ejemplo2() {
		System.out.println("No-estatico");
	}
 
}

Para acceder al ejemplo2() debo usar un objeto aun estando en la misma clase ya que no es estatico, entonces, un metodo estatico puede acceder a datos no-estaticos solamente a través de objetos?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Rodrigo
Val: 2.041
Plata
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Metodos estáticos DUDA breve.

Publicado por Rodrigo (623 intervenciones) el 12/07/2019 18:23:23
Los.miembros static existen 1 por clase. Los otros, 1 por objeto.

Los metodos static tambien son por clase, no tienen acceso a this o a los metodos no static.

main no puede acceder a miembros no static
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Metodos estáticos DUDA breve.

Publicado por Tom (1831 intervenciones) el 12/07/2019 18:21:10
¿ En "la página" ?
Vale, tu definición ya va pareciendo algo coherente, aunque sigo dudando que sea eso lo que pone en "la página".

Si le echas un ojo a la documentación de java https://docs.oracle.com/javase/tutorial/java/javaOO/classvars.html viene diciendo:

"Fields that have the static modifier in their declaration are called static fields or class variables. They are associated with the class, rather than with any object. Every instance of the class shares a class variable, which is in one fixed location in memory. Any object can change the value of a class variable, but class variables can also be manipulated without creating an instance of the class."

Que google translate te lo deja en:

"Los campos que tienen el modificador estático en su declaración se denominan campos estáticos o variables de clase. Están asociados con la clase, en lugar de con cualquier objeto. Cada instancia de la clase comparte una variable de clase, que se encuentra en una ubicación fija en la memoria. Cualquier objeto puede cambiar el valor de una variable de clase, pero las variables de clase también pueden manipularse sin crear una instancia de la clase."

Esta es la definición.

Un poco más abajo, se aclara:
"Not all combinations of instance and class variables and methods are allowed:

Instance methods can access instance variables and instance methods directly.
Instance methods can access class variables and class methods directly.
Class methods can access class variables and class methods directly.
Class methods cannot access instance variables or instance methods directly—they must use an object reference. Also, class methods cannot use the this keyword as there is no instance for this to refer to."

Que viene a ser:

"No todas las combinaciones de variables y métodos de instancia y clase están permitidas:

Los métodos de instancia pueden acceder a las variables de instancia y los métodos de instancia directamente.
Los métodos de instancia pueden acceder a las variables de clase y los métodos de clase directamente.
Los métodos de clase pueden acceder a las variables de clase y los métodos de clase directamente.
Los métodos de clase no pueden acceder directamente a las variables de instancia o los métodos de instancia; deben usar una referencia de objeto. Además, los métodos de clase no pueden usar esta palabra clave [[ no pueden usar el keyword this ]] ya que no hay una instancia a la que se pueda referir."

En resumen, un método estático puede acceder perfectamente a métodos o atributos no estaticos si lo hace a través de una referencia al objeto que los contiene.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 48
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Metodos estáticos DUDA breve.

Publicado por José (16 intervenciones) el 12/07/2019 18:53:06
Exacto aunque has omitido la definición de método estático.

The Java programming language supports static methods as well as static variables. Static methods, which have the static modifier in their declarations, should be invoked with the class name, without the need for creating an instance of the class, ...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Daniel
Val: 16
Ha aumentado 1 puesto en Java (en relación al último mes)
Gráfica de Java

Metodos estáticos DUDA breve.

Publicado por Daniel (6 intervenciones) el 12/07/2019 19:02:32
mm el tema es que tal cual como se define, 'lo importante' es que no puede acceder directamente.

Es como decir:
1) Desde una clase no se puede acceder a un campo private de otra clase.
2) Se puede acceder si tiene un getter y setter

=> Por ende, una clase sí puede acceder a un campo privado de otra.

Disculpa, así veo tu conclusión.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 48
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Metodos estáticos DUDA breve.

Publicado por José (16 intervenciones) el 12/07/2019 19:29:53
Yo creo que lo que Tom quiso remarcar es que lo que hay que entender de la definición es que un miembro (variable o método) de instancia _no_ "existe" si no existe la instancia; Y que un miembro de clase "existe" siempre que existe la clase.
Lo demás es, en mi opinión, obvio.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar