Programación con java: algunas observaciones sobre las clases de android
Al iniciar un nuevo proyecto Java, Android Studio ofrece para crear una actividad para su proyecto. Android Studio le ofrece diferentes tipos de actividades, como una actividad básica, una actividad vacía, una actividad de inicio de sesión, y así sucesivamente. Si usted pide una actividad vacío, se obtiene este código:
com.allyourcode.a10_11- paquete
importación android.support.v7.app.AppCompatActivity-
importación android.os.Bundle-
Video: Programación Android Tutorial 1: Introducción
MainActivity clase pública se extiende AppCompatActivity {
@Anular
protected void onCreate (Bundle savedInstanceState) {
super.onCreate (savedInstanceState) -
setContentView (R.layout.activity_main) -
}
}
El código declara una clase llamada Actividad principal
. Este nombre Actividad principal
no es parte de la biblioteca API de Android. Es un nombre que usted hace cuando se crea un nuevo proyecto Android. (En realidad, Android Studio compone el nombre. Usted acepta el nombre o la cambie a algún otro nombre cuando se siguen los pasos para crear un nuevo proyecto.)
los Actividad principal
clase extiende una clase que pertenece a la biblioteca SDK de Android, a saber, la AppCompatActivity
clase. En otras palabras, el Actividad principal
objeto es un AppCompatActivity
objeto. los Actividad principal
objeto tiene todos los derechos y responsabilidades que cualquier AppCompatActivity
instancia tiene. Por ejemplo, el Actividad principal
tiene una onCreate
método, que se anula.
De hecho, la Actividad principal
clase hereda alrededor de 460 líneas de código de Android AppCompatActivity
clase, que hereda unas 1.000 líneas de Android de FragmentActivity
clase, que hereda cerca de 6.700 líneas de la clase Actividad de Android. Los métodos heredados incluyen onas tales como getCallingActivity
, getCallingPackage
, getParent
, getTitle
, getTitleColor
, GetWindow
, onBackPressed
, onkeydown
, onKeyLongPress
, onLowMemory
, onMenuItemSelected
, setTitle
, setTitleColor
, startActivity
, de meta, y muchos, muchos otros. Se hereda toda esta funcionalidad con dos simples palabras: se extiende AppCompatActivity
.
En la terminología de las relaciones familiares, su Actividad principal
clase es un descendiente de Android de Actividad
clase. Tu Actividad principal
clase es un tipo de Actividad
.
Esta imagen, tomada directamente de la documentación en línea de Android, resume la información sobre el AppCompatActivity
clase.
Marcar la página para facilitar el acceso a la documentación de la biblioteca API de Android.
Además de ser una subclase, la AppCompatActivity
clase implementa un montón de interfaces, incluyendo el AppCompatCallback
interfaz, el TaskStackBuilder
interfaz, y otros. Usted no tiene que recordar nada de esto. Si alguna vez tiene que saberlo, puede buscarlo en la página de documentación de Android.
súper palabras clave de Java, revisited
La palabra súper
representa el constructor de la superclase. código diferente al usado súper
palabra clave de diferentes maneras. Sí, súper
siempre tiene algo que ver con la clase padre de una clase. Pero no, súper
no siempre se refiere al constructor de la clase padre.
en una onCreate
método, la llamada super.onCreate (savedInstanceState)
envía savedInstanceState
a la de la clase padre onCreate
método. La clase padre es el AppCompatActivity
clase. Así Java llama la AppCompatActivit
y la clase de onCreate
método.
los AppCompatActivity
la clase de onCreat
Método E contiene su propia llamada a super.onCreate (savedInstanceState)
. los AppCompatActivity
matriz de clase es el FragmentActivity
clase. Así pasa Java savedInstanceState
al FragmentActivity
la clase de onCreate
método. Y así.
Video: Como aprender java - Clases , Objetos y Encapsulación
No es hasta que llegue a la Actividad
clase - de MainActivity
bisabuelo de clase - que el código hace uso directo de la savedInstanceState
variable. De esto savedInstanceState
información, el código coloca la actividad de nuevo la forma en que estaba antes del sistema de la destruyó.
Fundición, de nuevo
Cuando usted llama findViewById
, Java no sabe qué tipo de vista que va a encontrar. los findViewById
método siempre devuelve una Ver
ejemplo, pero un montón de clases de Android amplían la Ver
clase. Por ejemplo, las clases Botón
, Vista de texto
, ImageView
, Caja
, Cronómetro
, y RatingBar
todas extender el Android de Ver
clase. Si escribe el siguiente código:
// no hace esto !!
Vista de Texto textView-
Textview = findViewById (R.id.textView) -
Java deja escapar un sonoro rugido resentida: “¿Cómo se atreve usted asume que el objeto devuelto por una llamada a findViewById
se refiere a una instancia de la Vista de texto
clase!”(En realidad, Java muestra en silencio y mecánicamente una Tipos incompatibles mensaje de error en el editor de Android Studio.)
Estrechamiento significa tratar de asignar una largo
valor a una int
valor. UN largo
valor tiene 64 bits, y una int
valor tiene sólo 32 bits. Por lo que el intento de estrechamiento falla. En el código que se encuentra aquí, la mala findViewById
llamada es otro intento de hacer estrechamiento - la asignación de la Ver
valor devuelto por una llamada a un método Vista de texto
variable. los Vista de texto
clase es una subclase de la Ver
clase, por lo que la asignación falla estrepitosamente.
apaciguar a los dioses de Java mediante la adición de un operador de casting para el código. Usted le dice a Java para convertir lo que se sale de la findViewById
llamada a un método en una Vista de texto
objeto.
Textview = (Vista de texto) findViewById (R.id.textView1) -
Mientras que usted está escribiendo el código Java que sigue la corriente y le dice: “Tu operador de fundición me demuestra que usted es consciente de la diferencia entre una Vista de texto
y cualquier edad Ver
. Voy a hacer mi mejor esfuerzo para interpretar el Ver
objetos que encuentro en tiempo de ejecución como una Vista de texto
objeto “. (En realidad, mientras se está escribiendo el código, Java no dice nada. El hecho de que Java no muestra mensajes de error cuando se utiliza este truco de fundición es una buena señal. característica de fundición de Java salva el día!)
De fundición evita que vea un mensaje de error al desarrollar su código. De esa manera, la fundición es una característica muy útil de Java. Pero la fundición no se puede ahorrar si el código contiene errores de ejecución. Al escribir
Textview = (TextView) findViewById (R.id.textView1) -
verificar que el nombre vista de texto
representa una Vista de texto
Widget. Cuando la aplicación se ejecuta, Java agarra el R.id.textView
widget de la activity_main.xml
archivo, y todo funciona muy bien. Sin embargo, puede que a veces se olvide de comprobar su R.java
nombres con los componentes en el archivo XML. Una llamada a findViewById
sorprendentemente escupe un Botón
componente cuando su fundición dice Java para esperar una Vista de texto
Widget. Cuando esto sucede, Java se ahoga con el operador de fundición y su aplicación se bloquea durante su funcionamiento. ¡Volver al tablero de dibujo!