Son pas très orientée objet:
L'une des raisons de la statique pourrait être considéré comme "mal" par certaines personnes, c'est qu'ils sont contraire, le paradigme orienté objet. En particulier, il viole le principe que les données sont encapsulées dans des objets (qui peuvent être étendus, se cacher de l'information, etc). La statique, de la manière que vous décrivez à l'aide de eux, sont essentiellement les utiliser comme une variable globale pour éviter de faire face à des questions comme la portée. Cependant, les variables globales est l'une des caractéristiques déterminantes de la procédure ou de la programmation impérative paradigme, pas une caractéristique de la "bonne" code orienté objet. Ce n'est pas à dire que la procédure de paradigme est mauvais, mais j'ai l'impression que votre superviseur vous attend à l'écriture de "bon code orienté objet" et vous êtes vraiment désireux d'écrire "bon code de procédure".
Il y a beaucoup de gotchyas en Java lorsque vous commencez à utiliser des variables statiques qui ne sont pas toujours évidentes. Par exemple, si vous avez deux copies de votre programme en cours d'exécution dans la même machine virtuelle, vont-ils shre la statique de la valeur de la variable et le désordre de l'état de chacun des autres? Ou ce qui se passe quand vous étendez la classe, vous pouvez remplacer le membre statique? Est votre VM en cours d'exécution hors de la mémoire parce que vous avez aliéné des numéros de la statique et que la mémoire ne peut pas être récupérée à d'autres objets d'instance?
Durée De Vie Des Objets:
En outre, la statique ont une durée de vie qui correspond à l'ensemble de l'exécution du programme. Cela signifie que, même une fois que vous avez fini d'utiliser votre classe, la mémoire de l'ensemble de ces variables statiques ne peuvent pas être nettoyés. Si, par exemple, au lieu de cela, vous avez fait vos variables non statique, et dans votre fonction main() vous faites une seule instance de votre classe, et demanda alors à votre classe pour exécuter une fonction particulière de 10 000 fois, une fois ces 10 000 appels ont été faites, et que vous supprimez vos références à l'instance unique, toutes vos variables statiques pourrait être nettoyés et réutilisés.
Empêche certaines ré-utiliser:
Aussi, les méthodes statiques ne peuvent pas être utilisés pour implémenter une interface, de sorte que les méthodes statiques ne peuvent empêcher certains orientée objet dispose d'être utilisables.
D'Autres Options:
Si l'efficacité est votre préoccupation principale, il y a peut être d'autres de meilleures façons de résoudre le problème de vitesse que de considérer seulement l'avantage de l'invocation étant généralement plus rapide que la création. Examiner si le transitoire et la volatilité de la modificateurs sont nécessaires partout. Pour préserver la capacité à être incorporé, une méthode pourrait être marqué comme final au lieu de statique. Les paramètres de la méthode et d'autres variables peuvent être marqués en finale pour permettre à certaines compilateur optimiazations fondées sur des hypothèses sur ce qui peut modifier ces variables. Une instance de l'objet peut être réutilisé plusieurs fois plutôt que de créer une nouvelle instance à chaque fois. Il peut être compliler commutateurs d'optimisation doit être activée pour que l'application en général. Peut-être, la conception devrait être mis en place afin que les 10 000 pistes peuvent être multi-threaded et profiter de multi-cœurs de processeur. Si portablity n'est pas une préoccupation, peut-être une méthode native vous obtenir une meilleure vitesse de votre statique faire.
Si, pour une raison quelconque vous ne voulez pas de copies multiples d'un objet, le modèle de conception singleton, a des avantages sur les objets statiques, tels que le fil de sécurité (à condition que votre singleton est codée bien), permettant paresseux-initialisation, garantissant que l'objet a été initialisé correctement lorsqu'il est utilisé, sous-classements, des avantages pour les essais et la refactorisation de votre code, pour ne pas mentionner, si vous changez d'avis à propos de seulement vouloir une instance d'un objet, il est BEAUCOUP plus facile d'enlever le code pour empêcher la duplication des cas que c'est de revoir tous vos variable statique de code pour utiliser les variables d'instance. J'ai eu à le faire avant, ce n'est pas amusant, et vous finissez par avoir à modifier beaucoup de classes, ce qui augmente votre risque d'introduire de nouveaux bugs...tellement mieux de mettre les choses en place "la droite" la première fois, même si on dirait qu'elle a ses inconvénients. Pour moi, le travail de base nécessaire si vous décidez sur la route, vous avez besoin de plusieurs copies de quelque chose qui est probablement l'une des meilleures raisons pour utiliser la statique aussi rarement que possible. Et donc je voudrais également en désaccord avec l'énoncé que la statique de réduire les inter-dépendances, je pense que vous allez vous retrouver avec du code qui n'est plus couplée si vous avez beaucoup de statique, qui peut être directement accessibles, plutôt qu'un objet qui "sait comment faire quelque chose" sur lui-même.