Recientemente, utilicé el pensamiento en Java que vi cuando estaba fuera del trabajo. Sentí que era muy diferente de la primera vez que lo vi. Hablemos sobre la relación entre objetos y referencias en Java, así como sobre el concepto de clases internas.
1. Todo en Java es un objeto
¿Cuál es el objeto del operador en Java? La respuesta es una cita, que es como un puntero en C o C ++.
Si tiene una referencia, debe asociarla con un objeto en este momento, de lo contrario, la referencia no se dejará a su control como cree. Por ejemplo, crea una referencia de cadena:
Cadena S;
No está asociado con ningún objeto en este momento. Si realiza algunas operaciones en este momento, como llamar a algunos métodos de cadena, definitivamente habrá problemas (excepto algunos tipos básicos, porque cuando las define, se asignarán al valor inicial), por lo que debe asociar dinero con el objeto al usarlo:
Cadena s = nueva cadena ();
o
Cadena S = "Mi nombre es Ajun";
Solo hazlo así.
2. Cómo asociarse con objetos
En Java, un objeto generalmente se crea a través de nuevo para asociarse con referencias, como:
Cadena S = nueva cadena ("Mi nombre es Ajun"); Esto no solo crea un objeto para asociar referencias, sino que también lo inicializa para colegas, sino que también crea nuestro propio tipo de objeto.
3. Ubicación de almacenamiento
(1) Pila: Generalmente, la pila almacena referencias y variables de tipo básico. La pila asigna y libera principalmente la memoria moviendo el puntero de la pila hacia arriba y hacia abajo.
Las variables de tipo básico no son adecuadas para la nueva creación porque ocupan menos memoria.
(2) Monta: se usa para almacenar objetos Java. Cuando el programa se ejecuta nuevo, el montón asignará un espacio a este objeto. Recuerde que el montón usa más tiempo para asignar y liberar la memoria que la pila para almacenar y liberar la memoria. Esta es la razón por la cual las variables de tipo básico deben almacenarse en la pila, porque las variables de tipo básico se utilizan con mayor frecuencia, frecuentemente almacenan y liberan memoria, y cuando se consume más, el rendimiento se puede imaginar.
4. Clase interna
(1) Conocimiento básico de categorías internas:
En general, las clases definidas dentro de las clases de Java se convierten en clases internas se pueden dividir en: clases definidas fuera del cuerpo del método, clases definidas dentro del método y clases internas estáticas (solo definidas fuera del método), clases internas anónimas Descripción:
Defina la clase fuera del método:
Se puede acceder a las variables miembros de la clase (estática, no estatica). Para asegurarse de que las variables miembros de la clase se puedan hacer referencia correctamente, primero debe instanciar el objeto de la clase externa antes de instanciar los permisos de acceso de objetos de la clase interna. Puede tratarlo como una variable miembro de la clase, por lo que lo entenderá mucho más.
Clases definidas en el cuerpo del método;
Se puede acceder a las variables miembros de la clase (estática, no estatica). Para asegurarse de que las variables miembros de la clase se puedan hacer referencia correctamente, primero debe instanciar el objeto de la clase externa antes de instanciar el objeto de la clase interna no puede tener derechos de acceso, y simplemente tratarlo como una variable local del método.
Clase interna estática:
Acceso a cualquier clase interna anónima solo accediendo a variables de miembros estáticos de la clase:
Se puede acceder a las variables miembros de la clase (estática, no estatica). Para asegurarse de que las variables miembros de la clase se puedan hacer referencia correctamente, es necesario instanciar el objeto de la clase externa antes de que la instancia del objeto de la clase interna no pueda tener (2). El papel de la clase interna puede ocultar muy bien la clase. En general, la clase no permite el acceso predeterminado de protección privada.
Las clases internas pueden implementar una herencia múltiple, compensando las características que Java no puede heredar más (3), ejemplos
paquete com.ajun.test.innerclass.example; / ** * Contenido de frutas * @Author Administrator * */ Public Interface Contents {String Value (); } paquete com.ajun.test.innerclass.example; / ** * Destino de frutas * @Author Administrator * */ Public Interface Destination {// Destination String readLabel (); } paquete com.ajun.test.innerclass.example; Public Class Goods {private String des = "is ruit !!"; // Método El contenido de clase privada externa implementa contenido {private String name = "Apple"+DES; @Override public String Value () {Return Name; }} // clase privada externa implementa destino {etiqueta de cadena privada; GDestination privado (etiqueta de cadena) {this.label = etiqueta; } @Override public string readLabel () {return Label; }} // clase interna anónima de destino público getDestination (etiqueta de cadena final) {return new Destination () {@Override public String readLabel () {return Label; }}; } Public Destination Dest (String S) {return New GDestination (s); } contenido público contenido () {return nuevo content (); } Public Destination Dest2 (String S) {clase GDestination implementa destino {etiqueta de cadena privada; GDestination privado (etiqueta de cadena) {this.label = etiqueta; } @Override public string readLabel () {return Label; }} return New GDestination (s); }} paquete com.ajun.test.innerclass.example; prueba de clase pública {public static void main (string [] a) {bienes gs = new Goods (); Contenido c = gs.content (); Destino d = gs.dest ("beijing"); System.out.println (C.Value ()); System.out.println (D.ReadLabel ()); Destino d1 = gs.getDestination ("shanghai"); System.out.println (d1.readLabel ()); System.out.println (Gs.Dest2 ("Tianjin"). ReadLabel ()); }}El contenido y la gdestinación están bien ocultos. Al llamar al exterior, no sabe a qué clase se llama, para que esta clase tenga múltiples características de herencia.
Producción;
Apple es Ruit !! Beijing Shanghai Tianjin