1. Libros y videos
  2. Java
  3. Entender un programa
Extrait - Java Los fundamentos del lenguaje (con ejercicios prácticos corregidos ) (2ª edición)
Extractos del libro
Java Los fundamentos del lenguaje (con ejercicios prácticos corregidos ) (2ª edición) Volver a la página de compra del libro

Entender un programa

Anatomía y punto de entrada de un programa

A menudo se dice que "todo es un objeto en Java". Esto significa que, para diseñar un programa, es necesario definir al menos una clase. La estructura mínima de un programa Java se ilustra con el siguiente código:

1.   public class Example {  
2.      public static void main(String[] args) {  
3.         System.out.println("Hello World!");  
4.      }  
5.   } 

En este código, definimos una nueva clase llamada Example. El nombre de la clase es libre, siempre que se respeten las convenciones de nomenclatura (véase la sección correspondiente en este capítulo).

Esta clase contiene un método especial llamado main. Este es el punto de entrada del programa: siempre es el primer método que se ejecuta al lanzar una aplicación Java. Su firma debe ser exactamente la que aparece en la línea 2. El código de este método está delimitado por las llaves de apertura (línea 2) y cierre (línea 4).

Desglose de códigos

  • Clase Example (Línea 1)

La clase se declara con la palabra clave public class. En Java, una clase es una estructura que agrupa datos y métodos. El bloque de código correspondiente a la clase está...

Las variables

1. Introducción

Durante la ejecución de una aplicación, permiten almacenar en memoria diferentes valores útiles para su correcto funcionamiento.

Antes de usar una variable en un programa, es importante saber dónde declararla, qué nombre y qué tipo asignarles. Estos aspectos se detallan en las siguientes secciones.

2. Las ubicaciones

En Java, las variables se pueden declarar en diferentes lugares del código, siempre que estén dentro de las llaves de una clase, interfaz o enumeración. No es posible declarar una variable fuera de estas estructuras.

Una regla esencial: una variable siempre se debe declarar antes de usarla.

Dependiendo de dónde se declare, una variable se clasifica en una de las siguientes categorías:

  • Variable de instancia: declarada dentro de una clase (fuera de cualquier método), es específica para cada instancia de esa clase. Cada objeto tendrá su propia copia de la variable.

  • Variable de clase: declarada dentro de una clase con la palabra clave static, es compartida por todas las instancias. Se puede acceder directamente a través del nombre de la clase.

  • Variable local: declarada dentro de un método, solo es accesible dentro de ese método y existe solo durante su ejecución.

  • Parámetro de método: esta es una forma especial de variable local. Se inicializa automáticamente cuando se llama al método:

La siguiente estructura permite visualizar la ubicación de estas diferentes categorías:

public class UbicacionDeLasVariables {  
 
    // variable de instancia  
    int instanciaVariable;  
 
    // variable de clase 
    static int classVariable;  
 
    void unMetodo(int parametro) {   
       // variable locale   
       int locale = 0;   
    } 
} 

3. El nombre

El nombre de una variable en Java debe cumplir con ciertas reglas, incluso si el lenguaje deja una libertad relativa al desarrollador:

  • debe comenzar con una letra (mayúscula o minúscula),

  • puede contener letras, números y el carácter subrayado (_),

  • puede contener un número ilimitado...

Las constantes

En una aplicación, es frecuente utilizar valores numéricos o cadenas de caracteres, que no deben ser modificadas durante la ejecución. Para mejorar la legibilidad y mantenimiento del código, es recomendable agrupar estos valores en forma de constantes.

La definición de una constante en Java se realiza agregando la palabra clave final antes de la declaración de la variable. Es imperativo inicializar la constante en el momento de su declaración (porque es la única ocasión en la que es posible una asignación).

Este es un ejemplo de definición de una constante:

final double VAT = 1.20; 

La constante definida de esta manera se puede usar en el código en lugar del valor literal que representa.

finalPrice = price * VAT; 

Las reglas relativas a la vida útil y el alcance de las constantes son idénticas a las relativas a las variables.

También es posible calcular el valor de una constante a partir de otra constante.

final int TOTAL = 100; 
final int HALF = TOTAL / 2; 

Muchas constantes ya están definidas en las librerías estándares del lenguaje Java. Estas constantes se suelen declarar como miembros static de las clases correspondientes.

Por convención, los nombres de constantes se escriben completamente en mayúsculas, posiblemente con guiones bajos en las palabras separadas. Un recordatorio completo de estas convenciones de nomenclatura...

Las enumeraciones

Una enumeración permite definir un conjunto de constantes que están funcionalmente vinculados entre sí. Su declaración se realiza de la siguiente manera :

public enum SpanishDay {  
    DOMINGO,  
    LUNES,  
    MARTES,  
    MIERCOLES,  
    JUEVES,  
    VIERNES,  
    SABADO  
} 

El primer valor de la enumeración se inicializa a cero y los siguientes se incrementan automáticamente en 1. De cierta manera, el compilador interpreta esta declaración como si se hubiera escrito de la siguiente manera:

public class SpanishDay  { 
    public static final int DOMINGO=0;   
    public static final int LUNES=1;   
    public static final int MARTES=2;  
    public static final int MIERCOLES=3;   
    public static final int JUEVES=4;   
    public static final int VIERNES=5;   
    public static final int SABADO=6; 
} 

En realidad, una declaración de una clase especial que  especial que hereda implícitamente de la clase java.lang.Enum. Los elementos definidos en la enumeración son las únicas instancias posibles...

Convenciones de nomenclatura

Las convenciones de nomenclatura son reglas y mejores prácticas que permiten asignar nombres a los elementos de código, como variables, clases o métodos, de forma clara y consistente. Respetarlas es fundamental en Java, ya que promueve la legibilidad, comprensión y mantenimiento del código, especialmente en un contexto de trabajo en equipo.

Los nombres de las clases deben comenzar con mayúscula y seguir el estilo CamelCase, donde cada palabra comienza con una letra mayúscula sin separador. Por ejemplo:

Person  
CustomerAccount  
HelloWorldApp 

El nombre de una clase debe ser lo suficientemente descriptivo como para reflejar su función o responsabilidad.

Los métodos empiezan con minúsculas y también siguen el estilo camelCase. Cada palabra siguiente comienza con mayúscula, como en:

getName  
calculateTotal  
sendMessage 

El nombre de un método debe indicar la acción realizada, a menudo en forma de verbo.

Algunos métodos deben seguir un nombre específico para funcionar correctamente. Este es el caso del método main, el punto de entrada de cualquier programa Java. Se debe llamar exactamente main, sensible a mayúsculas y minúsculas y tener la siguiente firma:

public static void main(String[] args) 

Cualquier desviación en la denominación impediría que la máquina...

Los argumentos de un programa

1. Funcionamiento

Es posible pasar argumentos a un programa Java para que se adapte su comportamiento, de acuerdo con los valores proporcionados.

Se puede acceder a estos argumentos a través del array de cadenas denominadas args, que se pasa como argumento del método main.

Para pasar argumentos durante la ejecución del programa, es suficiente con utilizar la herramienta java y agregar los argumentos directamente después del nombre del programa en la misma línea de comando. El separador que se utiliza es el espacio. Por ejemplo:

Java MyJavaProgram arg1 arg2 arg3 

En este caso, el array args contiene tres elementos: arg1, arg2 y arg3.

Si un argumento contiene un espacio, hay que delimitar el valor con comillas. Por ejemplo:

Java MyJavaProgram arg1 arg2 "arg 3" 

En este caso array args contendrá tres elementos: arg1, arg2 y arg3.

Si un argumento contiene un espacio, hay que delimitar el valor con el carácter \:

Java MyJavaProgram arg1 arg2 "arg \" 3 \ "" 

En este caso, args contiene las cadenas: arg1, arg2 y arg "3".

Para entender mejor cómo manipular un array y navegar por sus elementos, se recomienda consultar la sección dedicada a los arrays un poco más arriba en este capítulo.

2. Utilización en un IDE

Estos son los pasos que hay que seguir para definir argumentos en un programa Java usando un IDE:

 Cree una clase MyJavaProgram...

Los operadores

Los operadores son palabras claves del lenguaje que permiten ejecutar las operaciones en el contenido de ciertos elementos, en general variables, constantes, valores literales o retornos de funciones. La combinación de uno o varios operadores con los elementos en los que se apoya, constituye lo que llamamos una expresión. Estas expresiones se evalúan en tiempo de ejecución en función de los operadores utilizados y de los valores asociados.

Distinguimos dos tipos de operadores:

  • Los operadores unarios, que trabajan solo en un operando.

  • Los operadores binarios, que necesitan dos operandos.

Se pueden agrupar los operadores en siete grandes categorías. Empecemos por la primera.

1. Los operadores unarios

Estos son los principales operadores unarios disponibles:

Operador

Acción

-

Valor negativo

~

Complemento a 1 (inversión de bits)

++

Incremento

--

Decremento

!

Negación

El operador ! solo se puede usar en variables de tipo boolean o en expresiones que producen un resultado boolean, como una comparación.

Los operadores unarios se pueden usar con dos notaciones diferentes: la notación prefijada, donde el operador se coloca antes del operando, y la notación postfijada, donde el operador se coloca después del operando. La posición del operador influye en cuándo se aplica la operación.

Si el operador está en la posición prefijada, actúa sobre el operando antes de que se use en la expresión.

Si el operador está en la posición postfijada, actúa después de usar el operando.

Esta distinción puede influir en el resultado. Por ejemplo:

int i;  
i = 3;  
System.out.println(i++); 

En este ejemplo, la sentencia muestra 3 porque el incremento se realiza después de que la variable se use en println.

Por el contrario:

int i;  
i = 3;  
System.out.println(i++); 

Aquí, la instrucción muestra 4 porque el incremento se realiza antes de que se use la variable.

Es importante señalar que, si la variable no se usa inmediatamente en una expresión, la notación prefijada y la notación postfijada producen el mismo efecto. Por tanto, las siguientes dos líneas de código son equivalentes:

i++;  
++i; 

2. Los operadores de asignación

El operador de asignación en Java se representa con el símbolo...

Las estructuras de control

1. Presentación

Las estructuras de control permiten actuar sobre el progreso de un programa. Con ellos, puede cambiar el orden en que se ejecutan las sentencias.

Existen dos familias principales: las estructuras de decisión, que permiten elegir entre varios caminos de ejecución según una condición y las estructuras de bucle, que permiten repetir un bloque de instrucciones, siempre que una condición sea cierta o hasta que lo sea.

2. Estructuras de control

a. Estructura if

La sentencia if permite evaluar una condición y ejecutar un bloque de sentencias solo si esa condición es verdadera.

Aquí está la forma más sencilla:

if (condición) {  
    instrucción;   
} 

La condición debe ser una expresión que produzca un resultado de tipo boolean. Si esta condición es cierta, la instrucción se ejecuta; de lo contrario, se ignora.

Cuando quiere ejecutar varias sentencias en este caso, debe agruparlas entre corchetes:

if (condición) {  
   instrucción1;  
   instrucción2;  
   // etc.  
} 

También es posible proporcionar otro bloque de sentencias para ejecutar cuando la condición es falsa, usando la sentencia else:

if (condición) { 
    //Instrucciones ejecutadas si la condición es verdadera   
} else { 
    // Instrucciones ejecutadas si la condiciónes falsa  
} 

Para probar varias condiciones diferentes, puede encadenar los bloques con else if:

if (condición1) {  
    // instrucciones condición1 es verdadera 
} else if (condición2) { 
    // instrucciones si condición2 es verdadera   
} else { 
    // instrucciones que se ejecutan si no se cumplen ninguna de 
    // las condiciones precedentes   
} 

En esta última forma, las condiciones se comprueban en el orden en que aparecen. En cuanto una condición es verdadera, su bloque se ejecuta y se ignoran las condiciones siguientes. El bloque else es opcional: si no existe y no se cumplen condiciones, entonces no se ejecuta ninguna sentencia.

b. Estructura ternaria

La estructura ternaria...

Ejercicios

1. Ejercicio 1

Para practicar cómo manipular arrays en Java, este ejercicio sugiere que trabaje con una variedad de cadenas de caracteres que representan los nombres de pila. El objetivo es aprender a recorrer un array, analizar su contenido y luego cambiar el orden de los elementos.

Instrucciones:

 Declare un array que contenga cinco nombres de pila de su elección.

 Muestre cada nombre de pila en la consola, uno a uno, usando un bucle.

 Identifique el nombre de pila más largo del array y muéstralo.

 Invierta el orden de los nombres de pila en el array y luego muestre todos los nombres de pila de nuevo.

Consejos:

  • Use un bucle for o while para alternar entre los elementos del array.

  • Para comparar la longitud de los nombres de pila, utilice el método .length() sobre cada elemento.

  • Para invertir el orden, puede intercambiar los elementos con una variable temporal, empezando por los extremos hasta el centro del array.

Este ejercicio le permitirá practicar varios conceptos tratados en el capítulo: declarar tablas, recorrer con bucles, comparar cadenas y modificar datos.

2. Ejercicio 2

En este ejercicio, creará un array con diez direcciones de correo electrónico y luego calculará la cuota de mercado de cada proveedor de correo en la lista. Esto le permitirá manipular cadenas y practicar el análisis de su contenido.

La cuota de mercado se refiere a la proporción...

Correcciones

1. Ejercicio 1

import java.util.Arrays;  
  
public class Exercice1 {   
   public static void main(String[] args) {   
      // Crear un array de cinco nombres   
      String[] names = {"Alice", "Bob", "Charles", "David", "Eve"}; 
 
      // Mostrar cada nombre uno por uno en la consola   
      System.out.println("Mostrar los nombres:");   
      for (String name : names) {   
         System.out.println(name);   
      }  
   
      // Buscar el nombre más largo    
      String longestName = "";    
      for (String name : names) {   
         if (name.length() > longestName.length()) {   
            longestName= name;   
         }    
      }   
      System.out.println("El nombre más largo es: " + longestName); 
     
      // Invertir el orden de los nombres en el array   
      for (int i = 0; i < names.length / 2; i++) {   
         String temp = names[i];   
         names[i] = names[names.length - 1 - i];   
         names[names.length - 1 - i] = temp;   
      } 
  
      // Mostrar de nuevo todos los nombres en orden inverso   
      System.out.println("Mostrar los nombres en orden inverso:"); 
      for (String name : names) {   
         System.out.println(name);   
      }   
   }...

Conclusión

Ahora dispone de técnicas básicas para escribir algoritmos (declaración de variables, utilización de operadores disponibles y uso de estructuras de control). Para progresar, es necesario pasar horas descubriendo las funcionalidades que ofrece la API Java. Ahora necesita conocer con rapidez las bases de la programación orientada a objetos para profundizar en sus conocimientos.

Este es el objetivo del próximo capítulo.