¿Hay algo como static class
en Java?
¿Cuál es el significado de tal clase? ¿Todos los métodos de la clase estática también deben serlo static
?
¿Se requiere al revés, que si una clase contiene todos los métodos estáticos, la clase también será estática?
¿Para qué sirven las clases estáticas?
java
static-classes
Kraken
fuente
fuente
Respuestas:
Java tiene clases anidadas estáticas , pero parece que está buscando una clase estática de nivel superior. Java no tiene forma de hacer que una clase de nivel superior sea estática, pero puede simular una clase estática como esta:
final
: evita la extensión de la clase ya que extender una clase estática no tiene sentidoprivate
: evita la creación de instancias por código de cliente, ya que no tiene sentido crear una instancia de una clase estáticastatic
: dado que la clase no se puede instanciar, no se pueden llamar métodos de instancia ni acceder a los campos de instanciaEjemplo simple por sugerencias de arriba:
¿De qué sirven las clases estáticas? Un buen uso de una clase estática es definir clases únicas, de utilidad y / o biblioteca donde la instanciación no tendría sentido. Un gran ejemplo es la clase Math que contiene algunas constantes matemáticas como PI y E y simplemente proporciona cálculos matemáticos. Requerir instanciación en tal caso sería innecesario y confuso. Ver la
Math
clase y el código fuente . Tenga en cuenta que esfinal
y todos sus miembros sonstatic
. Si Java permitiera declarar las clases de nivel superior,static
la clase de matemáticas sería estática.fuente
Foo
con solostatic
métodos no es lo mismo questatic class Foo
Bueno, Java tiene "clases anidadas estáticas", pero no son lo mismo que las clases estáticas de C #, si es de allí de donde vienes. Una clase anidada estática es solo una que no tiene implícitamente una referencia a una instancia de la clase externa.
Las clases anidadas estáticas pueden tener métodos de instancia y métodos estáticos.
No existe una clase estática de nivel superior en Java.
fuente
static
al declararlos. Son implícitamente estáticos en el sentido de que no necesita una referencia a nada más para construir uno. Personalmente, encuentro la terminología estática / no estática un poco extraña para las clases anidadas de todos modos ... Creo que sería más simple hablar sobre cuál es el comportamiento.Hay una clase anidada estática , esta clase [anidada estática] no necesita una instancia de la clase adjunta para poder instanciarse.
Estas clases [las anidadas estáticas] solo pueden acceder a los miembros estáticos de la clase que encierra [ya que no tiene ninguna referencia a las instancias de la clase que encierra ...]
muestra de código:
fuente
Sí, hay una clase anidada estática en java. Cuando declara una clase anidada estática, se convierte automáticamente en una clase independiente que se puede instanciar sin tener que instanciar la clase externa a la que pertenece.
Ejemplo:
Como
class B
se declara estático, puede crear instancias explícitamente como:Tenga en cuenta que si
class B
no se declara estático para que sea independiente, una llamada de objeto de instancia se vería así:fuente
B b = new B();
si intentara crear una instancia de laA
misma clase .¿Qué sucede cuando un miembro dentro de un
class
se declara comostatic
...? Se puede acceder a los miembros sin crear instancias declass
. Por lo tanto, hacer una clase externa (clase de nivel superior)static
no tiene sentido. Por lo tanto, no está permitido.Pero puede establecer clases internas como estáticas (ya que es un miembro de la clase de nivel superior). Entonces se puede acceder a esa clase sin instanciar la clase de nivel superior. Considere el siguiente ejemplo.
Ahora, dentro de una clase diferente
C
,B
se puede acceder a la clase sin hacer una instancia de claseA
.static
Las clases también pueden tenernon-static
miembros. Solo la clase se vuelve estática.Pero si la
static
palabra clave se elimina de la claseB
, no se puede acceder directamente sin hacer una instancia deA
.Pero no podemos tener
static
miembros dentro de unanon-static
clase interna.fuente
static
solo tiene un significado en java. Si algo estástatic
en una clase, eso significa que se puede acceder a esa cosa sin crear una instancia de esa clase. No dice nada sobre la creación de instancias o no ..Al ver que este es el mejor resultado en Google para "Java de clase estática" y la mejor respuesta no está aquí, pensé que lo agregaría. Estoy interpretando la pregunta de OP con respecto a las clases estáticas en C #, que se conocen como singletons en el mundo de Java. Para aquellos que no lo saben, en C # la palabra clave "estática" se puede aplicar a una declaración de clase, lo que significa que la clase resultante nunca se puede instanciar.
Extracto de "Effective Java - Second Edition" de Joshua Bloch (ampliamente considerado como una de las mejores guías de estilo Java disponibles):
Bloch, Joshua (2008-05-08). Java efectivo (Serie Java) (p. 18). Educación Pearson.
Creo que la implementación y la justificación se explican por sí mismas.
fuente
¿Puede una clase ser estática en Java?
La respuesta es SÍ , podemos tener una clase estática en java. En java, tenemos variables de instancia estáticas , así como métodos estáticos y también bloques estáticos . Las clases también pueden hacerse estáticas en Java.
En java, no podemos hacer que la clase de nivel superior (exterior) sea estática. Solo las clases anidadas pueden ser estáticas.
clase anidada estática vs clase anidada no estática
1) La clase estática anidada no necesita una referencia de la clase externa, pero la clase anidada no estática o la clase interna requiere una referencia de clase externa.
2) La clase interna (o clase anidada no estática) puede acceder a los miembros estáticos y no estáticos de la clase externa. Una clase estática no puede acceder a miembros no estáticos de la clase Outer. Solo puede acceder a miembros estáticos de la clase Outer.
ver aquí: https://docs.oracle.com/javase/tutorial/java/javaOO/nested.html
fuente
Las clases externas no pueden ser estáticas, pero las clases anidadas / internas pueden serlo. Básicamente, eso te ayuda a usar la clase anidada / interna sin crear una instancia de la clase externa.
fuente
En términos simples, Java admite la declaración de que una clase sea estática solo para las clases internas, pero no para las clases de nivel superior.
Clases de nivel superior: un proyecto de Java puede contener más de una clase de nivel superior en cada archivo fuente de Java, una de las clases que lleva el nombre del archivo. Solo hay tres opciones o palabras clave permitidas frente a las clases de nivel superior, public, abstract y final .
Clases internas: las clases que están dentro de una clase de nivel superior se denominan clases internas, que es básicamente el concepto de clases anidadas. Las clases internas pueden ser estáticas . La idea de hacer que las clases internas sean estáticas es aprovechar la instancia de los objetos de las clases internas sin instanciar el objeto de la clase de nivel superior. Esto es exactamente lo mismo que los métodos estáticos y las variables funcionan dentro de una clase de nivel superior.
Por lo tanto, Java admite clases estáticas en el nivel de clase interna (en clases anidadas)
Y Java no admite clases estáticas en las clases de nivel superior.
Espero que esto brinde una solución más simple a la pregunta para la comprensión básica de las clases estáticas en Java.
fuente
Java tiene métodos estáticos asociados con las clases (por ejemplo, java.lang.Math solo tiene métodos estáticos), pero la clase en sí no es estática.
fuente
No puede usar la palabra clave estática con una clase a menos que sea una clase interna. Una clase interna estática es una clase anidada que es un miembro estático de la clase externa. Se puede acceder sin crear instancias de la clase externa, utilizando otros miembros estáticos. Al igual que los miembros estáticos, una clase anidada estática no tiene acceso a las variables de instancia y los métodos de la clase externa.
fuente
static
palabra clave con una clase a menos que sea una clase anidada . 'Estático interno' es una contradicción en los términos .Un método estático significa que se puede acceder sin crear un objeto de la clase, a diferencia de public:
fuente
Todas buenas respuestas, pero no vi una referencia a java.util.Collections que usa toneladas de clase interna estática para sus métodos de factor estático. Entonces agregando lo mismo.
Agregar un ejemplo de java.util.Collections que tiene múltiples clases internas estáticas. Las clases internas son útiles para agrupar el código al que se debe acceder a través de la clase externa.
Aquí está el método del factor estático en la clase java.util.Collections
fuente