Soporte de Asserts en Java 1.4.x

0
23303

Asserts en Java

En los lenguajes orientados a objeto, la gestión de los errores se realiza a
través de excepciones.

Existen dos familias de expciones:

  • Lo errores: Problemas graves que se pueden dar y que no merece la pena
    controlar (falta de memoria, error de comunicaciones, etc)
  • Las excepciones en si mismas que son predecibles y que de un modo
    razonable podemos (y debemos controlar).

Java esta en continua evolución y a partir de la versión 1.4 se ha
introducido el concepto de asserts.

Un assert es una condición que se debe dar en un programa para que no se
produczca un error.

La gracia que tiene es que son una mezcla de los dos tipos vistos
anteriormente: Pueden suspender la ejecución de un programa pero no estamos
obligados a controlarlar (declararlas y capturar su posible ejecución).

Además, en tiempo de ejecución podemos definir si queremos evaluarlas o
no….

Vamos a introducirlas en un programa y verificar su uso.

Creamos una clase normal

class misassert
{
     public static void main(String [] main)
     {
          int i = 10;

          assert i> 100;

          System.out.println(«Este es mi ejemplo»);
     }
}

Si compilamos, nos da un error:

Para pocer compilar necesitamos especificar que trabajamos con la versión
1.4

javac -source 1.4 *.java

Ejecución

Si ahora ejecutamos nuestra clase, veremos que no tiene en cuanta el assert

Para que lo considere hay que utilizar un parámetro nuevo: -ea 

 

Mensajes adicionales

Podemos pones un mensaje: 

      assert i> 100  : La variable i esta fuera de
rango
;


C:\java>java -ea misassert
Exception in thread «main» java.lang.AssertionError:
La variable i esta fuera de
rango

at misassert.main(misassert.java:7)

C:\java>

En mensaje es una expresión por lo que podría llamarse a una función… en
nuestro caso podría mostrar los mensajes en función del idioma seleccionado

class misassert
{
    public static void main(String [] main)
    {
        int i = 10;
          	
	assert i > 100 : mensajeError();

        System.out.println("Este es mi ejemplo");
    }

    public static String mensajeError()
    {
    	// montaje de error internacionalizado
	return "La variable está fuera de rango";
    }
}
      

Si ahora decompilamos el código vamos que el compilador ha echo cosas por
nosotros…. y nuestro código es más pesado

// Decompiled by DJ v3.5.5.77 Copyright 2003 Atanas Neshkov  Date: 30/01/2004 19:30:08
// Home Page : http://members.fortunecity.com/neshkov/dj.html  - Check often for new version!
// Decompiler options: packimports(3) 
// Source File Name:   misassert.java

import java.io.PrintStream;

class misassert
{

    misassert()
    {
    }

    public static void main(String args[])
    {
        byte byte0 = 10;
        if(!$assertionsDisabled && byte0 <= 100)
        {
            throw new AssertionError(mensajeError());
        } else
        {
            System.out.println("Este es mi ejemplo");
            return;
        }
    }

    public static String mensajeError()
    {
        return "La variable esta fuera de rango";
    }

    static Class _mthclass$(String s)
    {
        return Class.forName(s);
        ClassNotFoundException classnotfoundexception;
        classnotfoundexception;
        throw new NoClassDefFoundError(classnotfoundexception.getMessage());
    }

    static final boolean $assertionsDisabled; /* synthetic field */

    static 
    {
        $assertionsDisabled = !(misassert.class).desiredAssertionStatus();
    }
}
      

Podemos utilizar en nuestro programa la misma sintaxis directamente::

throw new
AssertionError(mensajeError());

Los asserts son una buena técnica para programas pre y post condiciones….
la programación por contrato….

 Sobre
el Autor ..

DEJA UNA RESPUESTA

Por favor ingrese su comentario!

He leído y acepto la política de privacidad

Por favor ingrese su nombre aquí

Información básica acerca de la protección de datos

  • Responsable:
  • Finalidad:
  • Legitimación:
  • Destinatarios:
  • Derechos:
  • Más información: Puedes ampliar información acerca de la protección de datos en el siguiente enlace:política de privacidad