Para distinguir entre estos dos hermanos, en primer lugar, tenemos que saber cuáles son. Primero, tome la variable miembro.
Variables de miembros
Estudiemos una cosa:
Atributos: características externas; como la altura y el peso humanos
Comportamiento: ¿Qué puedes hacer? Por ejemplo, las personas tienen comportamientos como hablar, jugar baloncesto, etc.
En el lenguaje Java, la unidad más básica es una clase, y las clases se utilizan para reflejar las cosas.
Lo mismo es cierto para describir cosas con clases de clases:
Atributo: variables de miembros en la clase correspondiente
Comportamiento: Funciones de miembros en la clase correspondiente
Definir una clase es en realidad un miembro (variables de miembros y funciones de miembros) en la clase
Expansión: una clase es un concepto abstracto, y un objeto es la existencia concreta y la realización de una clase. Por ejemplo: el automóvil en la vida puede considerarse como una clase, que llamamos la clase de automóvil. Cada automóvil tiene un número de color y neumático (se puede definir como un atributo, es decir, variable de miembro), y cada automóvil puede funcionar (es decir, el comportamiento del automóvil, correspondiente a la función de miembro total de la clase). Si instanciamos el automóvil, produciremos un objeto, como Mercedes-Benz y BMW (BMW).
Demo1:
auto de clase pública {color de cadena privada; // Definir el color del automóvil, variable global privada int numluntai; // Definir el número de neumáticos para automóvil, Variable Global Public Car (Color de cadena, int numLuntai) {super (); this.color = color; this.numLuntai = numLuntai; } public void run () {System.out.println (this.numluntai + "ruedas" + this.color + "El auto está conduciendo en la carretera"); }} public class Classtest {public static void main (string [] args) {car bmw = nuevo automóvil ("negro", 4); // crear un objeto de sedán con el nombre BMW BMW.RUN (); }}Resultados de ejecución:
Un sedán negro con 4 ruedas conduce en la carretera
Entre ellos, el color y el numluntai se llaman variables miembros de la clase de automóviles. Esta propiedad se puede usar para describir las propiedades de una clase. De lo contrario, debe definirse como una variable local.
Por ejemplo, I en un bucle for es una variable local.
para (int i = 0; i <args.length; i ++) {
......
}
Por ejemplo, una variable se escribe en un método miembro como una variable local.
CAR PublicClass {color de cadena privada; // Definir el color del automóvil, variable global privada int numluntai; // Definir el número de neumáticos para automóvil, Variable Global Public Car (Color de cadena, int numLuntai) {super (); this.color = color; this.numLuntai = numLuntai; } public void run () {string carname = "bmw"; // Esta es la variable local System.out.println (this.numluntai + "ruedas" + this.color + Carname + "El automóvil está conduciendo en la carretera"); }} publicClass Classtest {public static void main (string [] args) {car bmw = nuevo automóvil ("negro", 4); // crear un objeto de sedán con el nombre BMW BMW.RUN (); }}resultado:
El sedán BMW negro con 4 ruedas conduce en la carretera
La diferencia entre las variables de los miembros y las variables locales
Variables de miembro:
① Las variables de los miembros se definen en la clase y se puede acceder a lo largo de la clase.
② Las variables de los miembros se establecen con el establecimiento del objeto, desaparecen con la desaparición del objeto y existen en la memoria del montón donde se encuentra el objeto.
③ Las variables miembros tienen valores de inicialización predeterminados.
Variables locales:
① Las variables locales solo se definen en el alcance local, como: dentro de las funciones, dentro de las declaraciones, etc., y solo son válidas en el área al que pertenecen.
② Existen variables locales en la memoria de la pila. Cuando termina el alcance de su función, el espacio variable se lanzará automáticamente.
③ Las variables locales no tienen valores de inicialización predeterminados
Los principios que deben seguirse al usar variables son: Principio de proximidad
Primero, busque en el alcance local, úselo si hay uno; Luego busque en la posición del miembro.
Puedo estar un poco confundido cuando veo esto. Permítanme resolver un ejemplo a continuación. Si lo piensas cuidadosamente, en realidad es muy simple.
Primero echemos un vistazo a un código simple.
Primero definí una clase de persona.
Persona de clase pública {private int age = 1000; // Definir variables de miembros, la edad es 1000 public void setAge (int Age) {age = edad; System.out.println ("edad dentro del método"+edad); } public void sayshello () {System.out.println ("Mi edad es"+edad+"."); }}Luego cree un objeto en la función principal y lo genere.
Persona p = nueva persona (); p.setage (20); p.sayhello ();
¿Cuál es el resultado de salida? No es que hayamos imaginado que mi edad es de 20, sino lo siguiente:
// La edad dentro del método es 20 // mi edad es 1000.
En realidad es fácil de entender si lo piensas.
En una palabra, si hay nombres diferentes, el nombre de la variable en el método representa una variable de miembro; Si hay los mismos nombres, entonces el nombre de la variable en el método solo representa una variable local, y no tiene relación con la variable miembro.
Entonces, primero, cuando creamos un objeto de persona P, la variable miembro se ha inicializado al crear el objeto. El valor inicial de la edad variable miembro es 1000.
Cuando P.Setage (20), el 20 en realidad solo funciona en el método de setAGE, por lo que los 20 años en el método son la salida. Después de ejecutar esta oración, el 20 es destruido.
Luego ejecute Sayhello, y la edad en él representa el valor de la variable miembro, por lo que sigue siendo 1000.
Si aún no puede entenderlo aquí, puede escribir el código usted mismo para ver los resultados de la salida y experimentarlo.
Entonces, cuando se usa el mismo nombre, queremos dejar que este nombre de variable represente una variable miembro. ¿Hay alguna forma?
Luego tenemos que hablar sobre esta palabra clave. Cambiamos la clase de la persona a esto:
Persona de clase pública {private int age = 1000; public void setAge (int a age) {this.age = edad; System.out.println ("edad dentro del método"+edad); } public void sayshello () {System.out.println ("Mi edad es"+edad+"."); }}Ejecute el código nuevamente y encuentre que el resultado de ejecución del código se convierte en lo siguiente:
// La edad dentro del método es 20 // mi edad es de 20.
Esto representa el objeto actual.
Esta.AGE aquí indica específicamente que el valor de la edad del objeto P (es decir, la edad variable de miembro del objeto P) es 20.
Aunque la esencia de los dos es variable, hay una gran diferencia cuando se usa, y puede caer en una trampa si no tiene cuidado. Recuerde primero: en una clase, si se puede usar una variable para describir las propiedades de una clase, se define como una variable miembro, de lo contrario, debe definirse como una variable local. Si no puede entender, escriba más código y puede entenderlo.