Docsity
Docsity

Prepara tus exámenes
Prepara tus exámenes

Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity


Consigue puntos base para descargar
Consigue puntos base para descargar

Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium


Orientación Universidad
Orientación Universidad


Uso de clases anónimas en Java, Apuntes de Programación Java

Este documento ilustra el uso de clases anónimas en Java mediante ejemplos prácticos. Las clases anónimas son útiles para la implementación de interfaces y la creación de objetos en tiempo de ejecución. El documento incluye ejemplos de clases anónimas que implementan interfaces y heredan de clases, así como la sobrecarga de métodos estáticos.

Tipo: Apuntes

2020/2021

Subido el 29/06/2021

porfirio-arevalo
porfirio-arevalo 🇲🇽

2 documentos

1 / 182

Toggle sidebar

Esta página no es visible en la vista previa

¡No te pierdas las partes importantes!

bg1
Notas de Introducci´on al Lenguaje de
Programaci´on Java
Jorge L. Ortega Arjona
Departamento de Matem´aticas
Facultad de Ciencias, UNAM
Septiembre 2004
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e
pf1f
pf20
pf21
pf22
pf23
pf24
pf25
pf26
pf27
pf28
pf29
pf2a
pf2b
pf2c
pf2d
pf2e
pf2f
pf30
pf31
pf32
pf33
pf34
pf35
pf36
pf37
pf38
pf39
pf3a
pf3b
pf3c
pf3d
pf3e
pf3f
pf40
pf41
pf42
pf43
pf44
pf45
pf46
pf47
pf48
pf49
pf4a
pf4b
pf4c
pf4d
pf4e
pf4f
pf50
pf51
pf52
pf53
pf54
pf55
pf56
pf57
pf58
pf59
pf5a
pf5b
pf5c
pf5d
pf5e
pf5f
pf60
pf61
pf62
pf63
pf64

Vista previa parcial del texto

¡Descarga Uso de clases anónimas en Java y más Apuntes en PDF de Programación Java solo en Docsity!

Notas de Introducci´on al Lenguaje de

Programaci´on Java

Jorge L. Ortega Arjona

Departamento de Matem´aticas

Facultad de Ciencias, UNAM

Septiembre 2004

    1. Introducci´on
    1. Programaci´on B´asica en Java
    • 2.1. Codificaci´on Java
      • 2.1.1. Archivos .java
      • 2.1.2. Comentarios
    • 2.2. Identificadores
    • 2.3. Valores
      • 2.3.1. Valores enteros
      • 2.3.2. Valores de punto flotante
      • 2.3.3. Valores booleanos
      • 2.3.4. Valores caracter
      • 2.3.5. Valores de cadenas de caracteres
      • 2.3.6. Valor nulo
    • 2.4. Tipos
      • 2.4.1. Tipos Primitivos
      • 2.4.2. Tipos de Referencia
      • 2.4.3. Conversi´on Autom´atica de Tipos
    • 2.5. Entornos (Scope)
    • 2.6. Declaraci´on de Variables
    • 2.7. Inicializaci´on de Variables
      • 2.7.1. Variables de Clase e Instancia
      • 2.7.2. Variables Par´ametro
      • 2.7.3. Variables Par´ametro de Manejo de Excepciones
      • 2.7.4. Variables Locales
      • 2.7.5. Variables Finales
    • 2.8. Arreglos de Variables
    • 2.9. Expresiones Primarias
    • 2.10. Operadores
      • 2.10.1. Operadores de Incremento Posfijo
      • 2.10.2. Operadores Unarios
      • 2.10.3. El operador new
      • 2.10.4. El operador cast
      • 2.10.5. Operadores Artim´eticos
      • 2.10.6. Operador concatenaci´on de cadenas de caracteres
      • 2.10.7. Operadores de corrimiento
      • 2.10.8. Operadores relacionales
      • 2.10.9. Operadores L´ogicos a bit
      • 2.10.10.AND y OR booleanos
      • 2.10.11.Operador condicional
      • 2.10.12.Operadores de asignaci´on
    • 2.11. Enunciados
      • 2.11.1. El enunciado if
      • 2.11.2. El enunciado switch
    • 2.12. Ciclos
      • 2.12.1. El ciclo while
      • 2.12.2. El ciclo do
      • 2.12.3. El ciclo for
    • 2.13. Control de ejecuci´on
      • 2.13.1. break
      • 2.13.2. continue
      • 2.13.3. return
    1. Programaci´on Orientada a Objetos en Java
    • 3.1. Clases
      • 3.1.1. Declaraci´on de clases
      • 3.1.2. P´ublico, Privado y Protegido
      • 3.1.3. Variables de Instancia
      • 3.1.4. Variables Est´aticas o de clase
      • 3.1.5. Clases de alto nivel
      • 3.1.6. Clases anidadas
      • 3.1.7. Clases finales
      • 3.1.8. Clases abstractas
    • 3.2. M´etodos
      • 3.2.1. Declaraci´on de M´etodos
      • 3.2.2. M´etodos Est´aticos o de clase
      • 3.2.3. Constructores
      • 3.2.4. Inicializadores Est´aticos
      • 3.2.5. this
      • 3.2.6. Redefinici´on de M´etodos
      • 3.2.7. M´etodos Finales
      • 3.2.8. Expresiones de invocaci´on a M´etodos
        • una clase 3.2.9. B´usqueda de nombre modificado para miembros de
      • 3.2.10. M´etodos abstractos
      • 3.2.11. M´etodos heredados de la clase Object
    • 3.3. Herencia
      • 3.3.1. Palabras Clave private, protected, y Herencia
      • 3.3.2. Constructores y Herencia
    1. T´opicos Especiales en Java
    • 4.1. Paquetes
    • 4.2. Interfaces
      • 4.2.1. Declaraci´on de Interfaces
      • 4.2.2. implements
    • 4.3. Excepciones
      • 4.3.1. Clases de Excepci´on
      • 4.3.2. try, catch y finally
      • 4.3.3. Propagaci´on de Excepciones
      • 4.3.4. Declaraci´on throws
      • 4.3.5. El enunciado throw
    • 4.4. Hebras de Control (Threads)
      • 4.4.1. La clase Thread
      • 4.4.2. M´etodos Sincronizados
      • 4.4.3. El enunciado synchronized
    • 4.5. Ventanas (Windows)
      • 4.5.1. Un Programa Simple con Interfaz Gr´afica
      • 4.5.2. Descripci´on de la Ventana
      • 4.5.3. El Area de Dibujo´
      • 4.5.4. Entrada de Caracteres
      • 4.5.5. Men´ues, Archivos e Im´agenes
  • A. Entrada por Teclado
    • A.1. La clase KeyboardInput

Cap´ıtulo 1

Introducci´on

Java es un lenguaje de programaci´on de alto nivel, orientado a obje- tos, multi-hebra, usado para escribir tanto programas autocontenidos como “applets”, estos ´ultimos como parte de los documentos HTML (hypertext markup language) que se encuentran disponibles en p´aginas WWW. Los ap- plets permiten a las p´aginas de red tener un contenido ejecutable accesible con un navegador habilitado con Java.

Java tiene varias ventajas y caracter´ısticas ´utiles para el programador:

Una vez que el compilador e int´erprete de Java han sido portados a una nueva plataforma, un programa Java puede ejecutarse en tal plataforma sin cambios. Java es un lenguaje fuertemente tipificado: el compilador hace varias verificaciones, tal como comparar los tipos de los argumentos que se pasan a los m´etodos para asegurar que se ajustan a los tipos de los par´ametros formales. El int´erprete hace muchas verificaciones durante el tiempo de ejecu- ci´on, tal como asegurar que el ´ındice de un arreglo no salga de sus limites, o que una referencia a un objeto no sea nula. No son posibles ni “fugas de memoria” (memory leak, un bloque de memoria que todav´ıa se considera reservado en memoria aun cuando no haya referencias a ´el) ni “apuntadores colgantes” (dangling point- ers, una referencia a un bloque de memoria que ha sido liberado), ya que el recolector de basura (garbage collector) de Java recolecta toda la memoria ocupada por objectos inalcanzables. No es necesario un procedimiento free(), susceptible a errores.

No hay aritm´etica de apuntadores: las ´unicas operaciones permitidas sobre las referencias a un objeto son asignaci´on de otra referencia a objeto y comparaci´on con otra referencia. Por lo tanto, el programador tiene menor posibilidad de escribir c´odigo susceptible a errores que modifique un apuntador.

Java viene acompa˜nado de una biblioteca de herramientas para la creaci´on de ventanas, conocida como AWT, que se utiliza por apli- caciones y applets para la implementaci´on de interfaces gr´aficas de usuario.

Se encuentran disponibles muchos libros que describen el lenguaje Java (y que se han usado como referencias para las presentes notas) como son:

  1. The Java Programming Language. Ken Arnold and James Gosling. Addison-Wesley, 1996.
  2. Java Essentials for C and C++ Programmers. Barry Boone. Addison-Wesley, 1996.
  3. Core Java. Gary Cornell and Cay S. Horstsmann. Prentice-Hall, 1996.
  4. Java in a Nutshell. David Flanagan. O’Reilly, 1996.

Varios vienen acompa˜nados de un CD-ROM que contiene los ejemplos de los programas del libro y una copia del Java Development Kit (JDK) de Sun Microsystems. M´as aun, el JDK y su documentaci´on asociada pueden obtenerse en forma gratuita en el sitio ftp.javasoft.com, mantenido por JavaSoft, que es una subsidiaria de Sun Microsystems.

El JDK consiste de un compilador, un int´erprete (JVM o Java Vir- tual machine), y las bibliotecas de clases del sistema. Existen varias ver- siones de JDK para los m´as populares y conocidos sistemas operativos (MS-Windows, Linux, Solaris, MacOS System, etc.). Para informaci´on sobre nuevos desarrollos sobre JDK puede hallarse en la p´agina de JavaSoft, en: http://www.javasoft.com y http://www.sun.com.

Cap´ıtulo 2

Programaci´on B´asica en Java

2.1. Codificaci´on Java

Un programa en Java consiste de una serie de declaraciones de clases e interfaces, cada una de las cuales se compone de declaraciones de m´etodos y variables. Estas declaraciones se presentan formando un texto o c´odigo que es almacenado en un archivo fuente. Aun cuando las declaraciones de varias clases y/o interfaces pueden ser almacenadas en el mismo archivo fuente, t´ıpicamente cada declaraci´on se almacena en un archivo separado. Esto no se debe solo a preferencia, sino que tambi´en se relaciona con la forma en que las clases de Java se cargan cuando un programa se ejecuta.

2.1.1. Archivos .java

Los archivos fuente siempre tienen nombres con la terminaci´on .java. La primera parte del nombre del archivo es el nombre de la clase o interfaz declarada en el propio archivo. Por ejemplo, una clase Test se almacenar´ıa en un archivo Test.java. Si un archivo contiene la declaraci´on de m´as de una clase o interfaz, el archivo debe ser nombrado a partir de una de ellas, la cual debe ser la ´unica clase o interfaz p´ublica (public) en el archivo.

2.1.2. Comentarios

Los comentarios en Java tienen tres formas:

// Este es un comentario de una sola linea /* Este es un comentario multilinea */

@deprecated No sera disponible en siguientes versiones

Idealmente, @deprecated debe seguirse de una etiqueta @see que diri- ja al lector al punto de reemplazo. Esta etiqueta es adicionalmente reconocida por el compilador de Java, lo que genera un mensaje de advertencia (warning) si el c´odigo se utiliza.

@exception. Provee de informaci´on sobre las excepciones que pueden arrojarse a partir de un m´etodo. Un nombre de excepci´on puede apare- cer despu´es de la etiqueta seguida de un comentario de texto.

@exception IndexOutOfBoundsException Intento de accesar un elemento invalido

Un comentario para documentaci´on puede contener varias etiquetas @exception.

@param. Provee informaci´on sobre par´ametros de m´etodos y construc- tores. La etiqueta es seguida del nombre del par´ametro y de un co- mentario:

@param size Tamano de una estructura de datos

Estas etiquetas solo deben aparecer en comentarios precediendo m´eto- dos y constructores. Idealmente, debe haber una etiqueta por cada par´ametro, present´andose en el mismo orden de los par´ametros.

@return. Documenta el valor de retorno de un m´etodo.

@return El indice de un elemento identificado

El comentario es texto simple. Un comentario para documentaci´on debe solo contener una etiqueta @return, ya que solo puede haber un solo valor de retorno.

@see. Provee una referencia cruzada a otra clase, interfaz, m´etodo, variable o URL. Las siguientes son referencias v´alidas:

@see java.lang.Integer @see Integer @see Integer#intValue @see Integer#getInteger(String) @see Vease aqui para mayor informacion

Las clases e interfaces pueden ser referenciadas tanto por su nom- bre como por el nombre completo del paquete al que pertenecen. Las variables y m´etodos miembro pueden referenciarse mediante a˜nadir su nombre al nombre de la clase siguiendo el s´ımbolo #. Los URLs pueden aparecer si se hace un formato utilizando las etiquetas ... de HTML. M´ultiples etiquetas @see pueden aparecer en el mismo comen- tario.

@since. Se usa para establecer cu´ando una caracter´ıstica particular fue incluida (por ejemplo, desde cuando se ha hecho disponible). La etiqueta se sigue por un texto dando la informaci´on requerida:

@since JDK1.

@version. Se utiliza para dar informaci´on sobre la versi´on de la re- visi´on actual del c´odigo siendo comentado. El formato para la infor- maci´on sobre la versi´on no est´a especificada, y se deja al programador. Una convenci´on no oficial que se est´a utilizando cada vez m´as es aqu´ella en que el n´umero de la versi´on se sigue por la fecha de liberaci´on (re- lease date):

@version 1.2 20.8.

Solo una etiqueta de versi´on puede aparecer dentro de un comentario.

El texto incluido en un comentario para documentaci´on puede tambi´en marcarse con etiquetas HTML usadas para controlar la apariencia del tex- to, incluyendo ... (que delimita el texto utilizando la letra para c´odigo de programaci´on), y

(que indica el comienzo de un nuevo p´arrafo, y que se utiliza frecuentemente tambi´en como delimitador de la for- ma

...

). Cons´ultese libros sobre HTML para detalles referentes a la notaci´on de ese lenguaje.

La siguiente declaraci´on de una clase ilustra el uso de los comentarios para documentaci´on:

2.2. Identificadores

Un identificador (o simplemente un nombre) en Java es b´asicamente una se- cuencia de caracteres alfab´eticos o d´ıgitos que comienza con un caracter alfab´etico. Los identificadores pueden incluir tambi´en el subrayado (underscore: ) y $ (aun cuando $ no debe ser utilizado en c´odigo normal).

Ejemplos son: result, PI, xyz123, unNombreMuyLargoQueResultaDificilDeEscribir Los identificadores no pueden incluir espacios ni ser ninguna de las palabras clave o literales de Java, ya que tales palabras clave o literales tienen un significado particular dentro del lenguaje. Estas son:

abstract default implements protected throws boolean do import public transient break double instanceof return try byte else int short void case extends interface static volatile catch final long super while char finally native switch class float new synchronized const for package this continue if private throw

Algunos compiladores de Java tambi´en reconocen const y goto como palabras clave o reservadas. Adem´as, unos cuantos valores literales tienen nombres que deben considerarse tambi´en como reservados. Estos son true, false y null.

2.3. Valores

Los valores en Java pueden ser de los siguientes tipos: N´umeros enteros: int y long N´umeros de punto flotante: float y double Valores booleanos: boolean Caracteres: char Cadenas de caracteres: String Referencia nula: null Un valor puede ser utilizado en cualquier expresi´on donde su uso sea del tipo correcto.

2.3.1. Valores enteros

Los valores decimales de tipo int (32 bits) pueden escribirse como sigue: 0, 123, -456, 555665, 2354545, - Los valores octales de tipo int son precedidos por un cero ( 0 ), seguido por d´ıgitos en el rango de 0 a 7:

00, 0123, 0777, -045233, 023232, - Los valores hexadecimales del tipo int se preceden por 0x o 0X. Los d´ıgitos hexadecimales pueden representarse por cifras del 0 al 9 y de A a F (o a a f):

0x0, 0X12F, -0xffed, 0XFFFF, 0x12def1, 0xff Los valores de tipo long (64 bits) se denotan por a˜nadirles una L o l a cualquier representaci´on de un entero:

0L, 0l, 1223434545L, 0xffeeL, 077L, -34543543l, -045l, -0XC0B0L

2.3.2. Valores de punto flotante

La representaci´on de n´umeros de punto flotante incluyen un punto decimal. Por defecto, todo n´umero con punto decimal se considera de tipo double:

1.2345, 1234.432353, 0.1, 3.4, .3, 1., -23. S´olo si el n´umero cuenta con el sufijo F o f ser´a de tipo float: 1.23f, 2.34F, 0f, .2F, -4.5687F, -4423.223f

2.3.5. Valores de cadenas de caracteres

Los valores de cadenas de caracter se encierran en comillas dobles, y se almace- nan como objetos String cuando el programa se ejecuta. Pueden incluir caracteres especiales (com´unmente, la l´ınea aparte):

"Esta es una cadena", "Hola Mundo\n", "Uno\tDos\tTres"

2.3.6. Valor nulo

Este valor aparece simplemente como null, y como los valores booleanos, se considera efectivamente como una palabra reservada.

2.4. Tipos

Un tipo es un nombre que representa un conjunto de valores. Java tiene dos categor´ıas de tipos: tipos primitivos y tipos de referencia. Por cada tipo hay un conjunto de operadores para los valores de tal tipo (por ejemplo, +, - , *, etc.).

Java es un lenguaje fuertemente tipificado, lo que significa que toda expresi´on, valor y objeto debe tener un tipo, y que el uso de tipos debe ser consistente. El com- pilador de Java refuerza el uso correcto de tipos mediante una rigurosa verificaci´on de tipos.

2.4.1. Tipos Primitivos

Los tipos primitivos reflejan los tipos b´asicos que se soportan directamente por el procesador de una computadora t´ıpica, haci´endolos los tipos m´as eficientes a ser usados. Las operaciones sobre estos tipos usualmente se mapean directamente a instrucciones del procesador. Dicho eso, Java define cuidadosamente una repre- sentaci´on est´andar para cada uno de estos tipos, de tal modo que se comporten exactamente igual en cualquier m´aquina que soporte la M´aquina Virtual de Java (Java Virtual Machine, o JVM). La mayor´ıa de los procesadores actuales consideran tales representaciones directamente. Los tipos primitivos se representan como sigue:

boolean. El tipo boolean simplemente tiene dos valores: true y false. byte. Enteros de 8 bits signados con complemento a 2, con rango de valores entre -128 y 127. short. Enteros de 16 bits signados con complemento a 2, con rango de valores entre -32768 y 32767. int. Enteros de 32 bits signados con complemento a 2, con rango de valores entre -2147483648 y 2147483647. long. Enteros de 64 bits signados con complemento a 2, con rango de valores entre -9223372036854775808 y 9223372036854775807. char. Valores de 16 bits no signados, de 0 a 65535, representando caracteres Unicode. float. Valores de punto flotante de precisi´on sencilla, con formato IEEE 754 de 32 bits, con un rango de valores entre 1.40239846e-45 y 3.40282347e+38. double. Valores de punto flotante de doble precisi´on, con formato IEEE 754 de 64 bits, con un rango de valores entre 4.9406564581246544e-324 y 1.79769313486231570e+ Hay otros tres valores especiales de tipo flotante: “infinito positivo” (positive infinity), “infinito negativo” (negative infinity) y “no un n´umero” (not a number, o NaN). Estos se generan cuando una operaci´on de punto flotante sobrepasa la capacidad de la computadora (overflow), u ocurre una divisi´on entre cero.