--- contributors: - ["Jake Prather", "http://github.com/JakeHP"] translators: - ["Camilo Garrido", "http://www.twitter.com/hirohope"] filename: LearnJava-es.java --- Java es un lenguage de programación de propósito general, concurrente, basado en clases y orientado a objetos. [Lee más aquí.](http://docs.oracle.com/javase/tutorial/java/index.html) ```java // Comentarios de una sóla línea comienzan con // /* Comentarios multilínea lucen así */ /** Comentarios JavaDoc lucen así. Suelen describir la clase o varios atributos de una clase. */ // Importa la clase ArrayList dentro del paquete java.util import java.util.ArrayList; // Importa todas las clases dentro del paquete java.security import java.security.*; // Cada archivo .java contiene una clase pública, con el mismo nombre del archivo. public class AprendeJava { // Un programa debe tener un método 'main' como punto de entrada public static void main (String[] args) { // Usa System.out.println para imprimir líneas System.out.println("¡Hola mundo!"); System.out.println( "Entero (int): " + 10 + " Doble (double): " + 3.14 + " Booleano (boolean): " + true); // Para imprimir sin el salto de línea, usa System.out.print System.out.print("Hola "); System.out.print("Mundo"); /////////////////////////////////////// // Tipos & Variables /////////////////////////////////////// // Declara una variable usando [ // Byte - Entero complemento a dos con signo de 8-bit // (-128 <= byte <= 127) byte fooByte = 100; // Short - Entero complemento a dos con signo de 16-bit // (-32,768 <= short <= 32,767) short fooShort = 10000; // Integer - Entero complemento a dos con signo de 32-bit // (-2,147,483,648 <= int <= 2,147,483,647) int fooInt = 1; // Long - Entero complemento a dos con signo de 64-bit // (-9,223,372,036,854,775,808 <= long <= 9,223,372,036,854,775,807) long fooLong = 100000L; // L es usado para denotar que el valor de esta variable es del tipo Long; // cualquier cosa sin ella es tratado como un entero por defecto. // Nota: Java no tiene tipos sin signo // Float - Número de coma flotante IEEE 754 de precisión simple de 32-bit float fooFloat = 234.5f; // f es usado para denotar qeu el valor de esta variable es del tipo float; // de otra manera es tratado como un double. // Double - Número de coma flotante IEEE 754 de precisión doble de 64-bit double fooDouble = 123.4; // Boolean - true & false boolean fooBoolean = true; boolean barBoolean = false; // Char - Un simple carácter unicode de 16-bit char fooChar = 'A'; // Usa 'final' para hacer inmutable las variables final int HORAS_QUE_TRABAJO_POR_SEMANA = 9001; // Strings String fooString = "¡Mi String está aquí!"; // \n es un carácter escapado que inicia una nueva línea String barString = "¿Imprimiendo en una nueva linea?\n¡Ningun problema!"; // \t es un carácter escapado que añade un carácter tab String bazString = "¿Quieres añadir un 'tab'?\t¡Ningun problema!"; System.out.println(fooString); System.out.println(barString); System.out.println(bazString); // Arreglos //El tamaño del arreglo debe decidirse en la declaración //El formato para la declaración de un arreglo es la siguiente: // [] = new []; int [] arreglo_de_enteros = new int[10]; String [] arreglo_de_strings = new String[1]; boolean [] arreglo_de_booleanos = new boolean[100]; // Otra forma de declarar & inicializar un arreglo int [] y = {9000, 1000, 1337}; // Indexación de un arreglo - Accediendo un elemento System.out.println("arreglo_de_enteros @ 0: " + arreglo_de_enteros[0]); // Arreglos comienzan su indexación en cero y son mutables arreglo_de_enteros[1] = 1; System.out.println("arreglo_de_enteros @ 1: " + arreglo_de_enteros[1]); // => 1 // Otros para echar un vistazo // ArrayLists - Son como arreglos excepto que ofrecen más funcionalidades // y el tamaño es mutable // LinkedLists // Maps // HashMaps /////////////////////////////////////// // Operadores /////////////////////////////////////// System.out.println("\n->Operadores"); int i1 = 1, i2 = 2; // Abreviación para múltiples declaraciones // La aritmética es directa System.out.println("1+2 = " + (i1 + i2)); // => 3 System.out.println("2-1 = " + (i2 - i1)); // => 1 System.out.println("2*1 = " + (i2 * i1)); // => 2 System.out.println("1/2 = " + (i1 / i2)); // => 0 (0.5 truncado) // Módulo System.out.println("11%3 = "+(11 % 3)); // => 2 // Operadores de comparación System.out.println("3 == 2? " + (3 == 2)); // => false System.out.println("3 != 2? " + (3 != 2)); // => true System.out.println("3 > 2? " + (3 > 2)); // => true System.out.println("3 < 2? " + (3 < 2)); // => false System.out.println("2 <= 2? " + (2 <= 2)); // => true System.out.println("2 >= 2? " + (2 >= 2)); // => true // ¡Operaciones a nivel de bits! /* ~ Complemento unario bit a bit << Deplazamiento hacia la izquierda con signo >> Deplazamiento hacia la derecha con signo >>> Deplazamiento hacia la derecha sin signo & AND lógico ^ OR lógico exclusivo | OR lógico inclusivo */ // Incrementos int i = 0; System.out.println("\n->Incrementos y reducciones"); System.out.println(i++); //i = 1. Post-incremento System.out.println(++i); //i = 2. Pre-incremento System.out.println(i--); //i = 1. Post-reducción System.out.println(--i); //i = 0. Pre-reducción /////////////////////////////////////// // Estructuras de Control /////////////////////////////////////// System.out.println("\n->Estructuras de Control"); // Condiciones 'if' son como en c int j = 10; if (j == 10){ System.out.println("Me imprimieron"); } else if (j > 10) { System.out.println("A mi no"); } else { System.out.println("A mi tampoco"); } // Ciclos 'while' int fooWhile = 0; while(fooWhile < 100) { //System.out.println(fooWhile); //Incrementar el contador //Iteró 99 veces, fooWhile 0->99 fooWhile++; } System.out.println("Valor fooWhile: " + fooWhile); // Ciclos 'do while' int fooDoWhile = 0; do { //System.out.println(fooDoWhile); //Incrementar el contador //Iteró 99 veces, fooDoWhile 0->99 fooDoWhile++; }while(fooDoWhile < 100); System.out.println("Valor fooDoWhile: " + fooDoWhile); // Ciclos 'for' int fooFor; //Estructura del ciclo 'for' => for(; ; ) for(fooFor=0; fooFor<10; fooFor++){ //System.out.println(fooFor); //Iteró 10 veces, fooFor 0->9 } System.out.println("Valor fooFor: " + fooFor); // Switch Case // Un 'switch' funciona con un tipo de dato byte, short, char e int // También funciona con tipos enumerados (discutido en tipos Enum), // la clase String y unas pocas clases especiales que envuelven // tipos primitivos: Character, Byte, Short e Integer. int mes = 3; String mesString; switch (mes){ case 1: mesString = "Enero"; break; case 2: mesString = "Febrero"; break; case 3: mesString = "Marzo"; break; default: mesString = "Algun otro mes"; break; } System.out.println("Resultado switch Case: " + mesString); /////////////////////////////////////// // Convirtiendo Tipos de Datos y Conversión de Tipos /////////////////////////////////////// // Convirtiendo datos // Convertir String a Integer Integer.parseInt("123");//retorna una versión entera de "123" // Convertir Integer a String Integer.toString(123);//retorna una versión string de 123 // Para otras conversiones fíjate en las siguientes clases // Double // Long // String // Conversión de tipos // También puedes convertir objetos java, hay muchos detalles // con unos pocos conceptos intermedios // No dudes en verlos acá // http://docs.oracle.com/javase/tutorial/java/IandI/subclasses.html /////////////////////////////////////// // Clases y Funciones /////////////////////////////////////// System.out.println("\n->Clases & Funciones"); // (A continuación la definición de una clase Bicicleta) // Usa 'new' para instanciar una clase Bicicleta excursion = new Bicicleta(); // Llama métodos del objeto excursion.aumentarVelocidad(3); // Siempre deberías usar metodos 'set' (establecer) y 'get' (obtener) excursion.setRitmo(100); // 'toString' es una convención para mostrar los valores de este objeto. System.out.println("informacion de la excursion: " + excursion.toString()); /////////////////////////////////////// // Genéricos /////////////////////////////////////// // Utilizando genéricos (a partir de Java 1.5) es posible detectar en tiempo de // compilación errores de tipado (en versiones anteriores se detectarían como error // de ejecución) List v = new ArrayList(); v.add("test"); String s = v.get(0); // Si intentamos recuperar s como otro tipo diferente a String // (por ejemplo, un Integer) obtendríamos un error de compilación } // Fin del método 'main' } // Fin de la clase AprendeJava // Puedes incluir otras clases no públicas en un archivo .java // Sintaxis de declaración de clases: // class { // //variables_de_clase, constructores, todas las funciones. // //las funciones son llamadas como métodos en Java. // } class Bicicleta { // Campos/Variables de Bicicleta public int ritmo; // Public: Puede ser accedido desde cualquier parte private int velocidad; // Private: Accesible sólo desde esta clase protected int engranaje; // Protected: Accesible desde esta clases y sus subclases String nombre; // default: Sólo accesible desde este paquete // Constructores son la manera de crear clases // Este es un constructor por defecto public Bicicleta() { engranaje = 1; ritmo = 50; velocidad = 5; nombre = "Bontrager"; } // Este es un constructor específico (contiene argumentos) public Bicicleta(int ritmoInicial, int velocidadInicial, int engranajeInicial, String nombre) { this.engranaje = engranajeInicial; this.ritmo = ritmoInicial; this.velocidad = velocidadInicial; this.nombre = nombre; } // Sintaxis de función: // () // Las clases de Java usualmente implementan métodos 'get' (obtener) y 'set' (establecer) para sus campos // Sintaxis de declaración de métodos // () public int getRitmo() { return ritmo; } // Métodos void no requieren retornar public void setRitmo(int nuevoValor) { ritmo = nuevoValor; } public void setEngranaje(int nuevoValor) { engranaje = nuevoValor; } public void aumentarVelocidad(int incremento) { velocidad += incremento; } public void disminuirVelocidad(int reduccion) { velocidad -= reduccion; } public void setNombre(String nuevoNombre) { nombre = nuevoNombre; } public String getNombre() { return nombre; } //Método para mostrar los valores de los atributos de este objeto. @Override public String toString() { return "engranaje: " + engranaje + " ritmo: " + ritmo + " velocidad: " + velocidad + " nombre: " + nombre; } } // fin clase Bicicleta // PennyFarthing es una subclase de Bicicleta class PennyFarthing extends Bicicleta { // (Penny Farthings son esas bicicletas con una gran rueda forntal. // No tienen engranajes.) public PennyFarthing(int ritmoInicial, int velocidadInicial){ // Llama al constructor del padre con super super(ritmoInicial, velocidadInicial, 0, "PennyFarthing"); } // Deberías marcar un método que estás sobre escribiendo con una @anotacion // Para aprender más sobre que son y el propósito de las anotaciones // echa un vistazo acá: http://docs.oracle.com/javase/tutorial/java/annotations/ @Override public void setEngranaje(int engranaje) { engranaje = 0; } } ``` ## Más Lectura Estos links son sólo para tener un entendimiento del tema, no dudes en usar Google y encontrar ejemplos más específicos Otros temas a investigar: * [Java Tutorial Trail from Sun / Oracle](http://docs.oracle.com/javase/tutorial/index.html) * [Java Access level modifiers](http://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html) * [Object-Oriented Programming Concepts](http://docs.oracle.com/javase/tutorial/java/concepts/index.html): * [Inheritance](http://docs.oracle.com/javase/tutorial/java/IandI/subclasses.html) * [Polymorphism](http://docs.oracle.com/javase/tutorial/java/IandI/polymorphism.html) * [Abstraction](http://docs.oracle.com/javase/tutorial/java/IandI/abstract.html) * [Exceptions](http://docs.oracle.com/javase/tutorial/essential/exceptions/index.html) * [Interfaces](http://docs.oracle.com/javase/tutorial/java/IandI/createinterface.html) * [Generics](http://docs.oracle.com/javase/tutorial/java/generics/index.html) * [Java Code Conventions](http://www.oracle.com/technetwork/java/codeconv-138413.html)