Java Minucioso Plus
-
Java Minucioso
Acceder a variables de instancia protected y private
R=Si es posible acceder a variables de instancias protected
siempre y cuando estén en el mismo paquete. También se puede
acceder a variables de instancia private siempre y cuando se estén
en el mismo archivo.
Acceder a métodos protected y private
R=Si se puede acceder a métodos protected siempre y cuando estén
en el mismo paquete. No se puede acceder a métodos private.
Inicializacion en clases extendidas e interfaces
Constructores de la clase padre, siempre se inicializan primero,
si el padre no tiene un constructor por default, hay que mandar
llamar el constructor correcto manualmente.
Mismo nombre de método en clases extendidas e interfaces
No crea conflicto el tener métodos con el mismo nombre en la
clase padre y en una interfaz a implementar, pero por ser un método
de una interfaz, la clase hija está obligada a implementar el
método, por lo sobre-escribiría la implementación(si existiera
una), de la clase padre.
Arreglos; si se salta la asignación de los primeros elementos, como
quedan los valores anteriores:
int arreglo[]=new int[2];
arreglo[0]=1;
arreglo[1]=2;
arreglo=new int[4];
arreglo[2]=10;
arreglo[3]=20;
Los primeros dos elementos de arreglo tienen el valor de Cero.
Paso por referencia y por valor objetos y primitivos.
Los primitivos, se pasan por valor a los métodos, por lo que no
se modifica el original. Los objetos se pasan por referencia, por lo
que un cambio si modifica el original.
Que
es la sobrecarga de métodos.
Si un fragmento de código nunca se alcanza marca error de
compilación.
Si, pej. si dentro de un for, si se cumple una condición colocas
brake en otro modo un continue, si colocas otra linea de código
abajo de ésos dos, marca un error de compilación ya que dicha linea
es unreachable.
¿Que pasa cuando se manda llamar explicitamente en psvm de otra
clase (cuando se hereda p.ej.?
Si se puede mandar llamar, como cualquier otro método, igual se
le tiene que pasar como parametro args.
¿Un método puede tener el mismo nombre que un field?
Si es posible tener un field y un method con el mismo nombre de
identificador.
Diferencia checked/unchecked exception
Unchecked exceptions: ligados con errores de lógica, que se
pueden prevenir (RuntimeException,Error).
Checked Exceptions: errores que el programa no puede saber si van
a ocurrir o no, puede llegar a ser algo random, por lo que hay que
manejarlas obligatoriamente.
¿Cuando se lanza explicitamente un throw del tipo RuntimeException,
es necesario cachearlo?
No es necesario cachearlo o manejarlo pero igual producirá un
error en tiempo de ejecución.
Precedencia de operadores modulo
El operador módulo %, está en el mismo nivel de precedencia que
la división y la multiplicación.
And & a nivel de bits, ¿Cómo funciona?
manejarlo igual que el and normal, true & false=true;
¿El método main, tiene que ser público | se puede tener final?
Obligatoriamente tiene que se público y estático, también puede
ser final.
Si la clase A, hereda de la clase B, si se instancia una clase de la
clase A, a una referencia de la clase B,¿Se puede llamar métodos de
la clase A, que no estén en la clase B?
class B
class A extends B
B a=new A()
Es posible siempre y cuando se haga un cast, antes de llamar a tal
método ((A)a).metodo()
¿El método concat de String, en realidad no lo concatena con la
variable actual?
El método concat, no altera a la cadena original, más bien
retorna una nueva cadena concatenada.
¿Si se tiene una Excepción personalizada, como se imprime en el
catch?
aparece el nombre de la clase de Excepción lanzada, aun y cuando
throws, sea Exception.
¿Que pasa si se hereda una clase de otro paquete y tiene un método
abstracto y su modificador está como protected?
Si es posible implementar dicho método
No es posible implementarlo si el método no tiene un modificador
de acceso explicito (está default) ya que están en distintos
paquetes.
¿Un método abstract puede tener cuerpo?
No, un método abstract, no se le puede colocar cuerpo, se tiene
que terminar en ";"
En el siguiente do-while, como se evalua num: do{}while((num--)>1);
es post-incremento, supongamos que num tiene un valor inicial de
10, se ejecutaria el do-while 10 veces del 10-1.
¿Que pasa si se manda llamar, un método private de un padre, desde
la hija (probar para mismo paquete y diferente paquete)?
No es posible mandar llamar métodos private de un padre, ni en el
mismo paquete ni en diferente paquete.
¿Las clases abstractas pueden tener psvm y correr?
Si es posible correr psvm dentro de una clase abstracta
¿Si declaras un list<Integer>, solo se le puede add, de ése
tipo?
Si, si se especifica <Clase>, se debe respetar al agregar
objetos solo de ése tipo.
¿Integer es una clase?, ¿se pasa por valor o referencia?
Es una clase, al igual que String son inmutables, por lo que al
pasarlo a un método, y en el método modificarlo, una vez, devuelta
al método de llamada, su valor sigue siendo el mismo, que antes de
la llamada.
Comparación de cadenas con el mismo contenido, solo agregando "",
al inicio ¿Que resultado arrojan?
con ==, da false, siempre y cuando a la cadena2, se le agregue
""+cadena1
¿Cuando ocurre un ArrayIndexOutBoundException y un
StringIndexOutBoundException(aprox)?
El primero cuando el índice proporcionado para acceder a un
elemento del array está fuera de rango.
El segundo cuando se utiliza .substring(0,10), y los índices
están equivocados.
Si se tiene un field static, ¿dentro de un psvm se puede usar solo
con el identificador?
Si es posible acceder al field static desde el psvm, aún y cuando
la clase sea abstract
¿como funciona post/pre-incremento, post/pre-decremento, dentro del
if/while/for?
En el caso de pre-decremento/pre-incremento, el ciclo se ejecuta
uno(+-) del esperado ya que primero se actualiza, luego se compara.
¿Si una clase tiene un método abstracto que tiene throws, se puede,
sobreescribir (con herencia) ése método con una clase Exception
inferior y superior?
Si se intenta sobreescribir el método con una clase de nivel
superior a la de la clase abstracta marca error de compilación.
Si se intenta sobreescribir el método con una clase de nivel
inferior NO marca error.
¿Se puede colocar un throws y no lanzarlo explicitamente?
Si, es posible colocar el throws y no lanzarlo con throw
explicitamente
¿Si se implementa una clase que tiene un método con protected, se
puede sobreescribir colocandole public?
Si es posible colocar el modificador de acceso de public en la
sobreescritura, pero NO es posible aumentarle la seguridad
colocandole private.
¿Que pasa si se hereda una clase que tiene un constructor como
private?
Marca error de compilación, se tiene que tener almenos un
constructor visible, para poder llamarlo desde la clase hija ya sea
explicitamente o automatica.
¿Que pasa si se instancia una clase que tiene un constructor como
private?
Marca error de compilación
¿Las clases con "final", se pueden heredar/instanciar?
Si se pueden instanciar pero NO heredar.
¿Que pasa si se hereda una clase que no tiene modificador de acceso
explicito y está en otro paquete?
Es inalcanzable, no se puede heredar, marca error de compilación
¿Quien executa psvm?
JVM o se puede ejecutar explicitamente si se está ya dentro de
otro psvm de otra clase.
¿Se puede tener varios constructores como private, pero
sobre-cargados?
Si es posible tener varios constructores private, pero con
distintos parametros.
¿Puede una clase abstracta implementar una interfaz?
Si es posible implementar una interfaz en una clase abstracta, y
no es necesario implementar sus métodos ya que como es abstracta no
es obligatorio.
¿Los arrays se pasan por referencia o por valor(si los modifico en
un método, se cambia el original)?
Los arrays se pasan por referencia, a excepción de cuando se
tiene un método con la siguiente forma de recibir parametros:
(int... args)
Cuando se le pasa el array como tal, se pasa por referencia
Pero cuando se le pasa de uno por uno, se crea uno nuevo
¿Comaración de cadenas sin equals, cuando si son true y cuando
false?
con equals, si la cadena dice lo mismo es true, incluso si se
concatenó ""+cadena
sin equals, si son concatenaciones con cadena vacia a una cadena
ya establecida el resultado es true
sin equals, si la cadena a comparar se concatenó con caracteres
de un array de char's, el resultado es false
¿El método getClass(), obtiene el de la referencia o el de la
instancia?
Obtiene la información de la instancia
¿Se puede mandar llamar un método en la tercera expresión en un
for?
Si es posible mandar llamar métodos en la 3era expresión del
for.
¿Si no se tiene brake, en un switch, también alcanza el default?
Si, se alcanza el default si no se tiene explicitamente el break
en ninguno de los case anteriores al default.
¿En la herencia, se puede sobreescribir un método con el mismo
nombre pero distinto tipo de retorno?
NO es posible sobreescribirlo con un tipo de retorno distinto.
¿Cómo funciona indexOf de la clase List?
retorna el indice de la primera ocurrencia del objeto pasado, hace
la busqueda en base a la instancia no del tipo de clase.
Es distinto buscar Object o=new Object(), indexOf(o), a buscar
indexOf(new Object);
si no encuentra una ocurrencia retorna -1.
¿La clase AssertionError en que categoria cae(checked/unchecked)?
Cae en la categoria de unchecked exception
¿El método getClass() y getName(), obtienen la información de la
instancia no de la referencia?
Si, los dos métodos obtiene la información de la clase
instanciada (new)
¿Si un método recibe como parametro un List, se puede pasarle un
ArrayList?
Se puede si es una instancia, pero la referencia es List ej. List
p=new ArrayList();
Ya que ArrayList hereda a List.
No se le podría pasar directamente un tipo List, porque es una
interfaz y no se puede instanciar.
¿El psvm puede mandar llamar métodos private?
si puede siempre y cuando psvm esté dentro de la misma clase que
tenga el método private
También puede mandar llamar atributos, siempre y cuando psvm esté
dentro de la misma clase que tenga el atributo.
¿La clase Integer, se pasa por valor o por referencia?
La clase Integer asi como la String, son inmutables.
Cuando la clase A, y la interfaz B, tienen el mismo nombre para un
método, y la clase C, hereda a la clase A e implementa la interfaz
B, no es necesario implememntar el método en C, siempre y cuando en
la clase A ya esté escrito.
Correcto, no es necesario implementar el método siempre y cuando
ya esté implementado.
StringBuilder solo son válidos los siguientes métodos para agregar
contenido
insert(index,cadena);
append(cadena);
¿Cuando
se agrega un item con add en (ArrayList/List), especificando el index
siguiente marcaría error?
/*
List
colors=new ArrayList();
colors.add("green");
colors.add("red");
colors.add("blue");
colors.add("yellow");
colors.remove(2);
colors.add(3,"cyan");
System.out.println(colors);
*/
R=Si
el index que sigue es ese no marca error, pero si es uno mayor
inexistente o que ya no es consecutivo, marca error
(java.lang.IndexOutOfBoundsException).
El
módulo al igual que la división, marca error en tiempo de ejecución
cuando es cero en el dividento
0%1=0
1%0=java.lang.ArithmeticException
El
break solo se puede usar en switch y loop’s, si se usa en if
R=Marca
error de compilación
Al
heredar e implementar, solo es posible utilizar como variable de
referencia el tipo mayor
/*
interface
Pet{
}
class
Dog implements Pet{
}
class
Beagle extends Dog{
}
solo
es posible:
//Beagle
c=new Dog(); NO
Dog d=new Beagle();
Pet e=new Beagle();
//Pet b=new Pet(); NO
Pet a=new Dog();
//Dog f=new Pet(); NO
*/
*/
Sobre
la estructura de una clase de Java:
R=un
método puede tener el mismo nombre que una variable de instancias
las
variables de instancia no necesitan ser inicializadas, antes de
usarse
una
clase puede tener metodos estáticos sobrecargados
En
la declaración de una variable del tipo array, solo se permiten
corchetes, sin numero de tamaño de arreglo.
¿Diferencia
entre throw & throws?
R=
throw:
es el encargado de lanzar las excepciones explicitamente
throws:
es el que avisa que un método puede lanzar una excepción
Si
estamos manejando try-catch-finally, y en el try lanzamos el return,
antes de pasar el control se correo finally SIEMPRE.
En
concatenaciones y sumas de numeros, lo que esté de lado izquierdo se
suma y lo del lado derecho se concatena tal cual. Ej. 10+2+"SUN"+4+5
R=12SUN45
Al
heredar una clase que ya tiene un método con tipo de retorno
definido no se le puede implementar y cambiar el tipo de retorno, es
un error de compilación.
En
switch y case son case sensitive, si por una letra es mayuscula no
entra a ese case.
En
Java es correcto colocar corchetes antes y despues del identificador
de variable: ej. int []ar[];
El
operador ternario en JAVA es válido asi como también separar miles
con guin bajo:
R=float
var1=(12_345.01>=123_45.00)?12_456:124_56; //es correcto
Cuando
se hereda una clase que ya implementa un metodo main, si no se define
en la clase hija se manda llamar automaticamente, en caso que la hija
si la defina en ningún momento se manda a llamar al main de la clase
padre, a menos que se haga de forma explicita.
Cuando
una clase implementa y hereda clase e interfaz con un mismo método y
a en la clase hija se sobre-escribe el metodo, al mandarla llamar
parseando a su padre y la interfaz y mandando llamar el método en
cuestión, siempre ejecutará el implementado por la hija ya que es
la instancia que se creo.
class
Star
{
public void doStuff()
{
System.out.println("Twinkling Star");
}
}
interface
Universe
{
public void doStuff();
}
class
Sun extends Star implements Universe
{
public void doStuff()
{
System.out.println("Shining Sun");
}
}
public
class Bob
{
public static void main(String[] args) {
Sun obj2=new Sun();
Star obj3=obj2;
((Sun)obj3).doStuff();
((Star)obj2).doStuff();
((Universe)obj2).doStuff();
}
}
Estructura
de arraycopy
R=public
static void arraycopy(Object src, int srcPos, Object dest, int
destPos, int length)
Si
es posible definir clases dentro de otra clase
Para
declarar metodos abstractos, solo es posible si la clase tiene el
modificador de acceso abstract
Algunos
métodos últiles de StringBuilder:
-
public CharSequence subSequence(int start, int end)
-
public StringBuilder deleteCharAt(int index)
-
public StringBuilder reverse()
El switch sólo acepta:
-
int
-
Integer
-
String
Si se tiene dentro de un método throw explicitamente se tiene que definir en el método como throws, sino marca error de compilación.
En
el módulo: % solo el lado izquierdo puede ser 0, si el lado derecho
es 0, marca error en tiempo de ejecución.
¿Cómo
sobre-cargar métodos estáticos?
R=
Cuando
no se coloca un modificador de acceso a una variable de instancia
¿que modificador toma?
R=
¿El
garbage collection se lleva objetos o referencias?
R=