2010-11-09 7 views
2

J'utilise un package qui a un appel de méthode non statique. Il ne me laissera pas appeler cette méthode à partir d'un contexte statique. Je ne peux pas changer la méthode non statique, comment puis-je appeler cette méthode?Contexte statique Java

+1

Combien de Java avez-vous appris? Il semble que vous auriez avantage à lire quelques tutoriels Java de base. – jjnguy

+0

http://download.oracle.com/javase/tutorial/ – jjnguy

Répondre

5

Créer un objet hors de cette classe et appeler la méthode sur l'objet?

import com.acme.myclass; 

... 

MyClass obj = new MyClass(); 
obj.nonStaticMethod(); 

Si le package que vous utilisez a toute la documentation, assurez-vous de regarder à travers pour voir comment vous êtes censé utiliser cette classe et sa méthode non statique. Vous voudrez peut-être aussi en savoir plus sur la statique par rapport à la non-statique dans la programmation orientée objet en général, pour avoir une meilleure idée des différences.

+0

Bien sûr, si tout ce dont vous avez besoin est d'appeler cette méthode et de l'oublier, 'new MyClass(). NonStaticMethod();' comme le suggère jjnguy. – BoltClock

+2

m'a battu par une seconde. – jjnguy

5

Pour appeler une méthode non statique, vous devez appeler la méthode sur une instance d'un objet.

Compte tenu de la classe suivante:

public class MyClass { 
    public void nonStaticMethod(); 
} 

Vous appelez la méthode comme ceci:

new MyClass().nonStaticMethod(); 

Ou, si vous avez besoin d'appeler cette méthode plus d'une fois, vous pouvez l'enregistrer dans un objet.

MyClass instance = new MyClass(); 
instance.nonStaticMethod(); 
... 
instance.nonStaticMethod(); 
0

Les méthodes statiques n'ont pas besoin d'être instanciées, contrairement aux méthodes d'instance, dans une classe d'instance.

Pour accéder à une méthode d'instance, vous devez d'abord avoir une instance de sa classe à l'aide du mot-clé new. Vous pouvez ensuite accéder aux méthodes d'instance de cette classe.

1

Cette méthode appartient à une classe.

Alors, ce que vous devez faire est de créer une instance de cette classe (très probablement avec le nouvel opérateur), puis l'utiliser:

package a; 

class A { 
    public void theMethod(){ 
    } 
} 

..... 
package b; 
import a.A; 
class Main { 
    public static void main(String [] args) { 
     A a = new A(); 
     a.theMethod(); 
    } 
} 
0

non-statique (par exemple) ne peut pas être appelé de statique le contexte. D'une autre manière est possible.

1

Vous pouvez instancier un objet de la classe chaque fois que vous devez appeler la méthode non-statique, avec quelque chose comme:

new BadlyWrittenClass().BadlyWrittenMethod(); 

Cependant, si vous allez faire cela beaucoup, il peut devenir inefficace pour continuer à créer et à détruire des objets de cette manière.

Une meilleure façon peut être d'instancier un objet, comme dans votre propre constructeur de classe, et de l'utiliser à chaque fois que vous avez besoin d'appeler la méthode. Pourvu qu'il ne nécessite pas un nouvel objet initialisé à chaque fois, cela sera probablement plus efficace.

Mais vous pouvez également garder à l'esprit qu'il peut y avoir un raison pourquoi la méthode n'est pas statique (malgré mon jab pas si subtile dans les noms de classe et de méthode ci-dessus). Assurez-vous qu'il ne nécessite pas d'état que vous ne configurez pas lorsque vous créez une nouvelle instance. En d'autres termes, n'essayez pas aveuglément de le faire sans comprendre.

Questions connexes