You are on page 1of 14

Resumen escrito de curso Java Básico de OpenBootcamp

Variable de entorno: Las variables de entorno son valores dinámicos del tipo par clave:valor y
suelen ser cadenas de texto que contienen la información de configuración de distintos
programas en un SO y del usuario que ha iniciado sesión y se dispone a trabajar (dos
programadores distintos seguramente guardan en directorios distintos sus desarrollos),
afectan a cualquier software y son muy útiles para el backend (la funcionalidad “no se ve” de
un desarrollo). Los SO más conocidos y populares utilizan las variables de entorno para
determinar, por ejemplo, donde han de colocar los archivos temporales.

Java utiliza las variables de entorno para informar dónde y cómo ubicar sus archivos dentro
del SO, y son las siguientes:

 JAVA_HOME: esta variable informa al sistema la ruta donde se encuentra instalado


Java.
 PATH: se utiliza en los SO POSIX Y MICROSOFT y especifica cuál es la ruta donde debe
el intérprete de comandos buscar los programas a ejecutar.

Variables: Las variables Java son un espacio de memoria en el que guardamos un determinado
valor (o dato). Para definir una variable seguiremos la estructura:

[privacidad] tipo_variable identificador;

Java es un lenguaje de tipado estático. Por lo cual todas las variables tendrán un tipo de dato
(ya sea un tipo de dato primitivo o una clase) y un nombre de identificador.
El tipo de dato se asignará a la hora de definir la variable. Además, en el caso de que las
variables sean propiedades de objetos tendrán una privacidad.
Ejemplos de variables serían…

int numero = 2;
String cadena = "Hola";
long decimal = 2.4;
boolean flag = true;

Tipos de variables en Java


Dentro de Java podemos encontrar los siguientes tipos de variables:

 Variables de instancia (campos no estáticos), son las variables que están definidas
dentro de un objeto pero que no tienen un modificador de estáticas (static). Suelen
llevar un modificador de visibilidad (public, private, protected) definiéndose.

class Triangulo {
private long base;
private long altura;
}

 Variables de clase (campos estáticos), son aquellas variables que están precedidas del
modificador static. Esto indica que solo hay una instancia de dicha variable. Es decir,
aunque tengamos N objetos de la clase, la variable estática solo se instancia una vez.

class Triangulo {
static long lados = 3;
}

Si además queremos que el valor no pueda cambiar nunca la definiremos como final.

class Matematicas {
final static long PI = 3.14159;
}

 Variables locales, son variables temporales cuyo ámbito de visibilidad es el método


sobre el que están definidas. No pueden ser accedidas desde otra parte del código. Se
las distingue de las variables de instancia ya que estas no llevan modificadores de
visibilidad delante.

int variable = 2;

Método main: Es el punto de entrada de la aplicación, es decir, es el punto en el que comienza


la ejecución de esta. Es por ello que ha de ser public y static.La devolución es void. El único
parámetro que acepta es String:

Métodos: Un método en Java es una porción de código que realiza tareas asociadas a un
objeto, básicamente un método es una función que pertenece a un objeto o clase.

A través de un método dotamos a nuestros objetos de funcionalidades y características


comunes a su clase (si nuestro objeto fuera un auto, nuestros métodos asociados podrían ser,
ruedas, puertas, motor, etc., que son comunes a todos los objetos auto). Un método precisa
de un objeto a quien otorgarle funcionalidades.
Funciones: agrupación de sentencias que nos permiten ejecutar tareas repetitivas sin tener
que escribirlas cada vez, cumple la misma función de un método, pero no necesita de un
objeto para existir por sí misma.

Con las funciones podemos separar nuestro código en pequeñas porciones y de esta manera
será más fácil de mantener, utilizar y reutilizar a futuro, por ejemplo si creamos una
calculadora, podríamos crear una función para cada utilidad, suma, resta, multiplicación,
división, raíz cuadrada. Se encapsulan en un bloque al que generalmente le ingresamos
parámetros, aunque también las hay sin ellos, estos valores se utilizan para realizar algún tipo
de operación y suelen devolver algo a través de la instrucción return.

Tanto los métodos como las funciones, son funcionalmente idénticos, la diferencia entre un
método y una función es que el método está indefectiblemente asociado a un objeto para
poder existir y la función no precisa de un objeto.

Parámetros: Los parámetros de una función son los valores que se colocan entre los paréntesis
que están al lado del nombre de la función, indicándose el tipo de cada uno y su nombre.

Luego al llamar a la función siempre se le deben pasar esos argumentos en el mismo orden en
el que los espera y que fueron declarados dentro de los paréntesis

Los parámetros o argumentos son variables locales, a estas variables les asignamos un valor
antes de que se ejecute la función, su ámbito de validez, por tanto, es el propio cuerpo de la
función.

En los parámetros se define el tipo de dato que van a recibir, si es un número, cadena u otros.
Cada parámetro se separa con comas.

Pueden servir para introducir datos para ejecutar el método (entrada) o para obtener o
modificar datos tras su ejecución (salida).

Sobrecarga de funciones: Es la creación de varias funciones dentro de nuestro programa, que


tienen el mismo nombre, pero sus argumentos son distintos y realizan distinta acción.

La importancia de la sobrecarga radica en poder relacionar los métodos a través de un nombre


común, aunque cumplan distintas funciones.

Que debemos tener en cuenta para sobrecargar un método en Java:

 Se debe cambiar la lista de argumentos.


 Se puede cambiar el tipo de retorno.
 Puede ser sobrecargado en la misma clase o en una subclase.

Ejemplo de función sobrecargada:


Clase: Son un tipo de dato estructurado (tipo objeto), se denominan así, porque pueden
contener múltiples valores de tipos de datos más simples (int, boolean, double, float, etc.).
Una clase es un molde que utilizaremos para crear distintos objetos, con características
comunes entre sí. La forman atributos (variables con datos), métodos (funciones o
procedimientos, son un conjunto de instrucciones) y constructor (tipo de método especial que
nos permite construir un objeto de una clase, se usa para inicializar un objeto).

Ejemplo creación de una clase en Java:

Objetos: Se crean a partir de clases. Son entidades que representan objetos reales. No tiene
existencia física, no podemos tocarlo, un objeto sería por ejemplo, un cuadro, representado de
manera lógica. Estos objetos tienen características propias y realizan acciones individuales.

Herencia: La herencia es uno de los conceptos más importantes de la programación orientada


a objetos, y su principal ventaja es la capacidad de utilizar el mismo código que hemos
programado en una clase, en otras clases que heredan de ella sus métodos (funciones) y sus
atributos (variables). Cuando una clase hereda de otra, se le llama subclase, clase hija o clase
derivada. Y la clase que es heredada, se llama clase base, padre o superclase.
Las clases hijas reciben las funciones de su clase padre y además implementan sus propias
funciones o métodos. Si no fuera así no tendría sentido crear clases hijas.

A su vez la clase hija puede ser heredada por otras clases hijas. 

Con la palabra reservada extends le decimos a la clase hija de qué clase padre hereda sus
propiedades. Ejemplo de herencia debajo:

Instancia: En cuando le damos unos valores a un nuevo objeto que hemos creado usando una
clase. Estos valores serán exclusivos de cada objeto.

Encapsulación: La encapsulación es uno de los conceptos fundamentales en Java. Está


estrechamente ligada a la programación orientada a objetos (POO). La encapsulación
permite integrar los datos y los métodos que actúan sobre estos en una clase definida por la
persona que codifica. Una vez que se ha encapsulado un atributo, únicamente los métodos de
la clase donde este se encuentre, serán los que tengan acceso a él para modificarlo o
interactuar en cualquier forma. Mirar en video mejor

Constructor: método especial que se invoca cada vez que se genera un objeto de la clase a la
que él pertenece. Dependiendo de las necesidades que tenga el proyecto, una clase puede
tener uno o varios constructores.

Esto le permitirá, al desarrollador, darle valores iniciales a los atributos que tiene ese objeto y
manejar estos según sea conveniente para la lógica del código que está escribiendo. Tiene las
siguientes características:
Un ejemplo:

Método super: Nos permite reutilizar bloques de código sin tener que volver a escribir lo
mismo, invocando al constructor de una clase superior, desde una clase hija y hacia una clase
padre. Así como con la palabra this, hacemos referencia a la instancia actual de un objeto, con
la palabra super hacemos referencia a su clase padre. 

Además podemos usar la palabra super para inicializar atributos de la clase superior de la que


se extiende con la palabra extends. Ejemplo de método super:

Sobreescritura: Es sobre funciones o métodos entre clases. La sobreescritura en Java también


es conocida con el nombre de polimorfismo de inclusión y no es otra cosa que una
característica que permite a las clases secundarias o subclases hacer una implementación de
un método que ha sido dado por una clase principal o superclase.

Si se crea un objeto de la clase principal y se invoca el método, se va a ejecutar el código que


tiene este en esa clase, pero si se crea un objeto de la subclase y se invoca el método, se
ejecuta la versión del método en esta subclase. 

Cuando se hace sobreescritura de un método en Java, se usa la anotación  @Override que le


indicará al compilador que se trata de un método que está en la clase principal y se
sobreescribirá en ese momento. 

El siguiente ejemplo muestra una idea general de cómo funciona esto en la práctica:

Polimorfismo: Mecanismo más de la programación orientada a objetos, se da cuando


sobreescribimos una función heredada (se lo conoce como overwrite) para que haga otra cosa
que no es la que hacía originalmente.

Consiste en que las clases hijas implementan la misma función (método) pero hacen distinta
cosa. Es la capacidad de algunos lenguajes de POO para hacer que desde distintos objetos al
invocar un mismo método, este método pueda responder de manera distinta. Se usa
sobretodo para trabajar con estructuras de datos.

Por ejemplo si definimos una clase instrumentos y le damos un método que sea,


“sonidoqueemite” y luego creamos dos clases hijas, como guitarra y tambor, ambas clases
pueden utilizar el método “sonidoqueemite”, pero su implementación será distinta, ya que
tambor y guitarra emiten sonidos distintos, veamos un poco el código:

Interface: Una interface en Java es una especie de plantilla, marco o receta, para realizar una
tarea. Consiste en una colección de propiedades constantes estáticas y métodos abstractos sin
cuerpo (no hay código ni sentencias dentro de ellos) que nos especifica qué se debe hacer,
pero no cómo hacerlo. Un ejemplo de interface:

Refactoring: Es un proceso a través del cual se busca mejorar el funcionamiento de un código


fuente sin agregar funcionalidades. Es limpieza y ordenamiento del código fuente sobre el que
estamos trabajando. Requiere pasos previos de planificación y análisis del código.

Para hacer un refactoring en Java, es necesario seguir algunos pasos esenciales y así


determinar cuáles estrategias puedes aplicar para lograr el objetivo final.

1. Examinar el código. Con esto puedes saber si hay problemas que se puedan solucionar
al hacer refactoring.
2. Establecer si es necesario hacerlo. Aunque de entrada es importante que sepas que
siempre se puede mejorar el código para hacerlo más legible, agregarle más
funcionalidad o eliminar fragmentos inútiles. 
3. Proyectar la solución. Aquí vas a definir la forma en la que vas a mejorar el código. 
4. Hacer las modificaciones necesarias. Es el momento de poner manos a la obra e
implementar lo que has determinado que hay que hacer en el paso anterior.
5. Hacer pruebas de control. Este último paso es vital porque te permitirá saber si lo que
has hecho está funcionando o no.

Algunas acciones más concretas para refactoring son:

Renombrar: Dar nombres más adecuados a los elementos que componen el código.

Abstraer: Implica hacer capas de abstracción para compartir, rehusar o reemplazar código,
dependiendo de las necesidades del programa. Se lleva a la práctica, creando superclases,
moviendo o eliminando código, etc.

Métodos de la clase String: Los String en Java no son del tipo de dato simple, sino instancias
de la clase string, son objetos, como todo lo que compone a este lenguaje y tienen una sintaxis
especial para representar cadenas de caracteres. Los métodos de la clase String son:

Arrays: La sintaxis para declarar un array sigue la siguiente forma general:

Con más de una dimensión es así:


Listas: Parecido a los arrays, pero nos permite agregar elementos de forma dinámica.
Debemos importar el paquete java útil y se declaran así:

Para agregarle datos hacemos esto:

Mapas: Son estructuras de datos que nos permiten trabajar con estructuras de clave valor.
donde clave (key) es un identificador único de un valor(value) dado. Importaremos import
java.util.HashMap. Tiene métodos como .Put, .Get, .Remove, .Clear. Se recorren con un bucle
for:
Mecanismos de gestión de excepciones: Si estamos realizando una operación la cual podría
lanzar una excepción (porque provoca un error) podemos capturarlo para que el programa no
se pare. Mirar los videos de Try, catch y de throw y throws

 Try, catch y finally: Podemos capturar este error empleando un bloque try{}, dentro de


las llaves pondremos el código (instrucciones) que queremos que se ejecute.
Seguido de este, pondremos un bloque catch{} aquí entre las llaves, “capturaremos” la
excepción, y le daremos una instrucción alternativa, por ejemplo que nos informe qué
tipo de error ha ocurrido.
Al capturar la excepción, nuestro programa podrá continuar con la siguiente
instrucción dentro del código.  
Al final del bloque catch, agregamos el bloque finally{} esta porción del código siempre
se ejecutará haya ocurrido un error o no.
El objetivo del finally es cerrar todos los recursos que se estaban utilizando para evitar
consumo de los mismos de forma innecesaria. Además puede emplearse incluso sin
bloques catch.  
Un recurso que no se libera impide que otro programa lo pueda utilizar. 
Ejemplo:
Este sería el error que entrega la división por cero:

Código a implementar:

Throw y throws: La función de Throws es permitir al método que lo incluye, hacer dos
cosas:
1- si todo va bien, devolvernos un objeto.  
2- si surge algún imprevisto, en vez de realizar su trabajo, va a lanzar una
clase IOException, para capturar el error y poder continuar con el resto del
programa.

Con la palabra reservada throws, le avisamos a Java que es muy probable que en algún
momento se produzca un error relacionado con las excepciones declaradas, se pueden
declarar varias excepciones separadas por coma(,).
Throws también se usa cuando no queremos capturar ni evitar la excepción en el método que
estamos utilizando, y llamamos a otro método donde sí la capturamos, a través del bloque try-
catch.

Este bloque está formado por dos instrucciones:

y luego le asignamos una variable que será el nombre del objeto que vamos a crear para poder
mostrarla luego. Ejemplo debajo:

Clase declarada en otro archivo class que


no vemos aquí. Pasa un mensaje de error

Indicamos aquí que lanzamos


una excepción

Indicamos que lanzamos este objeto que


creamos. Pasará el mensaje de error
creado

Clase System: Clase que pertenece al paquete java.lang y contiene varios métodos de entrada


y salida de datos por pantalla y de salida de error, que nos permite trabajar con los canales
de entrada/salida de nuestro dispositivo.

System.out.println() es la sentencia más utilizada para generar una salida de información por
pantalla, está formada por la clase System + el método out + el método println.
Posee tres métodos estáticos:

Standard Input Stream (System.in)

Se utiliza junto con la clase Scanner para ingresar datos por teclado o desde un archivo.

Ej: Scanner entrada=new Scanner(System.in);

Standard Output Stream (System.out)

Se utiliza junto a la función print para la salida de información por pantalla.

Ej: System.out.println(“Lo que queremos mostrar”);

Standard Error Stream (System.out)

Su uso se basa en mostrar por pantalla si hubo un error, también se utiliza junto a la
función print.

Ej: System.err.println("Mensaje de Error "+e); e representa el error

Diferencia entre println y print: Con el método println el mensaje se muestra en pantalla y


luego el cursor queda en el renglón siguiente. En el caso del método print se muestra el
mensaje y el cursor queda al final de la línea.

Diferencias entre ArrayList y LinkedList:

Definición ArrayList: Matriz dinámica que nos permite almacenar datos e incrementa su


tamaño de acuerdo a la necesidad de forma automática, en ella podemos agregar, borrar y
buscar elementos accediendo a ellos por su número de índice.

Definición de LinkedList: Lista enlazada de elementos, similar al ArrayList, pero a diferencia de


este que guarda los datos en una matriz, LinkedList lo hace de manera lineal almacenando la
información en posiciones de memoria que no son contiguas y en elementos nodo, donde
cada elemento contiene datos y un puntero direccionado a uno de sus elementos vecinos o a
ambos (hacia atrás y hacia adelante), de esta forma se elimina la necesidad de ordenar los
elementos en la memoria. 
¿Cuándo usar una u otra? Un ArrayList es lo más conveniente por su acceso por índices.

Los tipos de errores que existen en JAVA son:

Errores de ejecución: Los detecta la máquina virtual de Java. Se pueden capturar.

Errores de compilación: Aparece cuando el código no cumple con las reglas sintácticas.
Aparecerá como error de sintaxis.

Error de lógica: Todo corre bien pero el resultado no es correcto. Es el más difícil porque,
hemos puesto algo que no es lógico y hay que replantearse la solución.

You might also like