b3t6 - LAB Java básico Flashcards

1
Q

Modificadores de acceso
Cuál es la diferencia entre la visibilidad “default” y la protected?

A

En la visibilidad default no se tiene visibilidad desde una subclase que esté en distinto paquete, mientras que protected da visibilidad a todas las clases hijas aunque no estén en el mismo paquete

Mismo paquete significa mismo paquete, no incluye subpaquetes

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Al definir clases genéricas tipo List< T>, se puede definir que el tipo tenga que heredar de otro. Cómo?

Al usarlas, por defecto no se puede usar un objeto genérico como si fuese del tipo padre del tipo de ese objeto genérico, para eso se usa los wildcards, como?

A

Public class NaturalNumber < T extends Integer>

Wildcards -> Por ejemplo un objeto lista de tipo List < Integer> no puede recoger una lista List < Number> , aunque Integer es hija de Number
Para ello hay que declarar las listas de otra forma, con el wildcard “?” ->

List < ? extends Integer> listaInteger = new ArrayList()
List < ? extends Number> listaNumber = listaInteger;

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Qué es característico del tipo String en Java?

A

Es inmutable, una vez creada no se puede modificar
Además son únicas, si se crean dos variables con cadenas iguales, en realidad las dos apuntan a la misma cadena en memoria, no se crean dos cadenas.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Qué métodos de la clase String usarías para:

obtener la longitud de una cadena
obtener una subcadena con los primeros 10 caracteres
En qué índice del string dado comienza una subcadena de caracteres determinada, buscando a partir de una posición determinada
Obtener el caracter que está en una posición dada del string
Reemplazar todos los caracteres x por y
Convertir a un array de caracteres
Eliminar espacios en blanco de más al inicio y al final
Devolver un array de bytes
Que cumple una expresión regular
Convertir un entero a String
Convertir todo a mayúsculas
Concatenar dos cadenas en otra

A

System.out.println(cad1.length());
System.out.println(cad1.substring(0, 10));
System.out.println(cad1.indexOf(“pais”, 1));
System.out.println(cad1.charAt(0));
System.out.println(cad1.replaceAll(“u”, “U”));
System.out.println(cad1.toCharArray()); // devuevel char[]
System.out.println(cad1.trim()); // elimina espacios en blanco de mas al inicio y al final
System.out.println(cad1.getBytes()); // devuelve byte[]
System.out.println(cad1.matches(“[a-z A-Z]+”)); // true
System.out.println(String.valueOf(50)); // convierte un entero al String “50”
System.out.println(cad1.toUpperCase()); // todo a mayusculas
String cad2 = cad1 + “ habia”; // concatenacion (no modifica cad1)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Indica dos objetos que son cadenas variables, una thread-safe y otar no thread-safe
¿Qué métodos de estas clases usarías para introducir caracteres a la cadena?

A

String-Buffer (thread-safe)
String-Builder

s1.insert(2,”aaa”).append(“bbb”)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Las clases java heredan de Object. Es necesario especificarlo poniendo el extends Object?

A

No es necesario

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Cómo se crea un constructor para una clase?

A

Un método public que se llama con la clase y que no se especifica que devuelva nada, ni void.
Si no se crea ninguno, el sistema crea uno por defecto.

Public Factura(Date fechaFactura, int idFactura){
}

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Qué métodos que todas las clases heredan de Objet usarías para:

Obtener el código hash que identifica al objeto
wait() -> pdte rellenar
notify() -> pdte rellenar
notifyAll() -> pdte rellenar
Obtener la clase del objeto -> Class
clonar el objeto

A

hashCode(), wait(), notify(), notifyAll(), getClass() y clone()

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Qué método de Object sobreescribirías en tu clase para modificar el string que se pintaría al hacer un System.out.println(p1) de su objeto?

A

public String toString()

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Qué método de Object sobreescribirías en tu clase para realizar alguna acción antes de que el GC elimine uno de sus objetos?

A

protected void finalize() throws Trhowable{}

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Qué método de Object sobreescribirías en tu clase para comparar dos de sus objetos?

A

public boolean equals(Object obj){}

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Qué tags incluirías en el comentario JavaDoc de tu clase para indicar el autor, y la versión?
Y en los métodos para documentar los parámetros y lo que devuelven?

A

Clase -> @author, @version
Método -> @param, @return

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

El identificador de una clase, método, variable, … por qué caracteres pueden comenzar?

A

Por una letra, guion bajo “_” o dólar “$”

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

El identificador de una clase, método, variable, … por qué caracteres pueden comenzar?

A

Por una letra, guion bajo “_” o dólar “$”

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Indica el nº de bits de los tipos primitivos
float
double
char
byte
int
short
long

A

float (32bit precision simple IEEE 754)
double (64bit precision doble IEEE 754)
boolean
char (16bit UNICODE)
byte (8bit con signo)
int(32bit con signo)
short(16 bit con signo)
long(64 bit con signo)

int dato1=10;
char letra=’a’;
float dato2=123.3f;
double dato3=1.234e2; // notacion cientifica
long creditCardNumber = 1234_5678_90123456L; // a partir de Java7 se puede usar “” para mejorar la legibilidad

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Cómo son los operadores aritméticos en java
suma
resta
división entera
multiplicación
resto

A

, - , + , / (division entera), *, % (resto)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
17
Q

Qué diferencia hay entre ++variable y variable++?

A

++variable(incremento en +1, previo a usar la variable),variable++(incremento en +1, posterior a usar la variable)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
18
Q

Cómo harías en java para en una línea con un operador lógico sumarle a una variable un número a su propio valor?

A

variable+=valor

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
19
Q

Operadores de comparación en java
igual
distinto
mayor
menor
mayor o igual
menor o igual

A

// ==, != (distinto), “<”, “>”, “<=”, “>=”

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
20
Q

Operadores lógicos de bit
// ~ (negación o complemento), | (or binario), ^ (xor binario), & (and binario)

A

AND
El operador de bit AND lo que hace es multiplicar los bits de las dos cadenas. Las multiplicaciones de bits dan como resultado que 1 x 1 siempre es 1 y que 1 x 0 y 0 x 0 siempre da 0. El tamaño de la cadena resultado siempre es el mismo al tamaño de las cadenas.

Así de la siguiente operación:

0101 & 0011
Tendremos que el resultado es:

0101 AND (decimal 5)
0011 (decimal 3)
——–
0001 (decimal 1)

OR
En el caso del OR inclusivo (operador ) lo que se hace es multiplicar los bits asumiendo que 1 multiplicado por 1 o por 0, siempre es 1. Mientras que la única multiplicación que da 0 es 0 x 0.
Así la operación:

(0101) | (0011)
Dará como resultado:

0101 OR (decimal 5)
0011 (decimal 3)
——–
0111 (decimal 7)

XOR
Para el caso del OR exclusivo (operador ^) conocido como XOR. La multiplicación de bits será 1 para los casos 1 x 0 y 0 x 1. Las multiplicaciones 1 x 1 y 0 x 0 siempre darán como resultado 0.

De esta forma si tenemos la operación:

(0101) ^ (0011)
El resultado que encontraremos será:

0101 XOR (decimal 5)
0011 (decimal 3)
——–
0110 (decimal 6)

Operador NOT o ~
El operador de negación de bits nos permite invertir el contenido de bits de una cadena. De tal manera que invierte los bits convirtiendo los 1 en 0 y los 0 en 1.

En este caso la estructura será:

~ (valor)
Así podríamos tener la sentencia:

~ (0111)
La cual se traduciría en:

1000 (decimal 8)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
21
Q

Operadores de Desplazamiento de Bits
“»
«
> > >”

A

Operadores de Desplazamiento de Bits
Los operadores de desplazamiento de bits permiten mover los bits dentro de la cadena. La estructura de estos operadores es la siguiente:

(valor_binario1)&raquo_space; (valor_binario2)
(valor_binario1)&raquo_space; (valor_binario2)
(valor_binario1)&raquo_space;> (valor_binario2)
Operador Desplazamiento a Izquierdas
En el caso del desplazamiento a izquierdas, desplaza el valor_binario1 a izquierdas tantas veces como indique el valor_binario2. Los bits se mueven a la izquierda y se añaden tantos ceros como indique el valor_binario 2.

De esta forma el código:

(0011) &laquo_space;(0001) // Desplaza 0011 una vez dando 110
(0011) &laquo_space;(0011) // Desplaza 0011 tres veces dando 11000
Operador Desplazamiento a Derechas
Es exactamente igual al operador de desplazamiento a izquierdas, pero con la diferencia que mete dígitos por la izquierda y va eliminado el último dígito.

Si tiene que meter un 1 o tiene que meter un 0 dependerá del valor del bit del signo. Si el valor del bit de signo es positivo (0), lo que hace es insertar 0. Si el valor del bit de signo es negativo (1), lo que hace es insertar 1.

Los ceros o unos a insertar los determinará el valor_binario2 y serán sobre el valor_binario1.

De esta forma podemos ver los códigos

(1100)&raquo_space; (0001) // Desplaza 1100 una vez dando 0110
(1000)&raquo_space; (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&raquo_space; 1 // Sería 12 / 2 = 6
12&raquo_space; 2 // Sería 12 / 2 = 6; 6/2 = 3
Si manejamos valores negativos. Por ejemplo de un elemento Byte (8 bits, con el primero como signo)

1110 0011&raquo_space; 0011 // Desplaza tres a la izquierda dejando 1111 1100
Operador Desplazamiento a Derechas sin signo
Es como el operador desplazamiento a derechas pero no tiene en cuenta el signo. Por lo cual siempre mete ceros por la izquierda.

Este operador sería más utilizado si manejamos valores binarios para ejecutar un desplazamiento de bits.

Así podríamos ver el siguiente código:

1110 0011&raquo_space;> 0011 // Desplaza tres a la izquierda dejando 0001 1100

22
Q

Operadores lógicos o booleanos
// ! (not logico), || (or logico cortociruito), && (and logico)

A
23
Q

Cómo se hace un if en línea?

A

?: (if en linea)

booleanExpression ? expression1 : expression2

24
Q

Cómo se comprueba en java si un objeto es compatible con cierto tipo?

A

/ check si un objeto es compatible con un cierto tipo (instanceof))
String cad = “Hello”;
if(cad instanceof String) System.out.println(“String compatible!!”);
if(cad instanceof CharSequence) System.out.println(“CharSequence compatible!!”);
if(cad instanceof Object) System.out.println(“Object compatible!!”);

25
Q

Es obligatorio poner siempre las llaves en las sentencias if/else?

A

// Las llaves de bloque no son necesarias si solo hay una sentencia
if(a>b)
System.out.println(“a mayor que b”);
else
System.out.println(“b mayor que a”);

26
Q

En los bucles for, qué hace la palabra reservada continue?

A

// inicio –> solo se ejecuta una vez antes de empezar las iteraciones
// comparacion –> expresion que se evalua al inicio de cada vuelta (si da false termina el bucle)
// incremento –> se ejecuta despues de cada iteración (incremento positivo o negativo)

for(int i=0;i<10;i++) {
if(i % 2 == 0) continue; // continue termina que la iteracion actual y provoca que empiece la siguiente
System.out.println(“Valor de i “ + i);
}

27
Q

Cuál es el formato de los condicionales switch en java?

A

switch (month) {
case 1: monthString = “January”;
break;
case 2: monthString = “February”;
break;
}

28
Q

Cómo es el formato de los bucles while en java?

A

while (count < 11) {
if (count == 6) break; // break provoca que nos salgamos completamente del while
System.out.println(“Count is: “ + count);
count++;
}

29
Q

Cómo es el formato de los bucles do while en java?

A

do {
System.out.println(“Count is: “ + count);
count++;
} while (count < 11);

30
Q

Cómo crearías un array primitivo de enteros vacío de 5 posiciones?
Y uno ya inicializado con 5 valores?

A

int[] datos1 = new int[5];
int[] datos2 = {3,4,1,2,10};

31
Q

Cómo sería en java un for que recorra un array, y tenga disponible en cada vuelta una posición del array hasta que termine el array?

A

variable para el elemento, dos puntos, array

for (int dato : datos1) {
System.out.println(dato);
}

32
Q

Cómo es la jerarquía de interfaces y clases de las colecciones en java?

A
33
Q

Indica qué métodos importantes tienen las siguientes Interfaces/Clases

Iterable
Collection
List
Set
Queue
Dequeue

A
  • Iterable –> iterator()
  • Collection –> add(E), size(), toArray(), clear(), contains(obj), stream(), isEmpty()
  • List –> add(index,E),set(index,E),get(index),remove(index),indexOf(obj),subList(index,index),sort(Comparator)
  • Set –> nada significativo
  • Queue –> add(E), element() consulta la cabeza, peek() es un element() mejorado, offer(E) es un add(E) mejorado, poll() retorna y elimina la cabeza
  • Deque –> addFirst(E),addLast(E),peekFirst(),peekLast(),poolFirst(),poolLast(), etc
34
Q

Si en la condición de un bucle for queremos acceder al tamaño de un array y en otro a la de un ArrayList, cómo sería en cada caso?

A

array1.length
arrayList1.size()

35
Q

En los bucles con iterators, cómo se pregutna si se debe seguir recorriendo el iterator?
Dentro del bucle, cómo se obtiene cada elemento del iterator?

A

while(it.hasNext()) {
int dato = it.next();
System.out.println(“Dato: “ + dato);
}

36
Q

Con qué métodos de HashMap se extraería un Set< integer> con las claves? Y una Collection< String> con los valores?

A

.keySet()
.vaules()

37
Q

Cómo haríamos en java para convertir una cadena a una fecha?
Y para convertir una fecha Date en otra pero con otro formato?

A
  1. Crear un formato de fecha con SimpleDateFormat, pasándole un string con el patrón del formato
  2. Generar un Date a partir del SimpleDateFormat, con su método .parse() pasándole la fecha en el formato indicado anteriormente

// Convertir cadena –> fecha
String pattern = “yyyy-MM-dd hh:mm”;
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);

Date fecha1 = **simpleDateFormat.parse**("2020-09-10 11:00");
System.out.println("Fecha en long: " + fecha1.**getTime**());


//Formatear un Date 
simpleDateFormat.**format (date1)**;
38
Q

Cómo obtener la fecha actual con Calendar?

A

Crear un objeto de Calendar. Hacerle un .getTime(), devuelve Date

39
Q

Clases y métodos importantes de la nueva java.time, que sustituye a java.util.Date y java.util.Calendar

Qué son y cómo se crean / usan?

LocalDateTime
LocalDate
Instant
DateTimeFormatter
Duration
Period

A

LocalDateTime -> Almacena fechas y hora. Se crea con LocalDateTime.of(2020, Month.AUGUST, 31, 10, 20, 55);
LocalDate -> Almacena fechas. Se le puede llamar al método estático LocalDate.now() para obtener la fecha actual
Instant -> Representa un momento en el tiempo, con precisión nanosegundos. Se le puede llamar al método estático Instant.now() para crear uno con el momento actual
DateTimeFormatter -> formateador del tipo SimpleDateFormat antiguo. Con el método estático .ofPattern(“formato”) se crea. Se les puede pasar a los LocalDate al método .format(dateTimeFormatter), para formatearlos.
Duration -> intervalo de tiempo entre dos LocalDateTime, orientado a nanosegudos o segundos -> Duration.between(inicioDateTime,finDateTime);
Period -> Intervalo de tiempo entre dos LocalDate -> orientado a días, meses o años ->
Period periodo = Period.between(inicioDate, finDate);

40
Q

En java cómo declaramos una anotación?
Al declararla, qué significan las anotaciones @Retention y @Target?

A

Con @interface

@Retention(RUNTIME) // Esta anotacion estará disponible (por reflexion) en el bytecode de la clase (en memoria)
@Target(METHOD) // Nos indica que solo podemos usar esta anotacion sobre un metodo
public @interface Seguridad {
public String rol();
}

41
Q

Static en java:

  1. Se puede importar un método estático en una clase?
  2. Un método estático (de clase) puede acceder a un atributo no estático (de objeto) de una clase?
A
  1. Sí, con la palabra static e indicando el método de la clase -> import static es.tai.estaticos.Util.metodoEstatico;
  2. No, porque para acceder a un atributo no estático hay que tener un objeto. No hay .this sin objeto.
42
Q

Diferencia entre sobreescribir y sobrecargar un método

A

Sobreescribir implementar un método en la clase hija de igual nombre y número y tipo de atributos que el del padre. Se pone @Override en la hija para indicar que estamos sobreescribiendo.
Al sobreescribir se pued hacer una sustitución (sobreescritura total) o una ampliación (llamar dentro al super.metodo())

Sobrecargar es implementar un método en la clase hija de igual nombre, pero de distinto nº o tipo de parámetros.

43
Q

Si una clase hereda de una clase abstracta, qué hay que hacer para no declararla abstracta?

A

Implementar todos los métodos abstractos de la clase padre

44
Q

Se pueden implementar métodos en una interfaz, o sólo declarar?

A

Ahora se pueden implementar también, con el modificador default, a partir de java 8

public default void h() {
System.out.println(“f() de Clonable”);
}

45
Q

Cuando se implementan interfaces es una clase, cómo se puede referenciar a un método default de la interfaz/es?

A

Como si fuese a la clase padre, pero indicando la interfaz (por si hay varias)

Clonable.super.h();
Cerrable.super.h();

46
Q

Qué dos formas hay en java de crear y arrancar hilos?

A
  1. Crear una clase que herede de Thread, y sobreescribir el método run(). Esto hace que los objetos de esta clase nuestra ya sean hilos. Cuando al hilo le hagamos .start() se pondrá a la cola del planificador
  2. Crear una clase que implemente Runnable y sobreescribir el método run(). Para crear un hilo tenemos que hacer un Thread hilo = Thread.newThread(objetoDeNuestraClaseRunnable). Al hilo ya le podemos hacer .start() para ponerlo en el planificador.
47
Q

Qué se hará en una clase que haga de monitor para controlar el acceso de hilos a un recurso compartido?

A

Declarará los métodos como synchronized para que solo puedan ir de uno en uno dentro de ese método, o crear un bloque synchronized
Los parará y reanudará con wait() y notify()

48
Q

Qué dos tipos de excepciones podemos declarar?
Qué diferencias hay entre ellas?

A

Checked -> public class ValidacionException extends Exception{}

Unchecked -> public class BBDDExcepcion extends RuntimeException{}

Las checked es obligatorio tratarlas, las unchecked no

49
Q

Cómo se hace para ejecutar un código que abre recursos y que estos sean cerrados al terminar el try?

A

// La nueva sentencia try-with-resources libera automaticamente el recurso “writer” llamando a su metodo close()
// Para que esto funcione el objeto tiene que pertenecer a una clase que implemente el interface Autocloseable
try (PrintWriter writer = new PrintWriter(new File(“test.txt”))) {
writer.println(“Hello World”);
} catch (FileNotFoundException e) {
e.printStackTrace();
}

50
Q

Para diseñar las clases de la capa de datos en java, qué estrategias hay.

A

DAO - Data Access Object
ActiveRecord
DataMapper
Repository

No confundir DAO con DTO, que es Data Transfer Object, que es un objeto serializable para el intercambio de datos, no para el acceso a datos.