Documentos de Académico
Documentos de Profesional
Documentos de Cultura
1- INTRODUCCION A JAVA
Codigo Bytecode – el resultad tras compilar un programa – codigo binario independiente
MVJ es un componente clave que permite que los programas escritos en Java se ejecuten
en cualquier dispositivo o sistema operativo que tenga una JVM instalada,
independientemente de las diferencias de hardware y software subyacentes.
Si se necesita usar el codigo nativo los compiladores just- in- time (JIT) traducen el
bytecode.
El sistema de ejecución Java soporta el enlace dinámico entre ficheros de clases locales y
aquéllos que son obtenidos a través de la red en tiempo de ejecución.
La liberación de memoria se ejecuta a través del proceso de recolección de basura
(Garbage Collector). Este proceso de recolección de basura es ejecutado de forma
automática y en segundo plano (background), aunque el programador puede invocarlo
directamente en el código. Este se activa cuando el numero de referencia es 0 en una
variable.
- El lenguaje:
No hay punteros
no pueden ser convertidos libremente de un tipo a otro
2- SINTAXIS
No struct pq no son sino tipos de datos compuestos que se asocian directamente con objetos.
Las clases e interfaces se organizan en ficheros con extensión “.java” que se compilan de forma
separada, formando lo que se denomina unidades de compilación
public: el método debe ser público ya que debe ser visible en todo el programa y desde el
exterior, para poder ser ejecutado por la MVJ.
static: indica que se aplica a toda la clase y no a objetos o instancias de la misma. Como este
método es el primero que se ejecuta, lo hace antes de que se haya creado ninguna instancia de
ninguna clase, de ahí su naturaleza static.
void: al ser el primer método en ejecutarse no puede devolver ningún valor, ya que no existe
código que pueda recibir ese valor.
args: el parámetro del método es un array de Strings, que se emplea para pasarle a la
aplicación parámetros mediante la línea de comandos
VARIABLES: (no globales)
1- Miembro o atributos:
2- Locales
3- Instancia – de objeto- Nombre_clase variable = new Constructor_clase(...);
// Variable de clase
static int contadorDeObjetos = 0;
// Variables de instancia
private int id;
private String nombre;
// Constructor
public EjemploVariables(String nombre) {
// Variable local
int contadorLocal = 0;
ARRAY:
. La clase define una serie de propiedades comunes a todos los objetos que pertenecen a ella
(atributos) y el conjunto de mensajes y funciones que pueden operar sobre dichos objetos
(métodos)
ATRIBUTOS
Fecha fecha_de_compra ;
METODOS
OBJETOS
1- Declarar el objeto: para ello se escribe el nombre de la clase a la que pertenece seguido del
nombre del objeto: INICIALIZAR
CONSTRUCTOR
class Cliente {
this(nombre, Cuenta.obtener_nuevo_numero( ) );
nombre_cliente = nombre;
numero_cuenta = num_cuenta;
compras_efectuadas = 1;
Observemos la aparición de la palabra “this”; aunque insistiremos en ella más adelante, por
ahora conviene saber que (entre otras funciones) actúa como sustituto del nombre del
constructor de una clase, y que por tanto la línea
this(nombre, Número_Cuenta.obtener_nuevo_numero( ) );
equivale a
Cliente(nombre, Número_Cuenta.obtener_nuevo_numero( ) )
POR COPIA O REFERENCIA
DESTRUCTOR
THIS
this(nombre, Número_Cuenta.obtener_nuevo_numero( ) );
PAQUETES
package nombre_paquete;
Hay que tener en cuenta que si en un mismo fichero fuente se escriben varias clases o
interfaces sólo uno de ellos puede ser declarado como público
Uso de un paquete:
Hay que tener en cuenta que el * sólo importa un paquete, no una jerarquía. Ejemplo: la
sentencia “import java. *; ” no importa todos los paquetes que cuelgan de “java”, como
java.lang, java.awt, etc
MODIFICADORES
DE ACCESO
La manera en que desde fuera de un objeto es posible referenciar a alguno de sus métodos o
atributos está.
1. public: estamos permitiendo que desde cualquier otra clase puedan referenciarlo
directamente.
nombre_instancia.nombre_atributo;
nombre_instancia.nombre_método(parámetros);
3. protected: los atributos o métodos así declarados son accesibles directamente sólo
desde la clase en que se definieron, de las subclases de ésta y las clases que se
encuentran dentro de su mismo paquete. Además, éste es el modificador por defecto,
es decir, el que adquiere un método o atributo cuando no especificamos cuál es su
modificador.
PARA ATRIBUTOS
1. static: un atributo declarado como static se asocia con la clase, de modo que toma un
mismo valor para todos los objetos de dicha clase
inicializador estático (static initializer), que son bloques de código utilizados para dar
valor a las variables estáticas de una clase.
static {
inicialización de variables estáticas;
}
2. final: las variables de este tipo no son en realidad variables, sino constantes, por lo que
deben inicializarse antes de poder ser referenciadas
PARA METODOS
1. static: identifica a un método de clase, es decir, que sólo puede acceder a variables de
clase (atributos static). Estos métodos se pueden ejecutar sin crear una instancia de la
clase. Por tanto, se invocan anteponiendo el nombre de la clase, no el de una instancia
2. final: un método de este tipo no puede ser sobreescrito por las subclases de la clase a
que pertenece. Sólo los métodos static pueden ser final
MAIN
Debido a que el método main se encuentra dentro de la clase, podría considerarse como un
método más, y desde el mismo realizar llamadas o utilizar los métodos y atributos de ésta. En
el caso de así hacerlo, al compilar el código obtendríamos sendos errores comunicándonos
que, debido a que el método main es static, sólo puede actuar sobre atributos y métodos
también estáticos.
PARAMETROS
Si son objetos q no son tipo simple clone no sirve y hay q redefinir el método
• Ver si la implementación que ofrece Object del método clone se adapta a nuestras
necesidades
HERENCIA
redefinición de un método, que consiste en permitir que una clase hija reescriba cualquier
método de la clase padre para adaptarlo a sus necesidades. Así, cuando invoquemos a un
método de un objeto el compilador lo buscará en la subclase a la que pertenezca y, si lo
encuentra en ella, lo ejecuta como allí se indique sin importar cómo lo ejecute ninguna de las
clases de nivel superior
a todas las clases heredan por defecto de una superclase denominada Object (paquete
java.lang)
hijo en padre- SI
padre en hijo- NO
eje: : todo mamífero es un animal, pero no todo animal es un mamífero.
LA PALABRA SUPER
super.atributo;
super.método(parámetros)
teniendo en cuenta que los demás constructores deberán invocar al que llama a super a través
de this para que al final se consiga dar valor a los atributos heredados
DE INTERFAZ
a existen dos mecanismos para llevar a cabo este tipo de herencia: las clases y métodos
abstractos y los interfaces.
se mantiene la restricción de que la clase hija sólo puede tener una clase padre.
No se pueden crear instancias de las clases abstractas directamente con el operador new, dado
que su implementación no está completamente definida
INTERFACES – si hay herecia multiple (Así por ejemplo, que una persona sea informático no le
impide ser jugador de baloncesto.)
el interfaz define un comportamiento, indica qué funciones deben desempeñar las clases que
pretendan heredar de él sin entrar en detalles de implementación, pues será cada clase
particular quien decida cómo quiere hacer las cosas.
.Una clase que hereda de un interfaz lo hace de manera similar a como si heredara
implementación de una clase, pero sustituyendo la palabra reservada extends por la palabra
reservada implements. Cuando hereda de varios interfaces a la vez, los nombres de dichos
interfaces se separan por “,”.
Para heredar si es interfaz interfaz se usa extends igual que clase clase.
Ejemplo: tenemos una clase Empleado que implementa el método subir_sueldo, y que tiene
dos clases hijas que son Directivo y Programador. Si decidimos que a los directivos les subimos
el sueldo según un criterio diferente al del resto de empleados, tendremos que mirar en la
clase padre para ver cómo implementa el método y reescribirlo para la clase Directivo,
teniendo mucho cuidado con las llamadas a super. Si lo hubiésemos implementado mediante
un interfaz, cada tipo de empleado tendría un mecanismo para subirse el sueldo y podríamos
cambiar el modo en que se realiza esta operación para los directivos sin preocuparnos de nada
más.
(Tipo_destino) variable
conviene asegurarse de que el objeto a convertir es del tipo adecuado mediante la palabra
reservada instanceof
POLIMORFISMO
2- NullPointerException
El error que estás viendo es una excepción de Java conocida como NullPointerException, que se
produce cuando intentas acceder a un método o propiedad de un objeto que es nulo (es decir,
no se ha inicializado).
Errores de Ejecución:
1. Error de sintaxis: Ocurre cuando el código no cumple con las reglas de sintaxis de Java.
Esto puede incluir olvidar un punto y coma, un paréntesis sin cerrar, una llave sin
cerrar, entre otros.
2. Uso de variables no declaradas: Si intentas usar una variable que no ha sido declarada,
obtendrás un error de compilación. Por ejemplo, si escribes x = 10; sin declarar x,
obtendrás un error.
dynamic binding
La dynamic binding se refiere al proceso en el que el método específico que se va a llamar en
tiempo de ejecución se determina en función del tipo real del objeto en lugar del tipo
declarado de la variable.
En tu código, estás iterando a través de un arreglo de puntos y realizando una operación de
impresión. La parte relevante para el dynamic binding se encuentra en la línea donde se llama
a los métodos getX() y getY() en los objetos puntos[i]. El dynamic binding asegura que se llame
al método apropiado en función del tipo real del objeto en puntos[i].
Si puntos[i] es un objeto de tipo Punto, entonces se llama al método getX() y getY() de la clase
Punto. Sin embargo, si puntos[i] es un objeto de tipo Punto3D, entonces se llama al método
getX() y getY() de la clase Punto3D, que puede tener una implementación diferente.
En resumen, el dynamic binding garantiza que se llamen a los métodos adecuados en tiempo
de ejecución según el tipo real de los objetos en el arreglo puntos, lo que permite un
comportamiento polimórfico en tu código.
Casting
La conversión automática de tipos sólo se produce cuando el compilador determina
que la variable destino es lo suficientemente grande como para contener a la variable
origen. Si no es así, se necesita conversión explícita (casting).
2- Herencia de interfaces: Puedes realizar castings entre tipos que implementen una
misma interfaz. Por ejemplo, si tienes una interfaz MiInterfaz, puedes hacer castings
entre objetos que implementen esta interfaz.
3- Casting entre tipos numéricos: Puedes realizar castings entre tipos numéricos
compatibles, como de int a double, o de double a int. Sin embargo, ten en cuenta que
la pérdida de información puede ocurrir si estás reduciendo la precisión, como de
double a int.
4- Casting entre tipos relacionados: En algunos casos, puedes realizar castings entre tipos
que tengan una relación de herencia o una relación compatible, como entre tipos
primitivos y sus envoltorios (por ejemplo, de int a Integer, o viceversa).
Preguntas https://www.daypo.com/herencia-polimorfismo.html#test
https://www.digitallearning.es/tests/java-poo.html