2012-10-19 3 views
3

Possible en double:
calling non-static method in static method in JavaComment appeler une méthode non statique d'une méthode statique

Est-il possible d'appeler une méthode non statique d'une méthode statique? Le non-statique est situé dans une autre classe et doit être non-statique.

public static void start() { 
     CheckConnection checkInternet = new CheckConnection(); 
     if (checkInternet.isNetworkAvailable()) { 
      // Has internet Connection 
      } else { 
      // No Internet Connection 
     } 
} 

Le code ne donne pas d'erreurs dans Eclipse (Android 4.0.4), mais si je l'exécuter mes gels et ferme l'application.

+5

Oui c'est possible (il ne serait pas compilé sinon). Et ce n'est pas la raison pour laquelle ça gèle. Il est plus probable que la méthode 'isNetworkAvailable()' se bloque pour d'autres raisons. – assylias

+0

après le chemin de pile – njzk2

+0

ou le c'tor de CheckConnection. Regarder sur le stacktrace lors de l'exécution en mode débogage peut dévoiler le problème. – breezee

Répondre

5
The only way to call a non-static method from a static method is you should have 
an instance of the class containing the non-static method. 

Comme dans votre question:

CheckConnection checkInternet = new CheckConnection(); 
    if (checkInternet.isNetworkAvailable()) { 
     // Has internet Connection 
     } else { 
     // No Internet Connection 

Vous avez instance de CheckConnection afin que vous puissiez l'appeler.

Donc il n'y a pas de problème dans votre code avec méthode non statique à partir d'une méthode statique peut être une autre chose est responsable du gel des applications.

+0

Merci beaucoup! CheckConnection a contenu quelques erreurs, maintenant je l'obtiens! – ObAt

+0

votre accueil. Faites un peu de débogage dans cela. –

1

Oui, c'est possible. Le problème doit être avec votre méthode isNetworkAvailable.

S'il était impossible d'appeler des méthodes statiques à partir de méthodes statiques, les applications Java ne fonctionneraient pas, puisque main est elle-même statique.

1

Il suffit de créer l'objet de la classe qui contient la méthode non statique que vous souhaitez utiliser, puis vous pouvez appeler.

Par exemple:

public class Test { 
    public static void main(String[] args) { 
     System.out.println("This is a static method"); 
     TestClass class1 = new TestClass(); 
     class1.nonStatic(); 
    } 
} 

class TestClass{ 
    public void nonStatic(){ 
     System.out.println("This is a non-static method"); 
    } 
} 

Dans votre problème

public class A{ 
    public static void start() { 
     CheckConnection checkInternet = new CheckConnection(); 
     if (checkInternet.isNetworkAvailable()) { 
      // Has internet Connection 
      } else { 
      // No Internet Connection 
     } 
    } 
} 



public class CheckConnection { 
    public boolean isNetworkAvailable() 
     { 
     //some code 
     } 
    } 

Si tel est le scénario alors il devrait fonctionner.

1

Déboguez dans votre méthode isNetworkAvailable(). Si possible, placez un bloc try catch dans cette méthode et imprimez la pile de l'exception.

1

Est-il possible d'appeler une méthode non statique à partir d'une méthode statique?

Oui.

Depuis que vous avez créé un objet de CheckConnection, vous pouvez appeler la méthode en utilisant sa référence. sinon ce sera une erreur de compilation. Mais si je l'exécute, mon application se bloque et se ferme. L'appel de méthode non statique à partir d'un contexte statique n'est pas la raison. Peut être raison est dans isNetworkAvailable.

Questions connexes