Java Minucioso Plus


  1. 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=