b3t6 - LAB Java básico Flashcards
Modificadores de acceso
Cuál es la diferencia entre la visibilidad “default” y la protected?
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
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?
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;
Qué es característico del tipo String en Java?
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.
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
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)
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?
String-Buffer (thread-safe)
String-Builder
s1.insert(2,”aaa”).append(“bbb”)
Las clases java heredan de Object. Es necesario especificarlo poniendo el extends Object?
No es necesario
Cómo se crea un constructor para una clase?
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){
}
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
hashCode(), wait(), notify(), notifyAll(), getClass() y clone()
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?
public String toString()
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?
protected void finalize() throws Trhowable{}
Qué método de Object sobreescribirías en tu clase para comparar dos de sus objetos?
public boolean equals(Object obj){}
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?
Clase -> @author, @version
Método -> @param, @return
El identificador de una clase, método, variable, … por qué caracteres pueden comenzar?
Y en javascript, php y phyton?
Por una letra, guion bajo “_” o dólar “$”
Por comparar
En javascript es igual, pero también puede comenzar por por número
En PHP debe empezar por $, y luego cualquier letra o guión bajo _
En Phyton debe empezar por letra o guión bajo _
El identificador de una clase, método, variable, … por qué caracteres pueden comenzar?
Por una letra, guion bajo “_” o dólar “$”
Indica el nº de bits de los tipos primitivos
float
double
char
byte
int
short
long
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
Cómo son los operadores aritméticos en java
suma
resta
división entera
multiplicación
resto
, - , + , / (division entera), *, % (resto)
Qué diferencia hay entre ++variable y variable++?
++variable(incremento en +1, previo a usar la variable),variable++(incremento en +1, posterior a usar la variable)
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?
variable+=valor
Operadores de comparación en java
igual
distinto
mayor
menor
mayor o igual
menor o igual
// ==, != (distinto), “<”, “>”, “<=”, “>=”
Operadores lógicos de bit
// (negación o complemento), (or binario), (xor binario), (and binario)
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)
Operadores de Desplazamiento de Bits
“»
«
> > >”
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)»_space; (valor_binario2)
(valor_binario1)»_space; (valor_binario2)
(valor_binario1)»_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) «_space;(0001) // Desplaza 0011 una vez dando 110
(0011) «_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)»_space; (0001) // Desplaza 1100 una vez dando 0110
(1000)»_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»_space; 1 // Sería 12 / 2 = 6
12»_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»_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»_space;> 0011 // Desplaza tres a la izquierda dejando 0001 1100
Operadores lógicos o booleanos
// (not logico), (or logico cortociruito), (and logico)
Operadores lógicos o booleanos
// ! (not logico), || (or logico cortociruito), && (and logico)
Cómo se hace un if en línea?
?: (if en linea)
booleanExpression ? expression1 : expression2
Cómo se comprueba en java si un objeto es compatible con cierto tipo?
/ 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!!”);