java2
San Sebastián, Enero 2000
- Aprenda Java como si estuviera en primero
- Javier García de Jalón • José Ignacio Rodríguez • Iñigo Mingo • Aitor Imaz
- Alfonso Brazález • Alberto Larzabal • Jesús Calleja • Jon García
Aprenda Java como si estuviera en primero
- Colección: “Aprenda …, como si estuviera en primero”
- Autores: Javier García de Jalón, José Ignacio Rodríguez, Íñigo Mingo, Aitor Imaz, Alfonso Brazález, Alberto Larzabal, Jesús Calleja, Jon García
Índice
- Copyright © 2000 TECNUN
- Autores: Javier García de Jalón, José Ignacio Rodríguez, Íñigo Mingo, Aitor Imaz, Alfonso Brazalez, Alberto Larzabal, Jesús Calleja, Jon García
- Derechos reservados: Prohibida la reproducción total o parcial con fines comerciales; permitida la impresión y utilización con fines personales
- Índice de contenidos:
- 1. INTRODUCCIÓN A JAVA
- 1.1 QUÉ ES JAVA 2
- 1.2 EL ENTORNO DE DESARROLLO DE JAVA
- 1.2.1 El compilador de Java
- 1.2.2 La Java Virtual Machine
- 1.2.3 Las variables PATH y CLASSPATH
- 1.3 UN EJEMPLO COMPLETO COMENTADO
- 1.3.1 Clase Ejemplo1
- 1.3.2 Clase Geometria
- 1.3.3 Clase Rectangulo
- 1.3.4 Clase Circulo
- 1.3.5 Interface Dibujable
- 1.3.6 Clase RectanguloGrafico
- 1.3.7 Clase CirculoGrafico
- 1.3.8 Clase PanelDibujo
- 1.3.9 Clase VentanaCerrable
- 1.3.10 Consideraciones adicionales sobre el Ejemplo1
- 1.4 NOMENCLATURA HABITUAL EN LA PROGRAMACIÓN EN JAVA
- 1.5 ESTRUCTURA GENERAL DE UN PROGRAMA JAVA
- 1.5.1 Concepto de Clase
- 1.5.2 Herencia
- 1.5.3 Concepto de Interface
- 1.5.4 Concepto de Package
- 1.5.5 La jerarquía de clases de Java (API)
- 2. PROGRAMACIÓN EN JAVA
- 2.1 VARIABLES
- 2.1.1 Nombres de Variables
- 2.1.2 Tipos Primitivos de Variables
- 2.1.3 Cómo se definen e inicializan las variables
- 2.1.4 Visibilidad y vida de las variables
- 2.1.5 Casos especiales: Clases BigInteger y BigDecimal
- 2.2 OPERADORES DE JAVA
- 2.2.1 Operadores aritméticos
- 2.2.2 Operadores de asignación
- 2.2.3 Operadores unarios
- 2.2.4 Operador instanceof
- 2.2.5 Operador condicional ?:
- 2.2.6 Operadores incrementales
- 2.2.7 Operadores relacionales
- 2.2.8 Operadores lógicos
- 2.2.9 Operador de concatenación de cadenas de caracteres (+)
- 2.2.10 Operadores que actúan a nivel de bits
- 2.2.11 Precedencia de operadores
- 2.3 ESTRUCTURAS DE PROGRAMACIÓN
- 2.3.1 Sentencias o expresiones
- 2.3.2 Comentarios
- 2.3.3 Bifurcaciones
- 2.3.3.1 Bifurcación if
- 2.3.3.2 Bifurcación if else
- 2.3.3.3 Bifurcación if elseif else
- 2.3.3.4 Sentencia switch
- 2.3.4 Bucles
- 2.3.4.1 Bucle while
- 2.3.4.2 Bucle for
- 2.3.4.3 Bucle do while
- 2.3.4.4 Sentencias break y continue
- 2.3.4.5 Sentencias break y continue con etiquetas
- 2.3.4.6 Sentencia return
- 2.3.4.7 Bloque try {…} catch {…} finally {…}
- 2.1 VARIABLES
- 3. CLASES EN JAVA
- 3.1 CONCEPTOS BÁSICOS
- 3.1.1 Concepto de Clase
- 3.1.2 Concepto de Interface
- 3.2 EJEMPLO DE DEFINICIÓN DE UNA CLASE
- 3.3 VARIABLES MIEMBRO
- 3.3.1 Variables miembro de objeto
- 3.3.2 Variables miembro de clase (static)
- 3.4 VARIABLES FINALES
- 3.5 MÉTODOS (FUNCIONES MIEMBRO)
- 3.5.1 Métodos de objeto
- 3.5.2 Métodos sobrecargados (overloaded)
- 3.5.3 Paso de argumentos a métodos
- 3.5.4 Métodos de clase (static)
- 3.5.5 Constructores
- 3.5.6 Inicializadores
- 3.5.6.1 Inicializadores static
- 3.5.6.2 Inicializadores de objeto
- 3.5.7 Resumen del proceso de creación de un objeto
- 3.5.8 Destrucción de objetos (liberación de memoria)
- 3.5.9 Finalizadores
- 3.6 PACKAGES
- 3.6.1 Qué es un package
- 3.6.2 Cómo funcionan los packages
- 3.7 HERENCIA
- 3.7.1 Concepto de herencia
- 3.7.2 La clase Object
- 3.7.3 Redefinición de métodos heredados
- 3.7.4 Clases y métodos abstractos
- 3.7.5 Constructores en clases derivadas
- 3.8 CLASES Y MÉTODOS FINALES
- 3.9 INTERFACES
- 3.9.1 Concepto de interface
- 3.9.2 Definición de interfaces
- 3.9.3 Herencia en interfaces
- 3.9.4 Utilización de interfaces
- 3.10 CLASES INTERNAS
- 3.10.1 Clases e interfaces internas static
- 3.10.2 Clases internas miembro (no static)
- 3.10.3 Clases internas locales
- 3.10.4 Clases anónimas
- 3.11 PERMISOS DE ACCESO EN JAVA
- 3.11.1 Accesibilidad de los packages
- 3.11.2 Accesibilidad de clases o interfaces
- 3.11.3 Accesibilidad de las variables y métodos miembros de una clase:
- 3.12 TRANSFORMACIONES DE TIPO: CASTING
- 3.12.1 Conversión de tipos primitivos
- 3.13 POLIMORFISMO
- 3.13.1 Conversión de objetos
- 3.1 CONCEPTOS BÁSICOS
- 4. CLASES DE UTILIDAD
- 4.1 ARRAYS
- 4.1.1 Arrays bidimensionales
- 4.2 CLASES STRING Y STRINGBUFFER
- 4.2.1 Métodos de la clase String
- 4.2.2 Métodos de la clase StringBuffer
- 4.3 WRAPPERS
- 4.3.1 Clase Double
- 4.3.2 Clase Integer
- 4.4 CLASE MATH
- 4.5 COLECCIONES
- 4.5.1 Clase Vector
- 4.5.2 Interface Enumeration
- 4.5.3 Clase Hashtable
- 4.5.4 El Collections Framework de Java 1.2
- 4.5.4.1 Elementos del Java Collections Framework
- 4.5.4.2 Interface Collection
- 4.5.4.3 Interfaces Iterator y ListIterator
- 4.5.4.4 Interfaces Comparable y Comparator
- 4.5.4.5 Sets y SortedSets
- 4.5.4.6 Listas
- 4.5.4.7 Maps y SortedMaps
- 4.5.4.8 Algoritmos y otras características especiales: Clases Collections y Arrays
- 4.5.4.9 Desarrollo de clases por el usuario: clases abstract
- 4.5.4.10 Interfaces Cloneable y Serializable
- 4.6 OTRAS CLASES DEL PACKAGE JAVA.UTIL
- 4.6.1 Clase Date
- 4.6.2 Clases Calendar y GregorianCalendar
- 4.6.3 Clases DateFormat y SimpleDateFormat
- 4.6.4 Clases TimeZone y SimpleTimeZone
- 4.1 ARRAYS
- 5. EL AWT (ABSTRACT WINDOWS TOOLKIT)
- 5.1 QUÉ ES EL AWT
- 5.1.1 Creación de una Interface Gráfica de Usuario
- 5.1.2 Objetos “event source” y objetos “event listener”
- 5.1.3 Proceso a seguir para crear una aplicación interactiva (orientada a eventos)
- 5.1.4 Componentes y eventos soportados por el AWT de Java
- 5.1.4.1 Jerarquía de Componentes
- 5.1.4.2 Jerarquía de eventos
- 5.1.4.3 Relación entre Componentes y Eventos
- 5.1.5 Interfaces Listener
- 5.1.6 Clases Adapter
- 5.2 COMPONENTES Y EVENTOS
- 5.2.1 Clase Component
- 5.2.2 Clases EventObject y AWTEvent
- 5.2.3 Clase ComponentEvent
- 5.2.4 Clases InputEvent y MouseEvent
- 5.2.5 Clase FocusEvent
- 5.2.6 Clase Container
- 5.2.7 Clase ContainerEvent
- 5.2.8 Clase Window
- 5.2.9 Clase WindowEvent
- 5.2.10 Clase Frame
- 5.2.11 Clase Dialog
- 5.2.12 Clase FileDialog
- 5.2.13 Clase Panel
- 5.2.14 Clase Button
- 5.2.15 Clase ActionEvent
- 5.2.16 Clase Canvas
- 5.2.17 Component Checkbox y clase CheckboxGroup
- 5.2.18 Clase ItemEvent
- 5.2.19 Clase Choice
- 5.2.20 Clase Label
- 5.2.21 Clase List
- 5.2.22 Clase Scrollbar
- 5.2.23 Clase AdjustmentEvent
- 5.2.24 Clase ScrollPane
- 5.2.25 Clases TextArea y TextField
- 5.2.26 Clase TextEvent
- 5.2.27 Clase KeyEvent
- 5.3 MENUS
- 5.3.1 Clase MenuShortcut
- 5.3.2 Clase MenuBar
- 5.3.3 Clase Menu
- 5.3.4 Clase MenuItem
- 5.3.5 Clase CheckboxMenuItem
- 5.3.6 Menús pop-up
- 5.4 LAYOUT MANAGERS
- 5.4.1 Concepto y Ejemplos de LayoutsManagers
- 5.4.2 Ideas generales sobre los LayoutManagers
- 5.4.3 FlowLayout
- 5.4.4 BorderLayout
- 5.4.5 GridLayout
- 5.4.6 CardLayout
- 5.4.7 GridBagLayout
- 5.5 GRÁFICOS, TEXTO E IMÁGENES
- 5.5.1 Capacidades gráficas del AWT: Métodos paint(), repaint() y update()
- 5.5.1.1 Método paint(Graphics g)
- 5.5.1.2 Método update(Graphics g)
- 5.5.1.3 Método repaint()
- 5.5.2 Clase Graphics
- 5.5.3 Primitivas gráficas
- 5.5.4 Clases Graphics y Font
- 5.5.5 Clase FontMetrics
- 5.5.6 Clase Color
- 5.5.7 Imágenes
- 5.5.1 Capacidades gráficas del AWT: Métodos paint(), repaint() y update()
- 5.6 ANIMACIONES
- 5.6.1 Eliminación del parpadeo o flicker redefiniendo el método update()
- 5.6.2 Técnica del doble buffer
- 5.1 QUÉ ES EL AWT
- 6. THREADS: PROGRAMAS MULTITAREA
- 6.1 CREACIÓN DE THREADS
- 6.1.1 Creación de threads derivando de la clase Thread
- 6.1.2 Creación de threads implementando la interface Runnable
- 6.2 CICLO DE VIDA DE UN THREAD
- 6.2.1 Ejecución de un nuevo thread
- 6.2.2 Detener un Thread temporalmente: Runnable - Not Runnable
- 6.2.3 Finalizar un Thread
- 6.3 SINCRONIZACIÓN
- 6.4 PRIORIDADES
- 6.5 GRUPOS DE THREADS
- 6.1 CREACIÓN DE THREADS
- 7. APPLETS
- 7.1 QUÉ ES UN APPLET
- 7.1.1 Algunas características de las applets
- 7.1.2 Métodos que controlan la ejecución de un applet
- 7.1.2.1 Método init()
- 7.1.2.2 Método start()
- 7.1.2.3 Método stop()
- 7.1.2.4 Método destroy()
- 7.1.3 Métodos para dibujar el applet
- 7.2 CÓMO INCLUIR UN APPLET EN UNA PÁGINA HTML
- 7.3 PASO DE PARÁMETROS A UN APPLET
- 7.4 CARGA DE APPLETS
- 7.4.1 Localización de ficheros
- 7.4.2 Archivos JAR (Java Archives)
- 7.5 COMUNICACIÓN DEL APPLET CON EL BROWSER
- 7.6 SONIDOS EN APPLETS
- 7.7 IMÁGENES EN APPLETS
- 7.8 OBTENCIÓN DE LAS PROPIEDADES DEL SISTEMA
- 7.9 UTILIZACIÓN DE THREADS EN APPLETS
- 7.10 APPLETS QUE TAMBIÉN SON APLICACIONES
- 7.1 QUÉ ES UN APPLET
- 8. EXCEPCIONES
- 8.1 EXCEPCIONES ESTÁNDAR DE JAVA
- 8.2 LANZAR UNA EXCEPTION
- 8.3 CAPTURAR UNA EXCEPTION
- 8.3.1 Bloques try y catch
- 8.3.2 Relanzar una Exception
- 8.3.3 Método finally {…}
- 8.4 CREAR NUEVAS EXCEPCIONES
- 8.5 HERENCIA DE CLASES Y TRATAMIENTO DE EXCEPCIONES
- 9. ENTRADA/SALIDA DE DATOS EN JAVA 1.1
- 9.1 CLASES DE JAVA PARA LECTURA Y ESCRITURA DE DATOS
- 9.1.1 Los nombres de las clases de java.io
- 9.1.2 Clases que indican el origen o destino de los datos
- 9.1.3 Clases que añaden características
- 9.2 ENTRADA Y SALIDA ESTÁNDAR (TECLADO Y PANTALLA)
- 9.2.1 Salida de texto y variables por pantalla
- 9.2.2 Lectura desde teclado
- 9.2.3 Método práctico para leer desde teclado
- 9.3 LECTURA Y ESCRITURA DE ARCHIVOS
- 9.3.1 Clases File y FileDialog
- 9.3.2 Lectura de archivos de texto
- 9.3.3 Escritura de archivos de texto
- 9.3.4 Archivos que no son de texto
- 9.4 SERIALIZACIÓN
- 9.4.1 Control de la serialización
- 9.4.2 Externalizable
- 9.5 LECTURA DE UN ARCHIVO EN UN SERVIDOR DE INTERNET
- 9.1 CLASES DE JAVA PARA LECTURA Y ESCRITURA DE DATOS
- OTRAS CAPACIDADES DE JAVA
- 10.1 JAVA FOUNDATION CLASSES (JFC) Y JAVA 2D
- 10.2 JAVA MEDIA FRAMEWORK (JMF)
- 10.3 JAVA 3D
- 10.4 JAVABEANS
- 10.5 JAVA EN LA RED
- 10.6 JAVA EN EL SERVIDOR: SERVLETS
- 10.7 RMI Y JAVA IDL
- 10.8 SEGURIDAD EN JAVA
- 10.9 ACCESO A BASES DE DATOS (JDBC)
- 10.10 JAVA NATIVE INTERFACE (JNI)
- OTRAS CAPACIDADES DE JAVA
- 1. INTRODUCCIÓN A JAVA
Introducción a Java
- Java surgió en 1991 por ingenieros de Sun Microsystems para electrodomésticos, aiming for:
- Sencillez y código reducido.
- Independencia de la CPU.
- Código "neutro" ejecutado en la Java Virtual Machine (JVM).
- Lema: "Write Once, Run Everywhere”.
- Introducción para computadores a finales de 1995, revolucionando Internet con Netscape Navigator 2.0.
- Java 1.1 (1997) y Java 1.2 (Java 2, 1998) mejoraron el lenguaje.
- Las aplicaciones en Java se basan en clases preexistentes (API).
- Java integra threads, ejecución remota, componentes, seguridad y acceso a bases de datos.
- Objetivo: ser el nexo universal para conectar usuarios con información.
- Java es un lenguaje completo (macro-lenguaje) con gran API.
- Aprendizaje iterativo: visión general refinada en sucesivas interacciones.
- Sun describe Java como:
- Simple
- Orientado a objetos
- Distribuido
- Interpretado
- Robusto
- Seguro
- De arquitectura neutra
- Portable
- De altas prestaciones
- Multitarea
- Dinámico
Qué es Java 2
- Java 2 (antes Java 1.2 o JDK 1.2): Tercera versión importante de Java.
- Extensiones y ampliaciones, casi lo mismo que trabajar con Java 1.1.
- Ventajas de Java:
- Ejecución como aplicación independiente (Stand-alone Application).
- Ejecución como applet (en navegadores web).
- Ejecución como servlet (en servidores de Internet, sin interfaz gráfica)
- Java facilita el desarrollo de arquitecturas cliente-servidor y aplicaciones distribuidas.
El Entorno de Desarrollo de Java
- Java(tm) Development Kit (JDK): Conjunto de programas y librerías gratuitas de Sun.
- Permite desarrollar, compilar y ejecutar programas.
- Incluye un Debugger.
- Java Runtime Environment (JRE): Versión reducida del JDK; solo ejecuta código Java.
- Integrated Development Environment (IDEs):
- Permite escribir, compilar y ejecutar código Java en una misma aplicación.
- Algunos incluyen Debug gráfico.
- Inconvenientes: fallos de compatibilidad y ficheros de mayor tamaño.
El Compilador de Java
- Herramienta del JDK que analiza la sintaxis de ficheros fuente Java (*.java).
- Genera ficheros compilados (*.class) si no hay errores.
- Muestra líneas erróneas en caso contrario.
- El compilador de Sun (javac.exe) tiene numerosas opciones; consultar la documentación del JDK utilizado.
La Java Virtual Machine (JVM)
- Código "neutro" para ejecutarse en cualquier máquina.
- JVM interpreta el código neutro convirtiéndolo a código particular de la CPU.
- JVM es el intérprete de Java; ejecuta "bytecodes" (ficheros *.class).
- Opción de usar JIT (Just-In-Time Compiler) para mejorar la velocidad de ejecución.
Las variables PATH y CLASSPATH
- PATH: variable del sistema operativo que indica dónde buscar los ejecutables (java.exe y javac.exe).
- CLASSPATH: variable de entorno que determina dónde buscar las clases de Java (API) y las clases de usuario.
- Puede incluir rutas de directorios o ficheros *.zip o *.jar.
- A partir de la versión 1.1.4 del JDK no es necesario indicar esta variable, salvo que se desee añadir conjuntos de clases de usuario que no vengan con dicho JDK.
- Se pueden indicar estas variables creando un fichero batch (*.bat) o modificando Autoexec.bat (Windows 95/98) o las variables de entorno del sistema (Windows NT).
- También se puede utilizar la opción –classpath al llamar al compilador o al intérprete.
- Al compilar, si filename.java es más antiguo que filename.class, no se produce un nuevo fichero filename.class (solo válido para clases public).
Un Ejemplo Completo Comentado
- Este ejemplo contiene características importantes de Java (clases, herencia, interfaces, gráficos, polimorfismo, etc.).
Clase Ejemplo1
- Programa principal que utiliza la clase Geometría y sus clases derivadas.
- Muestra la estructura general de un programa Java.
Clase Geometria
- Clase base de la jerarquía de clases utilizada en el ejemplo.
- Declara métodos para calcular perímetro y área, pero no los define, ya que es una clase abstracta.
Clase Rectangulo
- Deriva de Geometria y define variables miembro para representar las coordenadas de dos vértices opuestos del rectángulo.
- Implementa los métodos abstractos perimetro() y area() de la clase Geometria.
Clase Circulo
- Deriva de Geometria y define variables miembro para representar las coordenadas del centro y el radio del círculo.
- Implementa los métodos abstractos perimetro() y area() de la clase Geometria.
- Incluye métodos para comparar círculos.
Interface Dibujable
- Define los métodos setPosicion() y dibujar() que deben implementar las clases que deseen ser dibujables en pantalla.
- Permite establecer pautas o modos de funcionamiento similares para clases que pueden estar o no relacionadas mediante herencia.
Clase RectanguloGrafico
- Deriva de Rectangulo e implementa la interface Dibujable.
- Añade una variable miembro para representar el color del rectángulo.
- Implementa los métodos dibujar() y setPosicion() de la interface Dibujable.
Clase CirculoGrafico
- Deriva de Circulo e implementa la interface Dibujable.
- Añade una variable miembro para representar el color del círculo.
- Implementa los métodos dibujar() y setPosicion() de la interface Dibujable.
Clase PanelDibujo
- Deriva de la clase Panel y redefine el método paint() para dibujar los objetos gráficos almacenados en una lista.
- Utiliza polimorfismo para dibujar objetos de diferentes clases de forma unificada.
Clase VentanaCerrable
- Deriva de la clase Frame e implementa la interface WindowListener.
- Añade la capacidad de cerrar la ventana respondiendo a los eventos de cierre.
Nomenclatura Habitual en la Programación en Java
- Sensibilidad a mayúsculas y minúsculas: masa, Masa y MASA son variables diferentes.
- Nombres en minúsculas, excepto en clases, interfaces y constantes.
- Nombres compuestos: concatenación de palabras, con la primera letra de cada palabra en mayúscula (Ej: elMayor(), VentanaCerrable).
- Clases e interfaces: comienzan por mayúscula (Ej: Geometria, Rectangulo).
- Objetos, métodos y variables miembro: comienzan por minúscula (Ej: main(), dibujar(), numRectangulos).
- Variables finales (constantes): se definen con mayúsculas (Ej: PI).
Estructura General de un Programa Java
- Clase que contiene el programa principal (main()) y clases de usuario utilizadas por el programa principal.
- Ficheros fuente: extensión *.java; ficheros compilados: extensión *.class.
- Un fichero fuente puede contener más de una clase, pero solo una puede ser public.
- El nombre del fichero fuente debe coincidir con el de la clase public (con extensión *.java).
- Las clases de Java se agrupan en packages, que son librerías de clases.
- Si las clases no se definen como pertenecientes a un package, se utiliza un package por defecto (default) que es el directorio activo.
Concepto de Clase
- Agrupación de datos (variables o campos) y funciones (métodos) que operan sobre esos datos.
- A los datos y funciones pertenecientes a una clase se les denomina variables y métodos o funciones miembro.
- La programación orientada a objetos se basa en la programación de clases.
- Un programa se construye a partir de un conjunto de clases.
- Una vez definida e implementada una clase, es posible declarar elementos de esta clase de modo similar a como se declaran las variables del lenguaje.
- Los elementos declarados de una clase se denominan objetos de la clase.
- De una única clase se pueden declarar o crear numerosos objetos.
- La clase es lo genérico: es el patrón o modelo para crear objetos.
- Cada objeto tiene sus propias copias de las variables miembro, con sus propios valores, en general distintos de los demás objetos de la clase.
- Las clases pueden tener variables static, que son propias de la clase y no de cada objeto.
Herencia
- Permite definir nuevas clases basadas en clases existentes, facilitando la reutilización de código.
- Si una clase deriva de otra (extends) hereda todas sus variables y métodos.
- La clase derivada puede añadir nuevas variables y métodos y/o redefinir las variables y métodos heredados.
- En Java, a diferencia de otros lenguajes orientados a objetos, una clase sólo puede derivar de una única clase, con lo cual no es posible realizar herencia múltiple en base a clases.
- Sin embargo es posible “simular” la herencia múltiple en base a las interfaces.
Concepto de Interface
- Una interface es un conjunto de declaraciones de funciones.
- Si una clase implementa (implements) una interface, debe definir todas las funciones especificadas por la interface.
- Una clase puede implementar más de una interface, representando una forma alternativa de la herencia múltiple.
- A su vez, una interface puede derivar de otra o incluso de varias interfaces, en cuyo caso incorpora todos los métodos de las interfaces de las que deriva.
Concepto de Package
- Un package es una agrupación de clases.
- Existen una serie de packages incluidos en el lenguaje (ver jerarquía de clases que aparece en el API de Java).
- Además el usuario puede crear sus propios packages.
- Lo habitual es juntar en packages las clases que estén relacionadas.
- Todas las clases que formen parte de un package deben estar en el mismo directorio.
La jerarquía de clases de Java (API)
- Durante la generación de código en Java, es recomendable y casi necesario tener siempre a la vista la documentación on-line del API de Java 1.1 ó Java 1.2.
- En dicha documentación es posible ver tanto la jerarquía de clases, es decir la relación de herencia entre clases, como la información de los distintos packages que componen las librerías base de Java.
- Es importante distinguir entre lo que significa herencia y package.
- Un package es una agrupación arbitraria de clases, una forma de organizar las clases.
- La herencia sin embargo consiste en crear nuevas clases en base a otras ya existentes.
- Las clases incluidas en un package no derivan por lo general de una única clase.
- En la documentación on-line se presentan ambas visiones: “Package Index” y “Class Hierarchy”, tanto en Java 1.1 como en Java 1.2, con pequeñas variantes.
- Hay que resaltar una vez más el hecho de que todas las clases en Java son derivadas de la clase java.lang.Object, por lo que heredan todos los métodos y variables de ésta.
- Si se selecciona una clase en particular, la documentación muestra una descripción detallada de todos los métodos y variables de la clase.
- A su vez muestra su herencia completa (partiendo de la clase java.lang.Object).
Programación en Java
- Características generales de Java como lenguaje de programación algorítmico.
- Similitud con C/C++: Java está inspirado en estos lenguajes.
- Brevedad: Se asume que el lector conoce otros lenguajes de programación.
Variables
- Una variable es un nombre que contiene un valor que puede cambiar.
- Tipos principales de variables:
- Tipos primitivos: valor único (entero, punto flotante, carácter, booleano).
- Variables referencia: referencia/nombre de información compleja (arrays, objetos).
- Según su papel en el programa:
- Variables miembro de una clase: se definen en la clase, fuera de cualquier método.
- Variables locales: se definen dentro de un método o bloque.
Nombres de Variables
- Pueden ser cualquier conjunto de caracteres numéricos y alfanuméricos, salvo caracteres especiales y palabras reservadas.
Tipos Primitivos de Variables
- Variables boolean, char, byte, short, int, long, float y double.
- Características importantes:
- boolean no es numérico; solo admite true o false.
- char contiene caracteres UNICODE (16 bits por carácter).
- byte, short, int y long son enteros (positivos o negativos) con distintos rangos.
- float y double son números reales con 6-7 y 15 cifras decimales, respectivamente.
- void indica ausencia de tipo.
- Tipos perfectamente definidos en todas las plataformas.
- Existen extensiones para precisión extendida (80 bits) en procesadores Intel.
Cómo se definen e inicializan las variables
- Se especifica el tipo y el nombre.
- Las variables primitivas se inicializan a cero (salvo boolean y char).
- Las referencias se inicializan a null.
- Referencia vs objeto: la referencia indica dónde está guardado el objeto en memoria.
- Ejemplos de declaración e inicialización de variables:
java int x; // Se inicializa a 0 int y = 5; // Se inicializa a 5 MyClass unaRef; // Se inicializa a null unaRef = new MyClass(); // La referencia "apunta" al nuevo objeto MyClass segundaRef = unaRef; // Se inicializa al mismo valor que unaRef int [] vector; // Se inicializa a null vector = new int[10]; // Vector de 10 enteros, inicializados a 0 double [] v = {1.0, 2.65, 3.1}; MyClass [] lista=new MyClass[5]; // Se crea un vector de 5 referencias a objetos, inicializadas a null lista[0] = unaRef; lista[1] = new MyClass();
Visibilidad y vida de las variables
- Visibilidad (ámbito o scope): la parte de la aplicación donde la variable es accesible.
- Las variables miembro de una clase declaradas como
publicson accesibles a través del operador punto(.), - Las variables miembro declaradas como
privateno son accesibles directamente desde otras clases. - Funciones miembro: acceso directo a variables miembro (sin nombre de objeto).
- Los objetos son creados con
newy eliminados por el garbage collector.
Casos especiales: Clases BigInteger y BigDecimal
- Java 1.1: clases para operaciones aritméticas de alta precisión.
- Operaciones con métodos (add(), subtract(), divide(), etc.).
- BigInteger: almacena cualquier número entero sin perder información.
- BigDecimal: