B3-T6_JAVA Flashcards
(120 cards)
En Java8, ¿cómo se define un INTERFACE?
Es una colección de MÉTODOS (con o sin implementación, pues, a partir de Java8, se pueden implementar con “Default”) y una serie de CONSTANTES (Ej: Static Final).
Una interface no tiene sentido que tenga “atributos”.
“Las interfaces pueden ser implementadas por otras clases para usar sus métodos o funciones”.
IMPORTANTE: las INTERFACES se declaran con la palabra clave implements. En cambio, las HERENCIAS se declaran con extends.
NOTA: Una CONSTANTE se diferencia de un ATRIBUTO, en que su valor NO varia.
¿En qué se diferencian IDE (Entorno de Desarrollo Integrado) y GUI (Interfaz de Usuario Gráfica) y pon ejemplos?
Un IDE es un entorno que sirve para desarrollar programas o software. Generalmente un IDE tiene un editor de código, un compilador o intérprete, y un depurador de código del programa en desarrollo.
En tanto un GUI es una interfaz gráfica de usuario, que proporciona un entorno visual gráfico que permite que un humano utilice un sistema operativo o un software.
En resumen, un entorno de desarrollo integrado (IDE) es un sistema de software para el diseño de aplicaciones que combina herramientas del desarrollador comunes en una sola interfaz gráfica de usuario (GUI).
NOTA: un depurador de código realiza el proceso de encontrar y solucionar errores en el código fuente de cualquier software
IDE: BlueJ, Eclipse, JDK (Oracle), JBuilder, JCreator, JDeveloper, IntelliJ IDEA, …
GUI:
1. Los entornos de escritorio Windows o concretamente la interfaz Aero (que puede deshabilitarse), introducida en Windows Vista
2. En GNU/Linux: X Windows, Open Look, GNOME o KDE.
3. O el de Mac OS X: Aqua
IMPORTANTE: la JRE esta incluida en la JDK. Algunas JDKs:
*OpenJDK
*Amazon Correto
*IBM JDK
¿Qué es JRE (Java Runtime Environment) en Java?
Entorno de ejecución de Java o máquina virtual de Java (JVM) + las bibliotecas de clases y otros componentes para que una aplicación escrita en lenguaje Java pueda ser ejecutada en MÚLTIPLES PLATAFORMAS.
El JRE interactúa con el Java Development Kit (JDK) para ejecutar archivos de programas de Java en cualquier máquina.
Al ser Java multi-plataformas (principal característica de Java) implica que el programa primero hay que compilarlo (JDK) y luego interpretarlo (JRE):
- COMPILARLO: pasar el código fuente de nuestro programa (programa.java) a código máquina (bytecode.class), que es el que será interpretado en cualquier plataforma:
programa.java -(Eclipse)-> bytecodes.class (este es interpretado en las JREs)
NOTA: el compilador de java se llama JavaC.
- INTERPRETAR: proceso que realiza la JRE de cualquier plataforma para “entender” el bytecodes.class. Es decir, el fichero.class es el bytecode.
NOTA: página de descarga de la JRE => java.com
Resume la historia de Java:
1991: Creado por James Gosling y Patric Naughton, en la empresa Sun Microsystem (ya NO existe, fue absorbida por Oracle).
NOMBRES: OAK (roble) x Gosling -> JAVA (tomar café).
1995: con la llegada de internet es cuando tuvo éxito, ya que funciona en cualquier plataforma. Crearon el navegador “Hot Java”.
¿Cuáles son las características de Java?
SENCILLO: ocupa poco.
ORIENTADO A OBJETOS.
DISTRIBUIDO: buen trato en red.
SEGURO: como se hizo para programar en red, se hizo seguro.
NEUTRO: multiplataformas.
ADAPTABLE: mismos tipos de datos primitivos en todas las plataformas.
INTERPRETADO: se compila y luego se interpreta.
MULTI HILO: varios procesos en paralelo.
CASE SENSITIVE.
¿Cuál es el modificador de acceso del siguiente método de Java y explicalos todos?
*public static void main (String args []) {
…
}
El modificador de acceso es public e indica que el método es accesible desde cualquier lugar del código.
En la foto vemos los otros 3 Modificadores de Acceso y sus alcances.
*“void” indica que el método main no retorna ningún valor, es decir, el método finalizará en ese punto sin ejecutar ninguna linea más.
*(String args []) => es la definición de los argumentos que recibe el método main. [] -> indica que el argumento es un arreglo o matriz. String -> tipo de elemento del arreglo.
NOTA: En Java, los arreglos (matrices o arrays) son objetos. Todos los métodos se pueden ser invocados en un arreglo (objeto).
Y un arreglo u objeto es una estructura de datos utilizada para almacenar datos del mismo tipo.
En Java TODA aplicación empieza a ejecutarse desde un método MAIN
Sabemos que al ser Java un lenguaje ADAPTABLE sus Tipos Primitivos son iguales en todas las plataformas (multiplataforma o neutro), pero ¿cuáles son?
- ENTEROS: números enteros (7, 2500, …).
1.1. LONG: (8 bytes). Números muy grandes y usan el sufijo “L”.
Ej: 5.000.000.000L
1.2. INT: (4 bytes)
del -2.147.483.648 al 2.147.483.648
1.3. SHORT: (2 bytes)
del -32.768 al 32.768
1.4. BYTE: (1 byte)
del -128 al 127
- DECIMALES:
2.1. DOUBLE: (8 bytes) Aproximadamente 15 cifras significativas.
Ej: 4,31122639824
2.2. FLOAT: (4 bytes) Aproximadamente 6 a 7 cifras significativas. Sufijo “F”.
Ej: 3.25F
- CHAR: para representar caracteres. Van entre comillas SIMPLES.
Ej: la letra a -> ‘a’ => caracter unicode. - BOOLEAN: True / False
COMODINES: para almacenar variables se suelen usar:
ENTEROS -> int
DECIMALES -> double
¿Qué es una variable en Java y cómo se crea (declaración+iniciación)?
Espacio en la memoria RAM del ordenador donde se almacena un valor que podrá cambiar durante la ejecución de un programa => VARIABLE (siempre se ejecutará la última variable => siempre se ejecutan las instrucciones por orden).
Para DECLARARLAS, hay que especificar el tipo de dato que almacenará en su interior + el nombre de la variable:
int salario;
Para INICIARLA, hay que darle un valor: (en Java, al contrario que otros lenguajes, no permite usar variables que no se hayan iniciado o dado cierto valor)
salario = 1800;
*Aunque se pueden hacer las 2 cosas a la vez:
int salario = 1800; => reserva y almacena a al vez el espacio en la RAM
COMODINES: para almacenar variables se suelen usar:
ENTEROS -> int
DECIMALES -> double
¿Cuáles son las 2 maneras de añadir comentarios en Java?
// comentarios en 1 linea
/* comentarios
en varias
lineas */
¿Cómo se guarda una clase en Java?
Ctrl+S (Save) => lo guarda en la carpeta “bin” con extensión .class (bytecode) y en la carpeta “src” se guarda el archivo compilado (.java).
NOTA: *PROGRAMA.JAVA => el * indica que aún NO se han guardado los cambios.
Sabemos que Java es POO y que todo es considerado un objeto, incluso la consola, pero ¿qué es un objeto?
Es una entidad que representa información sobre una cosa dentro de la CLASE.
Tienen PROPIEDADES (ancho, alto, color, …) y MÉTODOS (lo que puede hacer el objeto: frenar, acelerar, …)
EJEMPLO: System.out.println (edad);
/le estamos pidiendo que el objeto “out” (consola) del SISTEMA imprima (println) la variable “edad”/
System => sistema
println => método
out => OBJETO
¿Qué es una CONSTANTE de Java?
Es un espacio en la memoria RAM que, a diferencia de la VARIABLE, no podrá cambiar durante la ejecución del programa. De hecho, se declara igual que la VARIABLE, pero se añade al principio final.
Es necesario para guardar datos que necesitaremos en un futuro y/o constantemente. Por ejemplo, para hacer un programa que pase de cm a metros => en el que almacenaríamos las unidades como CONSTANTES.
EJEMPLO:
final double pulgadas = 2,54;
final byte edad = 42;
¿Cuáles son los operadores de Java?
- ARITMÉTICOS: +, -, * y /.
- INCREMENTO y DECREMENTO:
++ => INCREMENTO: incrementa en “1” el valor al que lo estés aplicando.
– => DECREMENTO: lo contrario al anterior.
+= n => incrementa o suma “n” al valor al que lo apliques.
-= n => lo contrario al anterior. - CONCATENACIÓN: unen valores (conjuntos de caracteres con números o variables).
+ => une o concatena.
NOTA: hay otros 2 tipos de operadores:
3. Lógicos, Relacionales y Booleanos.
4. Binarios
¿Cuáles son los operadores de Java: Lógicos, Relacionales y Booleanos?
- Lógicos, Relacionales y Booleanos:
> mayor que
< menor que
<> mayor o menor que
== igual que
!= distinto que
&& (“y” lógico) cuando comparamos varias condiciones y dará TRUE si se cumplen todas:
EJ: condicion1&&condicon2&&condicon3 => si se cumplen todas dará TRUE.
||(“o” lógico) cuando comparamos varias condiciones y dará TRUE con que se cumpla 1:
EJ: condicion1||condicon2||condicon3 => con que se cumpla 1 dará TRUE.
! (NOT) devuelve el valor contrario a TRUE.
? (“if” en linea)
NOTA: hay otros 3 tipos de operadores:
1. ARITMÉTICOS.
2. INCREMENTO y DECREMENTO.
4. Binarios
¿Cuáles son los operadores de Java: BINARIOS?
Los operadores BINARIOS cambian “0s” y “1s” y viceversa.
a) | (OR binario) OR INCLUSIVO => siempre que haya un 1 en cualquier lado del par, el resultado será 1.
0101 (decimal 5) |
0011 (decimal 3)
0111 (decimal 7) => RESULTADO
b) ^ (XOR lógico) OR EXCLUSIVO => El resultado será 1 si el par de bits son diferentes y cero son iguales.
0101 (decimal 5) ^
0011 (decimal 3)
0110 (6) => RESULTADO
c) ~ (complemento) operador negación (NOT). Lo contrario.
~ (0111) => 1000 (8 decimal)
d) & operador bits AND: sólo iguales.
0101 AND
0011
0001 (1) => RESULTADO
NOTA: hay otros 3 tipos de operadores:
1. ARITMÉTICOS.
2. INCREMENTO y DECREMENTO.
3. Lógicos, Relacionales y Booleanos.
Explica el funcionamiento de los operadores de Java de DESPLAZAMIENTO?
A < < B : Desplazamiento de A a la izquierda en B posiciones:
Ej: (0011) < < (0001) // Desplaza 0011 una vez dando 110
(0011) < < (0011) // Desplaza 0011 tres veces dando 11000 (son 3 veces porque 0011=3)
A > > B : Desplazamiento de A a la derecha en B posiciones, tiene en cuenta el signo:
(1100) > > (0001) // Desplaza 1100 una vez dando 0110
(1000) > > (0011) // Desplaza 1100 tres veces dando 0001
*Si manipulamos decimales lo que hacemos es dividir el número por 2 tantas veces como indique su desplazamiento:
12 > > 1 // Sería 12 / 2 = 6
12 > > 2 // Sería 12 / 2 = 6; 6/2 = 3
A > > > B : Desplazamiento de A a la derecha en B posiciones, NO tiene en cuenta el signo:
1110 0011 > > > 0011 // Desplaza tres a la izquierda dejando 0001 1100
Sabemos que tanto las clases propias (las que hacemos nosotros), como las predefinidas (descargadas de API Java) están organizadas en paquetes y contienen diversos métodos, ¿qué métodos conoces de la clase MATH?
Esta clase contiene un muestrario de métodos que nos permiten realizar operaciones matemáticas:
Math.sqrt (n) => raiz cuadrada del número “n” (se declara con double).
Math.pow (base, exponente) => potencia de un número (base y exponente son double)
double numero = 2;
double elevado = Math.pow(numero, 10);
System.out.println (“El numero 2 elevado a 10 es “+ elevado);
//El numero 2 elevado a 10 es 1024.0
Math.round (decimal) => redondeo de un número.
double numero = 5.87;
double resultado = Math.round(numero);
System.out.println (resultado);
//6
Math.PI => CONSTANTE de clase con el número PI
Math.random (); => genera por consola números aleatorios entre 0 y 1 (sólo con double)
IMPORTANTE: java.lang.Object => es la SUPERCLASE de Java de la que heredan todas por defecto.
Sabemos que STRING no es un tipo primitivo (int, double, long, …), sino una clase predefinida a descargar de la API Java, pero ¿conoces algunos de sus métodos más utilizados?
La clase STRING se usa para la manipulación de cadenas de caracteres.
String mi_nombre=(Manuel);
length() => devuelve la longitud de una cadena de caracteres:
mi_nombre.length()=6 => porque Manuel tiene 6 caracteres.
charAt(n) => devuelve la posición de un carácter dentro de una cadena (las posiciones empiezan a contar desde “0”):
mi_nombre.charAt(2)=n => porque esta en la 3ª posición de Manuel.
substring(x,y) => devuelve una subcadena dentro de una cadena, siendo”x” el carácter a partir del cual se extrae e “y” el nº de carcateres a extraer.
mi_nombre.substring(0,3)= Man =>los 3 primeros caracteres.
equals(cadena) => devuelve TRUE si 2 cadenas que se comparan son iguales y FALSE si no lo fueran (distingue mayus y minus)
equalsIgnoreCase(cadena) => igual que el anterior pero NO tiene en cuenta las mayúsculas.
IMPORTANTE: java.lang.Object => es la SUPERCLASE de Java de la que heredan todas por defecto.
java.lang: es el paquete.
Object: es la clase.
Sabemos que las clases predefinidas de Java están en la API Java (online) divididas en paquetes, pero ¿en qué 2 partes se dividen dichos paquetes y por qué son necesarios los paquetes?
1.JAVA (java.awt, java.io, java.util, …)
2.JAVAX (javax.activity, javax.annotation, javax.swing, …)
============
a) Para organizar las clases.
b) Para evitar conflictos de nombres: NO puede haber 2 clases java con el mismo nombre y en el mismo paquete (carpeta), aunque si se puede en distintos paquetes.
c) Para controlar la visibilidad (pública, privada o protegida) de las clases / ENCAPSULAMIENTO (modifica la visibilidad ocultando atributos de un objeto).
IMPORTANTE: java.lang.Object => es el PAQUETE o SUPERCLASE de Java de la que heredan todas por defecto.
La VISIBILIDAD y ENCAPSULAMIENTO son conceptos diferentes, entonces ¿por qué se relacionan en Java?
Para definir la “Visibilidad” en Java, se dispone de palabras reservadas:
public: nos indica que es accesible desde cualquier clase [interface]. private: solo es accesible desde a clase actual. protected: accesible desde la clase actual, sus descendientes o el paquete del que forma parte. default: accesible desde cualquier clase del paquete.
El ENCAPSULAMIENTO permite cambiar dicha visibilidad de atributos y métodos, ocultando dichos métodos y atributos de una clase declarándolos PRIVATE, para su exclusivo uso interno.
*No obstante, se puede acceder a dichos elementos ENCAPSULADOS con los métodos: Getters y Setters.
EJEMPLO:
class Punto {
private double puntox, puntoy;
public double getPuntox() {
return puntox;
}
public void setPuntox (double puntox) {
this.puntox = puntox;
}
MNEMOTECNIA: Una lavadora implementa la encapsulación, porque pone a disposición del usuario sólo los botones necesarios para su uso (encender, subir potencia, abrir compuerta, etc), mientras que otras funcionalidades.
Menciona 2 bibliotecas (paquetes) para la creación de interfaces gráficas de usuario:
AWT: (Abstract Window Toolkit) es la parte de Java para construir interfaces gráficas de usuario.
import java.awt.*; => importa todas las clases del paquete.
SWING: abstrae el SO y proporciona su propia colección de gráficos.
import javax.swing *; => trae todos las clases.
import javax.swing.JOptionPane; => sólo trae la clase JOptionPane.
IMPORTANTE: son los 2 paquetes que forman la JFC (Java foundation Classes), que son la parte de la API de Java compuesta por las clases para crear interfaces gráficas.
Comenta 2 clases Java para introducir información dentro de nuestro programa y algunos de sus métodos:
- SACNNER (es una clase reciente, pues apareció en Java 5.0). Métodos:
nextLine() => introduce texto (string).
nextInt() => introduce números enteros.
int edad= entrada.nextInt();
nextDouble() => introduce decimales.
import java.util.Scanner;
*Son métodos NO estáticos.
- JOptionPane (mas antigua) Construye una ventana sencilla. Métodos:
showInputDialog () => con este método se construye dicha ventana.
import javax.swing.JOptionPane;
*Método estático.
NOTA: en método NO estáticos hay que crear un objeto perteneciente a la clase para utilizarlos.
Cuando el método es estático hay que usar la clase delante (ej: Math.sqrt(9)).
Sabemos que el flujo de ejecución de un programa en Java recorre linea a linea (empezando por la 1ª) todo el código, pero ¿qué 2 maneras existen de modificarlo?
- CONDICIONALES: (a saltos)
1.1 if -> else => puede ir el “if” sólo.
1.2. SWITCH (opción a evaluar){=> case1 -> break; -> case1 -> break; => default;}
- BUCLES: (repeticiones)
2.1. BUCLES INDETERMINADOS: no se sabe las veces que se repetirán.
a) WHILE
b) DO WHILE: evalúa la condición después de ejecutar el código de su interior, es decir, este bucle va a ejecutar el código mínimo una vez
2.2. BUCLES DETERMINADOS: se sabe cuantas veces se repite antes de ejecutar.
a) FOR (inicio del bucle; condición; contador del bucle)
for (int i=0; i<10; i++){
System.out.println (“Manuel”);} => imprime 10 veces el nombre Manuel.
b) FOR EACH
Sabemos que [arreglo, matriz o array] es lo mismo, pero ¿qué utilidad tiene?
Estructura de datos para almacenar valores del mismo tipo o relacionados. A diferencia de las variable, pues estas almacenan un sólo valor => una matriz es una agrupación de variables y se pueden recorrer con bucles.
int [ ] mi_matriz = new int [3];
/*int => tipo de variable.
[] => especificamos que se trata de una matriz.
new => operador
int => tipo de dato a almacenar.
[10] => nº de valores a almacenar */
mi_matriz [0]= 35;
mi_matriz [1]= 10;
mi_matriz [2]= 42;
/*nombre_matriz [posición] = valor a almacenar; */
NOTA: también se puede declarar e iniciar a la vez, como las variables:
int [] mi_matriz = [35, 10, 42];
*Las matrices, al igual que las variables, NO pueden tener caracteres extraños ni espacios en sus nombres.
NOTA: hay matrices bidimensionales y multimensionales: int [ ] [ ] bloque = new int [4][5]