lunes, 16 de junio de 2014

Introducción Java

MODULO I

Formas de main
//arreglo definido, correcto
public static void main(String []a){
  System.out.println("Perro Ladrando");
}


//arreglo definido, correcto
public static void main(String ... a){
  System.out.println("Perro Ladrando");

}

//arreglo definido, correcto
public static void main(String a []){
  System.out.println("Perro Ladrando");

}

//Error de compilación 
public static void main(String a ...){
  System.out.println("Perro Ladrando");
}


//Error de compilación
public static void main(String.*a){
  System.out.println("Perro Ladrando");


}


En los métodos
//Arreglos de muchos valores (Elementos variables, no se cuanto son)
public static void main(String...a){
  System.out.println("Perro Ladrando");
}

//Correcto
public static void a(String[]...a){ //Arreglo de dos dimensiones
  System.out.println("Perro Ladrando");
}

//Correcto
public static void a(String[][] ...a){ //Arreglo de tres dimensiones [0][1]0[]
  System.out.println("Perro Ladrando");
}

//Error de compilación
public static void a(String[] a ...){
  System.out.println("Perro Ladrando");
}

//Error de compilación
public static void a(String a ...){
  System.out.println("Perro Ladrando");
}

//Correcto
public static void a(String ... a ){ // Define un arreglo.
  System.out.println("Perro Ladrando");
}

//Incorrecto
public static void a(String ...  ... a ){ //No se puede definir de esa forma
  System.out.println("Perro Ladrando");
}

//Incorrecto
public static void a(String [][]a ){ //incorrecto, no representa el método main
  System.out.println("Perro Ladrando");
}

//Incorrecto
public static void a(String []  ... a ){ //incorrecto, no representa el método main
  System.out.println("Perro Ladrando");
}

Problema:

Given:
11. class Mud {
12. // insert code here
13. System.out.println("hi");
14. }
15. }
And the following five fragments:
public static void main(String...a) {  //1
public static void main(String.* a) {  //2
public static void main(String... a) {  //3
public static void main(String[]... a) { //4
public static void main(String...[] a) { //5
How many of the code fragments, inserted independently at line 12, compile?
A. 0
B. 1
C. 2
D. 3
E. 4
F. 5


Answer: D
Porque la primera es correcta porque define un arreglo de String y por lo tanto la 3 también es correcta y la 4 también compila por lo tanto es la tercera aunque está última tiene un error de ejecución, compila porque es correcta la definición de un arreglo doble.


Maquina virtual
Convirte .java a .class

La maquina virtual NO garantiza que cuando hay un objeto nulo ejecute el recolector de basura, se le puede sugerir (clase System.gc() y en clase Object) pero no se puede obligar.
    La maquina virtual y el SO decide cuando pasa (iunterrupción, llamar a un Hilo para que valla)

Elimina Objetos nulos. Cuando ya fue utilizado y ya no esta referenciado

public static void main(String []a){
Perro p = new Perro();
Perro p1 = new Perro();
Perro p2 = new Perro();
} //Recolector de Basura


Objetos candidatos para el recolector de basura
public static void main(String.*a){
//  System.out.println("Perro Ladrando");
Perro p0 = new Perro();  //Es Variable (tiene tipo de dato), Objeto (Existe clase), 
//Instancia se crea uno nuevo
Perro p1 = new Perro();
Perro p2 = new Perro();
Perro p4 = p0;
p0 = p2;
p2=null;
//cuando voy aqui
}

R.- 0. Los objetos se utilzan.

Objetos candidatos en memoria 
public static void main(String.*a){
//  System.out.println("Perro Ladrando");
Perro p0 = new Perro();  //Es Variable (tiene tipo de dato), Objeto (Existe clase), 
//Instancia se crea uno nuevo
Perro p1 = new Perro();
Perro p2 = new Perro();
Perro p4 = p0;
p0 = p2;
p2=null;

} //cuando voy aqui (ya paso) 
}

R.- Todos porque ya termino el método y no hay forma de accesarlos

EJERCICIOS DEL RECOLECTOR DE BASURA


QUESTION NO: 1

Given:
3. class Animal { void makeNoise(){} }
4. class Horse extends Animal {
5. Long weight = 1200L;
6. public void makeNoise() { System.out.println("whinny"); }
7. }
8. public class Icelandic extends Horse {
9. public void makeNoise() { System.out.println("vinny"); }
10. public static void main(String[] args) {
11. Icelandic i1 = new Icelandic();
12. Icelandic i2 = new Icelandic();
12. Icelandic i3 = new Icelandic();
13. i3 = i1; i1 = i2; i2 = null; i3 = i1;
14. }
15. }
When line 14 is reached, how many objects are eligible for the garbage collector?
A. 0
B. 1
C. 2
D. 3
E. 4
F. 6

R.- E
Por que cada uno de las instancias tiene un objeto Long y ese tiene un objeto 1200L, por lo tanto cada uno de los objetos que se pierden i3 e i1 tenian dentro 2, por lo tanto no son alcanzables

Alcanzable -> llega pero todavía no pasa.
Rebazada -> ya se ejecuto esa linea

Long -> Clase
long -> Primitiva

Errorres de compilación y Ejecución
4 Archivos...


La firma significa que todo esta como debe estar, elementos correctos (sintactica)


Compilar con la opcion -d
La opción -d de índica en que directorio guardar el .class de la clase a compilar

Desktop > javac -d

TIP_ tener en cuenta en que directorio estas, donde estan los .java y dónde quieren poner los .class, verificar que existen esos directorios .

Para si estan en diferentes carpetas y te piden compilar un archivo.java pero que el archivo.class se ponga en otro lado, entonces debemos salirnos de los dos y acceder a los otros.


Desktop/UAEMFI/Perro.java
Desktop/MisClass

Desktop> javac -d MisClass UAEMFI/Perro.java

Compila Perro.java que esta en Desktop/UAEMFI/Perro.java y los .class los pone en Desktop/MisClass/Perro.class


Todas las sentencias en java terminana en punto y coma (;).



METODOS QUE PERMITEN sugerir  a la JVM que ejecute el recolector de basura
De la clase Object - > finalice
De la clase System -> gc()




Ejemplo de métodos con argumentos variables
public class BN{
         public static void main(String[] args) {
            int [] x = {1,2,3};
            int [] y = {4,5,6};
            int [] w = {4,5,6};
         
            new BN().go(x, y, w);
         
         }
       
         void go(int [] ...  z){
             for (int[] a : z) {
                 System.out.print(""+a[0]);
             }
         }
       

    }

-- output --
144

Se imprime la posición cero de todos los arreglos que se le pase.