lunes, 14 de julio de 2014

Modulo 3: Paso de parámetros

En java puedes pasar parámetros por valor o por referencia.

Paso por valor: significa que le pasas un copia del valor que tiene una determinada variable y esto sólo es posible para tipos de datos creados por java (int, Integer, String, short, Short, etc. ).

Paso por referencia: Este existe para los tipos de datos creados por java y los de usuario, sólo que se comportan de forma un tanto diferente. En general consiste en pasar la referencia (dirección) dónde se encuentra el objeto creado, es decir, es pasar el *control total del objeto para que éste pueda ser modificado.

*En el caso de los tipos de datos de java no se ofrece el control total, sino que se se le pasa una copia de la referencia y se tiene su propia copia, cuando el objeto cambia no se ve afectado en la variable anterior.
Ejemplo:

//En el main
int x = 5;
int y;
suma(x, y); //se pasa una copia de la referencia de x y de y.
System.out.println(x); //el resultado no se afecto y es 5

suma(5, 4); se pasa directamente el valor.

//fuera del main
static void suma (int x, int y){ /
x++;
System.out.println(""+(x + y));

}

De alguna manera podemos decir que en los datos nativos de java sólo existe el paso por valor aunque hay dos formas de hacerlo como ya lo pudimos ver.

* Para el caso de los tipos de datos creados por el usuario ahí sólo existe en paso por referencia y es precisamente lo que explicaba anteriormente.
Ejemplo :

class Persona{
private String nombre;

    public String getNombre() {
        return nombre;
    }

    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

}

class TestPersona{
    public static void main(String[] args) {
        Persona p = new Persona(); //se crea un objeto de la clase persona
        p.setNombre("Pedro"); //le pone un nombre a la persona.
        System.out.println(""+p.getNombre());// vemos que ya tiene nombre
        cambiaNombre(p);
        System.out.println(""+p.getNombre()); //nos muestra el nombre
    }
   
    public static void cambiaNombre(Persona p){
        p.setNombre("Juan");
    }
}

Como se puede ver se le paso el control total del objeto para que lo modificara.














viernes, 11 de julio de 2014

SQL Server
Es una base de datos que ofrece Microsoft útil para almacenar grandes cantidades de registros y muy fácil de usar.

Copiar el contenido de una tabla a otra
 INSERT INTO polizasCopia11072014 SELECT * FROM polizas

En polizasCopia11072014 se copia todo lo que hay en polizas

martes, 8 de julio de 2014

Modulo extra: Codigo de la API

La clase String genera objetos inmutables, que no pueden cambiar de estado

La clase string utiliza un mecanismo para ahorrar memoria

La clase String es final y no  puede sobreescribir objetos.

String
        //equalsIgnoreCase: este metodo verifica el valor sin considerar minusculas o mayusculas
        System.out.println("metodo equalsIgnoreCase " + exit.equalsIgnoreCase("EXIT"));
        System.out.println("metodo equalsIgnoreCase " + exit.equalsIgnoreCase("exit"));

System.out.println("metodo notPool.subString(11): "+notPool.substring(30, 32)); //incluye el 30 pero 32 no



Expresiones Regulares
. cualquier dato
\d digito del 0 -9
\s un caracter de espacio en blanco
\w un caracter [a-zA-Z_0-9]



Uso de Date







viernes, 4 de julio de 2014

Modulo 15: Hilos

Se puede crear hilos de dos formas
- Por herencia a través de la clase Thread
- implementando, con la interfaz de Runnable (Recomendable y más usada)


Es dificil ejecutar cuál hilo se ejecuta primero , es decir se necesitan ver el código de la máquina virtual y del SO para saber.

Todos los hilos se crean con una prioridad y se determina con un valor, el cuál no necesariamente necesita que se ejecute primero, la máxima prioridad es 10 y la mínima es 1, y la media es 5 y es por default, AUN CUANDO SE LE ASIGNE UNA PRIORIDAD -NO- Los va a ejecutar primero de acuerdo a la prioridad.

Constructores
Thread()
          Allocates a new Thread object.
Thread(Runnable target)
          Allocates a new Thread object.
Thread(Runnable target, String name)
          Allocates a new Thread object.
Thread(String name)
          Allocates a new Thread object.
información desde: http://docs.oracle.com/javase/6/docs/api/

Métodos
run() -> El código de nuestro hilo
start() -> invoca el código del hilo, es decir ejecuta a run pero lo ejecuta en un nuevo subproceso (Hilo)
stop()

Si te es un objeto de una clase que extiende de Thread y que dicha clase tiene el método hilo.
t.run(); // ejecutaría un método run.
t.star(); // ejecuta el método run, pero como un subproceso

Para un hilo se necesita, debe de tener las tres para tener un hilo
CPU - son las invocaciones de los hilos ua, ua1.
Codigo (todo lo que tengamos en run)
Date


No se debe tener dos start() en un mismo hilo, porque manda un error de inicialización.

Siempre existe al menos un hilo el del main

Los hilos se lanzan casi al mismo tiempo, la máquina virtual y el SO lo definen, solo que hay que tener cuidado.
Ejemplo de dos personas que quieren con dos tarjetas en diferentes tarjetas y diferente cajero utilizan su tarjeta 

join(): lo que hace es decir espera a que termine el hilo que se esta ejecutando, se lo dice al que quiere entrar.

otra manera de obtener los mismo, es usar el método para sincronizar
















jueves, 3 de julio de 2014

Modulo 13: Fechas, numeros y monedas

public class EjCD {
    public static void main(String[] args) {
        Date d = new Date();
        System.out.println("Fecha actual del sistema: "+d);
     
        Date d1 = new Date(2014 -1900, 06,2);
        System.out.println(""+d1);
        //año 1900
        // mes desde el 0 al 11
     
        Date d3 = new Date(30000000L); //milisegundos que han transcurrido desde 19970
        System.out.println("d2= "+d3);
    }
}

poner atención a estos métodos
getDateInstance();








Para la localidad puedes ir a
The language argument is a valid ISO Language Code. These codes are the lower-case, two-letter codes as defined by ISO-639. You can find a full list of these codes at a number of sites, such as: 
http://www.loc.gov/standards/iso639-2/englangn.html


The country argument is a valid ISO Country Code. These codes are the upper-case, two-letter codes as defined by ISO-3166. You can find a full list of these codes at a number of sites, such as: 
http://www.iso.ch/iso/en/prods-services/iso3166ma/02iso-3166-code-lists/list-en1.html

Modulo 12: Objetivos Fundamentales (classpath)

Las classpaths realizan la búsquedas de izquierda a
derecha:
> -classpath /com:/foo:.  
• No es lo mismo que:
> -classpath .:/foo:/com

El punto (.) significa que busque en el directorio actual y el : en linux o ; en windows significa busca en otro lado es como el o lógico


Archivos jar

miércoles, 2 de julio de 2014

MODULO 11: Consola I/O

Salida con formato

public class SFO {
    public static void main(String[] args) {
        double nd = 123.4567;
        System.out.printf("%08.2f %n", nd);
        //Son 8 por todos los caracteres incluyendo el punto
        // 2 significa que son dos digitales a la derecha.
        //f -> flotantes, double. %g -> Notacion cientifica
        //%d %o %x Entero, decimal, octal, o hexadecimal.
        //%n nueva linea al igual que \n
        //%s String
    }
}

Preguntas en evaluación lo siguientes métodos
 StringreadLine()
          Reads a single line of text from the console.
LOS MÉTODOS ESTÁN SOBRECARGADOS
 char[]readPassword()
          Reads a password or passphrase from the console with echoing disabled

OBSERVACIÓN: RedLine en cualquiera de sus formas regresa un STRING y readPassword  regresa un arreglo de caracteres char[].

Ejemplo de preguntas:
QUESTION NO: 1

Given:
5. import java.io.*;
6. public class Talk {
7. public static void main(String[] args) {
8. Console c = new Console();
9. String pw;
10. System.out.print("password: ");
11. pw = c.readLine();
12. System.out.println("got " + pw);
13. }
14. }

If the user types the password aiko when prompted, what is the result?

A. password:
got
B. password:

got aiko
C. password: aiko
got aiko
D. An exception is thrown at runtime.
E. Compilation fails due to an error on line 8.

Answer: ?

.
.
.
.

Answer E

Console no se puede instanciar porque su constructor es privado, para instanciarlo se utiliza:
Console c = System.Console();

QUESTION NO: 2

Given that c is a reference to a valid java.io.Console object, which two code fragments read a line of text from the console? (Choose two.)

A. String s = c.readLine();
B. char[] c = c.readLine();
C. String s = c.readConsole();
D. char[] c = c.readConsole();
E. String s = c.readLine("%s", "name ");
F. char[] c = c.readLine("%s", "name ");

Answer: ?

.
.
.

Answer: A, E

QUESTION NO: 3

Given that c is a reference to a valid java.io.Console object, and:
11. String pw = c.readPassword("%s", "pw: ");
12. System.out.println("got " + pw);
13. String name = c.readLine("%s", "name: ");
14. System.out.println(" got ", name);
If the user types fido when prompted for a password, and then responds bob when prompted for a name, what is the result?

A. pw: got fido name: bob got bob
B. pw: fido got fido name: bob got bob
C. pw: got fido name: bob got bob
D. pw: fido got fido name: bob got bob
E. Compilation fails.
F. An exception is thrown at runtime.

Answer: ?
.
.
.
.
.

Answer: E
Error en linea 11 porque readPassword regresa un arreglo de caracteres


-- Parentesis -----------------------------------------------------------------------------------------------
boolean assert = true; //En la versión 6, 5 y 4 de java es palabra reservada pero en las versiones anteriores es una palabra normal.
------------------------------------------------------------------------------------------------------------

Clase Scanner

public class EjCS {
 
    public static void main(String[] args) {
         Scanner sc = new Scanner(System.in);
//         int i = sc.nextInt(); //Solo recibe enteros, si es otra cosa marca error
//         System.out.println("Leí: "+i);
         String s="";
     
         while(sc.hasNext()){
           
             if(sc.nextLine().equals("x") ){
             break;
            }
           
             s += sc.nextLine();
             System.out.println("Leí: "+s);
         }
       
    }

}

Entrada y Salida de archivos
Para esto podemos leer y escribir de un archivo y una forma de hacerlo es así:

------------------------------------------------------------------------------------------------------------
public class CFD {
    public static void main(String[] args) {
        //crear objeto File para directorio
        try {
            File md = new File("MiArchivo");
            File f = new File(md, "file_1.txt");
            md.mkdir();
            try {
                f.createNewFile();
             
                //Leer desde el teclado y escribir en el archivo creado.
                InputStreamReader isr = new InputStreamReader(System.in);
                //crear buffer de lectura
                BufferedReader br = new BufferedReader(isr);
             
                //Escribir en el archivo
                PrintWriter pw = new PrintWriter( new FileWriter(f, true) ); //El true es para que agregue
                System.out.println("Ingresa texto!");
             
                String s="";
                //Leer lineas
                while ( (s=br.readLine()) != null && !s.equals("x")) {
                    pw.println(s);
                }
                br.close();
                pw.close();
             
                //Fase 2
                //Leer el texto del archivo creado y mostrarlo por consola
                BufferedReader br2 = new BufferedReader(new FileReader(f));
                String s2 ="";
                while ( (s2=br2.readLine()) != null ) {
                    System.out.println("Lectura--  "+s2);
                }
                br2.close();
             
            } catch (IOException ioe) {
                System.err.println("No se puede crear un archivo");
            }

        } catch (Exception e) {
        }
    }
}

-----------------------------------------------------------------------------------------------------------








MODULO 10:  I/O Fundamentales

Construir un programa con argumentos y linea de comandos
Para pasarle valores a los argumentos desde consola

public class UnoDC {

public static void main(String[] args) {
       /* for (String stg : args) {
            System.out.println("arg["+stg +"]= " + stg);
        }*/
        for (int i = 0; i < args.length; i++) {
            System.out.println("arg["+i +"]= " + args[i]);
        }
       
    }

}

C:\Users\Samuel\Desktop\Mod10C>javac UnoDC.java
C:\Users\Samuel\Desktop\Mod10C>javac UnoDC.java

Si se debe almacenar en otro lado de pone -d (con minúscula) y luego y se puede especificar que se ponga en otro con ../otra : esto sirve para decir que se encuentra atrás.



Examinar las propiedades de clase

Poner atención en estos métodos, revisar los metodos que regresan estos métodos (getProperties)

static Map<String,String>getenv()
          Returns an unmodifiable string map view of the current system environment.
static Stringgetenv(String name)
          Gets the value of the specified environment variable.
static PropertiesgetProperties()
          Determines the current system properties.
static StringgetProperty(String key)
          Gets the system property indicated by the specified key.
static StringgetProperty(String key, String def)
          Gets the system property indicated by the specified key.


Dos tipos de propiedades
   Del sistema
   Del entorno


Agregar una propiedad al sistema desde comandos
javac A-java
java -Dminombre=SamuelC A

desde Netbeans se hace desde Propiedades/Run/ VM-Option
y luego:
 -DnombreAlumno=S.C.S

Es la opción -D para agregar una propiedad.

Construir nodos y flujos de procesamiento, y propiedades
java.io.InputStream
java.io.Reader


Serializable y deserializable de objetos
Serialización de Objetos


Para serializar ademas de utilizar
 try {
         FileOutputStream fos = new FileOutputStream("NoVemosSUSCaricaturas");
         ObjectOutputStream oos = new ObjectOutputStream(fos); //hace la serializacion por medio de writeObject
         oos.writeObject(ae); //serializa el objeto aerolinea
       
         oos.close();
       
     } catch (Exception e) {
         System.out.println("Error");
     }

debemos de implementar la interfaz Serializable en cada una de las clases usadas A MENOS que sean hijas, si son hijas NO ES NECESARIO, puesto que si en la clase padre se implementa con eso basta.

Si NO QUIERES QUE un objeto sea serializable puedes quitar la implementación de esa clase y marcarlo como no serializable a traves de la palabra reservada: transient

Deserialización
 //Deserealizar Aerolinea
     ae = null;
     System.out.println("Antes de deserializar: "+ae);
   
     try {
         FileInputStream fis = new FileInputStream("NoVemosSUSCaricaturas.txt");
         ObjectInputStream ois = new ObjectInputStream(fis);
         ae = (Aerolinea) ois.readObject();
         
         System.out.println("Deserealizado: "+ae);
       
     } catch (Exception e) {
         System.out.println("Error al deserealizar");
     }