Le mot-clé statique est un mot-clé que de nombreux amis rencontrent lors de l'écriture et de la lecture du code. C'est également l'un des points de connaissance que les enquêteurs des grandes entreprises aiment demander lors des entretiens. Parlons d'abord de l'utilisation des mots clés statiques et des malentendus communs. Enfin, nous énumérons quelques questions de test courantes sur la statique dans l'entretien écrit. Voici le plan du répertoire de cet article:
1. Le but des mots clés statiques
2. Idées fausses des mots clés statiques
3. Questions d'interview écrites courantes
S'il y a une incorrecte, j'espère comprendre et accueillir des critiques et une correction.
Veuillez respecter les réalisations du travail de l'auteur. Veuillez indiquer le lien d'origine lors de la réimpression:
http://www.cnblogs.com/dolphin0520/p/3799052.html
1. Le but des mots clés statiques
"La méthode statique est une méthode sans cela. Les méthodes non statiques ne peuvent pas être appelées à l'intérieur de la méthode statique, ce qui est à son tour possible. Et la méthode statique ne peut être appelée que via la classe elle-même sans créer d'objet. Il s'agit en fait de l'objectif principal de la méthode statique."
Bien que ce passage illustre uniquement les caractéristiques spéciales de la méthode statique, il peut être vu que la fonction de base du mot-clé statique. En bref, il est décrit dans une phrase:
Il est pratique d'appeler (méthode / variable) sans créer un objet.
De toute évidence, les méthodes ou variables modifiées par les mots clés statiques n'ont pas besoin de s'appuyer sur des objets pour l'accès. Tant que la classe est chargée, ils sont accessibles via le nom de la classe.
Static peut être utilisé pour modifier les méthodes des membres de la classe et les variables des membres de la classe. De plus, des blocs de code statiques peuvent être écrits pour optimiser les performances du programme.
1) Méthode statique
La méthode statique est généralement appelée méthode statique. Étant donné que les méthodes statiques sont accessibles sans s'appuyer sur aucun objet, il n'y a pas cela pour les méthodes statiques car elle ne dépend d'aucun objet. Puisqu'il n'y a pas d'objets, il n'y a pas de tel. Et en raison de cette caractéristique, les variables des membres non statiques et les méthodes de membres non statiques de la classe ne sont pas accessibles dans des méthodes statiques, car les méthodes / variables des membres non statiques doivent s'appuyer sur des objets spécifiques à appeler.
Mais il convient de noter que bien que les méthodes des membres non statiques et les variables des membres non statiques ne soient pas accessibles dans des méthodes statiques, les méthodes / variables des membres statiques sont accessibles dans des méthodes de membres non statiques. Donnons un exemple simple:
Dans le code ci-dessus, comme la méthode PRINT2 existe indépendamment de l'objet, il peut être appelé directement par nom de classe. Si des méthodes / variables non statiques sont accessibles dans des méthodes statiques, alors en cas d'instruction suivante dans la méthode principale:
MyObject.print2 ();
Pour le moment, il n'y a pas d'objet et STR2 n'existe pas du tout, donc il y aura une contradiction. Il en va de même pour les méthodes. Étant donné que vous ne pouvez pas prédire si les variables des membres non statiques sont accessibles dans la méthode PRINT1, l'accès aux méthodes des membres non statiques dans les méthodes de membres statiques est également interdite.
Et pour les méthodes des membres non statiques, il est évidemment illimité d'accéder aux méthodes / variables des membres statiques.
Par conséquent, si vous souhaitez appeler une méthode sans créer un objet, vous pouvez définir cette méthode sur statique. Notre méthode statique la plus courante est la méthode principale. Quant à savoir pourquoi la méthode principale doit être statique, elle est très claire maintenant. Étant donné que le programme ne crée aucun objet lors de l'exécution de la méthode principale, il ne peut être accessible que via le nom de classe.
N'oubliez pas non plus que même s'il n'est pas affiché comme statique, le constructeur de la classe est en fait une méthode statique.
2) Variables statiques
Les variables statiques sont également appelées variables statiques. La différence entre les variables statiques et les variables non statiques est que les variables statiques sont partagées par tous les objets, avec une seule copie en mémoire, qui sera initialisée si et seulement lorsque la classe est chargée pour la première fois. Les variables non statiques appartiennent à des objets et sont initialisées lors de la création d'objets. Il y a plusieurs copies et les copies appartenant à chaque objet ne se affectent pas.
L'ordre d'initialisation des variables de membres statiques est initialisé dans l'ordre défini.
3) Bloc de code statique
Une autre fonction clé du mot-clé statique consiste à former des blocs de code statiques pour optimiser les performances du programme. Le bloc statique peut être placé n'importe où dans la classe, et il peut y avoir plusieurs blocs statiques dans la classe. Lorsque la classe est chargée pour la première fois, chaque bloc statique sera exécuté dans l'ordre des blocs statiques et ne sera exécuté qu'une seule fois.
La raison pour laquelle les blocs statiques peuvent être utilisés pour optimiser les performances du programme est due à sa caractéristique: ils ne seront exécutés qu'une fois que la classe sera chargée. Voici un exemple:
classe de classe {date privée date de naissance; personne publique (date de naissance de la date) {this.birthdate = naissance;} booléen isBorboomer () {date startDate = date.valueof ("1946"); date enddate = date.valueof ("1964"); retour naissance. 0;}} Isborboomer est habitué à savoir si cette personne est née en 1946-1964. Chaque fois que l'Osbroomomer est appelé, deux objets seront générés, ce qui entraînera un gaspillage d'espace. En cas de changé pour cela, ce sera mieux:
Classe Person {Date privée Date de naissance; Date statique privée Start StartDate, EndDate; statique {startDate = Date.ValueOf ("1946"); EndDate = Date.Valueof ("1964");} Person public (Date Birthdate) {this.birthdate = naissancedate;} Boolean isBorboomer () {RETOUR BIRT anniversaire.compareto (enddate) <0;}} Par conséquent, plusieurs fois, certaines opérations d'initialisation qui ne doivent être effectuées qu'une seule fois seront placées dans le bloc de code statique.
2. Idées fausses des mots clés statiques
1. Le mot-clé statique modifiera-t-il les droits d'accès des membres de la classe?
Certains débutants confondrent statique en Java avec des fonctions de mots clés statiques en C / C ++. N'oubliez pas une chose ici: contrairement à la statique en C / C ++, le mot-clé statique en Java n'affectera pas la portée des variables ou des méthodes. En Java, les seuls mots clés qui peuvent affecter les autorisations d'accès sont privés, publics et protégés (y compris les autorisations d'accès aux packages). Regardez les exemples suivants pour comprendre:
L'erreur rapide "Person.age n'est pas visible", ce qui signifie que le mot-clé statique ne modifie pas les autorisations d'accès des variables et des méthodes.
2. Les variables des membres statiques peuvent-elles être accessibles à travers cela?
Bien qu'il n'y ait pas cela pour les méthodes statiques, les variables de membres statiques peuvent-elles être accessibles à travers cela dans des méthodes non statiques? Examinons d'abord l'exemple suivant. Quel est le résultat de cette sortie de code?
classe publique Main {static int value = 33; public static void main (String [] args) lève une exception {new Main (). printValue ();} private void printValue () {int value = 3; System.out.println (this.value);}} 33
Il s'agit principalement de l'équipe d'observation principale pour comprendre cela et statique. Qu'est-ce que cela représente? Cela représente l'objet actuel. Si printValue est appelé via New Main (), l'objet actuel est l'objet généré par New Main (). La variable statique est appréciée par l'objet, de sorte que la valeur de cette valeur dans PrintValue est sans aucun doute 33. La valeur à l'intérieur de la méthode PrintValue est une variable locale et ne peut pas être associée à cela du tout, donc la sortie est 33. Souvenez-vous d'une chose ici: bien que les variables des membres statiques soient indépendantes des objets, ils ne peuvent pas être accessibles à travers des objets. Toutes les méthodes statiques et les variables statiques sont accessibles via des objets (tant que les autorisations d'accès sont suffisantes).
3. Le statique peut-il agir sur les variables locales?
En C / C ++, la statique peut étendre les variables locales, mais n'oubliez pas en Java: Static n'est pas autorisé à être utilisé pour modifier les variables locales. Ne demandez pas pourquoi, c'est la fourniture de la syntaxe Java.
3. Questions d'interview écrites courantes
Ce qui suit répertorie quelques questions sur les mots clés statiques qui sont souvent rencontrés dans l'entretien écrit. Ils sont pour référence uniquement. Si vous avez des suppléments, n'hésitez pas à laisser un message ci-dessous.
1. Quel est le résultat de sortie du code suivant?
Le test de classe publique étend la base {static {System.out.println ("Test Static");} public test () {System.out.println ("Test Constructor");} Public Static Void Main (String [] args) {new Test ();}} Class Base {static {System.out.println ("Base Static");}} publique Base () {System.out.println ("Constructeur de base");}} base statique
tester statique
constructeur de base
constructeur de test
Quant à savoir pourquoi ce résultat est, ne discutons pas d'abord. Réfléchissons au processus d'exécution spécifique de ce code. Au début de l'exécution, nous devons d'abord trouver la méthode principale, car la méthode principale est l'entrée du programme, mais avant d'exécuter la méthode principale, la classe de test doit être chargée en premier. Lors du chargement de la classe de test, il est constaté que la classe de test hérite de la classe de base, il se tourne donc pour charger d'abord la classe de base. Lors du chargement de la classe de base, il constate qu'il y a un bloc statique, puis exécute le bloc statique. Une fois la classe de base chargée, la classe de test continue de se charger, puis constate qu'il y a des blocs statiques dans la classe de test, de sorte que le bloc statique est exécuté. Après le chargement de la classe requise, la méthode principale commence à être exécutée. Lors de l'exécution de nouveaux tests () dans la méthode principale, le constructeur de la classe parent sera d'abord appelé, puis le constructeur qui lui est propre. Par conséquent, le résultat de sortie ci-dessus apparaît.
2. Quel est le résultat de sortie de ce code?
Test de classe publique {personne personne = new personne ("test"); statique {System.out.println ("Test Static");} public test () {System.out.println ("Test Constructor");} public static void Main (String [] args) {new MyClass ();}} classe Person {STATIC {System.out.out.Println ("Personne"); str) {System.out.println ("personne" + str);}} class MyClass étend le test {personne personne = new personne ("myclass"); statique {System.out.println ("myclass static");} public myclass ()}} tester statique 1
Tester Static 2
Bien qu'il n'y ait pas de déclarations dans la méthode principale, ils seront toujours sortis, car la raison a été expliquée ci-dessus. De plus, le bloc statique peut apparaître n'importe où dans la classe (tant qu'il n'est pas à l'intérieur de la méthode, n'oubliez pas, aucune méthode ne peut le faire) et l'exécution est exécutée dans l'ordre des blocs statiques.
Ce qui précède est une analyse complète des mots clés statiques de Java présentés par l'éditeur. J'espère que cela vous sera utile. Si vous avez des questions, veuillez me laisser un message et l'éditeur vous répondra à temps. Merci beaucoup pour votre soutien au site Web Wulin.com!