Comentarios en Java
//Comentario de línea única
/Comentario de múltiples líneas múltiples líneas múltiples líneas/
Identificadores
Todos los componentes en Java requieren un nombre. Los nombres de clases, variables y métodos se conocen como identificadores.
- Todos los identificadores deben comenzar con una letra, $ o guion bajo (_)
- Después del primer carácter, puede ser cualquier combinación de letras, $, guion bajo (_) o números
- No usar palabras clave como nombres de variables o métodos
- Distinguir entre mayúsculas y minúsculas
- Se puede pero no se recomienda usar caracteres chinos o nombres en pinyin
Tipos de datos
Tipos primitivos
public class EjemploPrimitivos {
public static void main(String[] args) {
// Ocho tipos de datos primitivos
// Enteros
int valorEntero = 12; // Común
byte valorByte = 22;
short valorCorto = 32;
long valorLargo = 42L; // El tipo Long requiere L después del número
// Decimales: números de punto flotante
float valorFloat = 52.3F; // El tipo Float requiere F después del número
double valorDouble = 3.141592653589793;
// Carácter
char caracter = 'A';
// Cadena de caracteres, String no es palabra clave, es una clase
// String cadena = "Hola";
// Booleano: sí o no
boolean logico = true;
}
}
Tipos de referencia
Bytes
- Bit (b): unidad más pequeña de almacenamiento de datos
- Byte (B): unidad básica de procesamiento de datos
- Carácter: letras, números y símbolos usados en computación
- 1 B = 8 b 1024 B = 1 KB 1024 KB = 1 MB 1024 MB = 1 GB
Extensiones
Extensiones de enteros
Sistemas numéricos
Binario: compuesto por 0 y 1
Octal: compuesto por 0~7, comienza con 0
Decimal: compuesto por 0~9
Hexadecimal: compuesto por 09 y AF (10~15), comienza con 0x
Conversión de decimal a sistema x
Parte entera: dividir la parte entera decimal por x hasta que el cociente sea 0, luego leer los residuos en orden inverso para obtener la parte entera en sistema x
Parte decimal: multiplicar la parte decimal por x, tomar la parte entera del resultado y multiplicar por x repetidamente hasta que la parte decimal sea 0, obteniendo así la parte decimal en sistema x
Para hexadecimal, se requiere conversión
Conversión de sistema x a decimal
Expandir el número en sistema x según la posición y sumar para obtener el decimal
Convresión de binario a octal
Desde la derecha, agrupar dígitos binarios de 3 en 3 (rellenar con 0 al inicio si es necesario), expandir según posición y sumar para obtener un dígito octal
Conversión de binario a hexadecimal
Desde la derecha, agrupar dígitos binarios de 4 en 4 (rellenar con 0 al inicio si es necesario), expandir según posición y sumar para obtener un dígito hexadecimal (prestar atención a la conversión para dos dígitos)
Conversión de octal o hexadecimal a binario
Usar el método de división por 2 y lectura inversa de residuos, rellenar con 0 al inicio para completar 3 dígitos en octal o 4 dígitos en hexadecimal
Extensiones de punto flotante
// float: limitado, discreto, errores de redondeo, aproximado
// double
// Mejor evitar comparar números de punto flotante
// Para operaciones bancarias usar BigDecimal de la clase de herramientas matemáticas
float f1 = 0.1f;
double d1 = 1.0 / 10;
System.out.println(f1 == d1); // false
float f2 = 123456789f;
float f3 = f2 + 1;
System.out.println(f2 == f3); // true
Extensiones de caracteres
char c1 = 'A';
char c2 = '中';
System.out.println(c1);
System.out.println((int) c1); // Conversión forzada
System.out.println(c2);
System.out.println((int) c2); // Conversión forzada
// Todos los caracteres son esencialmente números
// Codificación tabla Unicode: (65=A, 97=a)
// U0000 a UFFFF
Caracteres de escape
Conversiones de tipos
Java es un lenguaje de tipado fuerte, y se requieren conversiones de tipo en algunas operaciones.
Prioridad de tipos de datos:
public class ConversionForzada {
public static void main(String[] args) {
int enteroGrande = 130;
byte enteroPequeño = (byte) enteroGrande; // Desbordamiento de memoria
System.out.println(enteroGrande);
System.out.println(enteroPequeño);
// Conversión forzada (tipo)variable: de alto a bajo
// Conversión automática: de bajo a alto
/*
Puntos a notar:
1. No se puede convertir booleanos
2. No se puede convertir a tipos no relacionados
3. Al convertir de alta capacidad a baja, se usa conversión forzada
4. Puede haber desbordamiento de memoria o pérdida de precisión
*/
// Problema de precisión
System.out.println((int) 23.8); // 23
System.out.println((int) -47.9f); // -47
char letra = 'a';
int codigo = letra + 1;
System.out.println(codigo); // 98
System.out.println((char) codigo); // b
}
}
public class DesbordamientoNumeros {
public static void main(String[] args) {
// Cuidado con el desbordamiento al operar con números grandes
// Característica JDK7: se pueden usar guiones bajos para separar dígitos
int cantidad = 10_0000_0000;
int años = 20;
int total1 = cantidad * años;
long total2 = cantidad * años;
long total3 = cantidad * ((long) años);
System.out.println(total1); // -1474836480
System.out.println(total2); // -1474836480: por defecto es int, ya hubo error antes de conversión
System.out.println(total3); // 20000000000: convertir primero a Long
}
}