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étoo 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 break si no se tiene explicitamente el break.
  • ¿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);