En Java, el concepto de importación estática se introduce en la versión 1.5. Con la ayuda de la importación estática, podemos acceder a los miembros estáticos de una clase directamente sin nombre de clase ni ningún objeto. Por ejemplo: siempre usamos el método sqrt() de la clase Math usando la clase Math, es decir, Math.sqrt() , pero al usar la importación estática podemos acceder al método sqrt() directamente.
Según SUN microSystem, mejorará la legibilidad del código y mejorará la codificación. Pero según los expertos en programación, generará confusión y no es bueno para la programación. Si no hay un requisito específico, no deberíamos optar por la importación estática.
JAVA
// Java Program to illustrate // calling of predefined methods // without static import class Geeks { public static void main(String[] args) { System.out.println(Math.sqrt(4)); System.out.println(Math.pow(2, 2)); System.out.println(Math.abs(6.3)); } }
Producción:
2.0 4.0 6.3
JAVA
// Java Program to illustrate // calling of predefined methods // with static import import static java.lang.Math.*; class Test2 { public static void main(String[] args) { System.out.println(sqrt(4)); System.out.println(pow(2, 2)); System.out.println(abs(6.3)); } }
Producción:
2.0 4.0 6.3
JAVA
// Java to illustrate calling of static member of // System class without Class name import static java.lang.Math.*; import static java.lang.System.*; class Geeks { public static void main(String[] args) { // We are calling static member of System class // directly without System class name out.println(sqrt(4)); out.println(pow(2, 2)); out.println(abs(6.3)); } }
Producción:
2.0 4.0 6.3
NOTA: System es una clase presente en el paquete java.lang y out es una variable estática presente en la clase System. Con la ayuda de la importación estática, lo llamamos sin nombre de clase.
Ambigüedad en la importación estática:
si se importan dos miembros estáticos con el mismo nombre de varias clases diferentes, el compilador arrojará un error, ya que no podrá determinar qué miembro usar en ausencia de calificación de nombre de clase.
JAVA
// Java program to illustrate // ambiguity in case of // static import import static java.lang.Integer.*; import static java.lang.Byte.*; class Geeks { public static void main(String[] args) { out.println(MAX_VALUE); } }
Producción:
Error:Reference to MAX_VALUE is ambigious
Explicación: en el programa anterior, estamos tratando de acceder a la variable MAX_VALUE, pero cada tipo de datos primitivo contiene la variable MAX_VALUE que está predeclarada en la clase Wrapper. Aquí estamos importando la clase Integer y Byte simultáneamente e intentando acceder a la variable estática MAX_VALUE, pero aquí el compilador se confundirá al ver dos instrucciones de importación porque tanto la clase Integer como la Byte contienen una variable estática MAX_VALUE. Por lo tanto, aquí el compilador arroja un error que dice que la referencia a MAX_VALUE es ambigua .
NOTA :Dos paquetes contienen dos clases/interfaces con el mismo nombre es muy raro. Por lo tanto, es muy raro que obtengamos alguna ambigüedad al importar de manera normal, es decir, importación normal. Pero es posible que dos clases contengan la misma variable, por lo tanto, es muy común en la importación estática obtener un error que dice que la referencia es ambigua. Es por eso que no se recomienda su uso si no existe tal requisito.
Diferencia entre importación e importación estática:
- Con la ayuda de la importación, podemos acceder a clases e interfaces que están presentes en cualquier paquete. Pero al usar la importación estática, podemos acceder a todos los miembros estáticos (variables y métodos) de una clase directamente sin llamar explícitamente al nombre de la clase.
- La principal diferencia es la legibilidad, ClassName.dataMember (System.out) es menos legible en comparación con dataMember(out), la importación estática puede hacer que su programa sea más legible
Publicación traducida automáticamente
Artículo escrito por Bishal Kumar Dubey y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA