2012-03-12 18 views
5

Sé que esto es simple, pero realmente no entiendo la pregunta ...básico de Java tarea

asumir la firma del método xMethod es el siguiente. explicar dos maneras diferentes para invocar xMethod:

public static void xMethod(double[] a) 

pensé para invocar un método que acaba de hacer:

xMethod(myarray); 

¿qué podría significar haciendo dos maneras diferentes? Quizás estoy investigando demasiado la pregunta.

+1

'XClass.class.getMethod ("xMethod", a.getClass()) invocar (nulo, a);. '? En una nota más seria: 'XClass.xMethod (a);' 'xObject.xMethod (a);' –

+0

Intenta pensar en lugares para llamar al método desde –

+0

No estoy seguro si esa es la pregunta, sino porque es estática, puede llamarlo en una instancia ('myClassInstance.xMethod()') o en la misma clase ('MyClass.xMethod()') ... – assylias

Respuesta

7

Si se trata de un primer tiempo de clase Java, mi conjetura es que él está buscando estos 2 casos:

//the one you have, using a precreated array 
double[] myArray = {1.1, 2.2, 3.3} 
xMethod(myarray); 

//and putting it all together 
xMethod(new double[]{1.1, 2.2, 3.3}); 

Básicamente ilustrando puede hacer una matriz para pasar, o simplemente crear uno en la llamada.

Sólo una conjetura, aunque

+0

Estoy pensando lo mismo ... las otras respuestas parecen un poco complicadas por lo que hemos aprendido. Gracias –

+0

la sintaxis es xMethod (nuevo doble [] {1.1, 2.2, 3.3}); – Hurda

+0

¡Gracias por eso, nunca puedo recordar la maldita sintaxis para arreglos simples! –

3

Puede invocarlo llamándolo en una clase, o mediante una instancia de esa clase.

Foo.xMethod(a); 

o:

Foo foo = new Foo(); 
foo.xMethod(a); 

El primer enfoque es preferido, pero el segundo se compilar y ejecutar. Pero tenga en cuenta que a menudo se considera un defecto de diseño en el lenguaje que el segundo enfoque está permitido.

+1

no es correcto llamarlo a través de una instancia de clase aunque no rompa nada. – Amareswar

+0

Creo que es lo mismo cuando se compila. Sin embargo, tendría que verificarlo dos veces. @Amareswar No es un error de sintaxis, es solo una mala práctica. –

+0

@Amareswar: Surpringly es realmente válido. Es una mala práctica usarlo realmente. Pero vale la pena saberlo en caso de que te topes con el código de otras personas que lo usa, para que no te confundas por completo. –

0

Sólo hay una forma válida para hacer esto:

YourClass.xMethod(myDoubleArray); 

embargo, se puede escribir de Java no totalmente correcta en:

YourClass instance = new YourClass(); 
instance.xMethod(myDoubleArray); 

Esto funciona, pero se considera como incorrecto. El compilador de Java incluso se quejará de ello. Porque no es necesario invocar un método estático creando una instancia de la clase. Estático significa que el método es independiente de la instancia. Invocarlo a través de una instancia es inútil y confuso.

Más adelante, verás que hay una segunda forma correcta de hacerlo, es decir, "reflejo". Pero ese es un tema avanzado, así que supongo que ya no deberías saberlo.

+0

¿Por qué es esto incorrecto? – Jlange

+1

No es realmente incorrecto, pero es una mala idea porque introduce una dependencia falsa: parece que 'instancia' es necesaria y significa algo, pero en realidad no es así y no lo es. Ver http://stackoverflow.com/questions/7884004/is-calling-static-methods-via-an-object-bad-form-why –

10

por diversión, mostrar su profesor de esto:

XClass.class.getMethod("xMethod", a.getClass()).invoke(null, a); 

Luego les cuento las dos respuestas

XClass.xMethod(a); 
//and 
xObject.xMethod(a); //this is bad practice 
+1

Esto creo que es la respuesta más válida del grupo. –

+0

@HovercraftFullOfEels Gracias: D –

2

métodos estáticos no están vinculados a la construcción de la clase. El método anterior se puede llamar ya sea mediante la construcción de la clase o sólo mediante el uso de los nombres:

Classname myclass = new Classname(); 
myclass.xMethod(myarray); 

o usted podría hacer:

Classname.xMethod(myarray); 

como se ve, que no tiene que construir la clase para usar el método. Por otro lado, el método estático no puede acceder a los miembros no estáticos de la clase. Supongo que eso es lo que significa la pregunta de 2 maneras diferentes ...