Etiqueta: Java (página 1 de 2)

java.lang.OutOfMemoryError: Java heap space en Visual Studio con Xamarin

Al desarrollar una app en Visual Studio, aprovechando las ventajas de la nueva y gratuita integración con Xamarin, el compilador nos puede arrojar eventualmente un error del tipo

java.lang.OutOfMemoryError: Java heap space .

Esto ocurre básicamente porque se excede el máximo de memoria alojada (allocated memory) de la pila de instrucciones (heap memory), lo que se puede resolver de dos formas: la primera es colocar un parámetro en tiempo de compilación que aumente ese espacio a 1 Gb o más, y la segunda es cambiar el JDK con el que se esta compilando, ya que por defecto se toma la versión de 32 bits del mismo, y el JDK disponible de 64 bits tiene mayores optimizaciones y licencias que esta versión, por ende, hay que remplazarla.

Leer más →

Generación automática de getters, setters y constructores en C#

Una de las características que más me gustan de Netbeans es su posibilidad de generar código repetitivo automáticamente utilizando funciones de generación de código automatizadas presionando alt+insertar en el cuerpo de la clase, tales como la generación de los Inspectores (Getters), Modificadores (Setters) y Constructores, que ahorran tiempo considerablemente y más cuando queremos solo completar la definición de una clase de forma elegante.

Leer más →

Uso de BD embebida en Netbeans usando Derby

Actualmente me encuentro dictando un curso de desarrollo en mi ex Universidad, y esta unidad particularmente nos trajo algunos problemas dadas ciertas configuraciones de Netbeans. Hice un videotutorial que comparto a quien pueda serle útil.




Derby es la base de datos que Netbeans utilizá formalmente como JavaDB, y para esto nos provee un driver de conexión incluido por defecto en el JDK. El ejemplo muestra como habilitar el uso de Derby en caso de que no este habilitado por defecto y un ejemplo simple de como ejecutar consultas de forma gráfica y por medio de código.

For… Each en Java

Utilizar ciclos for para recorrer listas o arreglos, se vuelve ciertamente tedioso al tener que declarar constantemente variables para indizar, otras para calcular el largo de elementos en una lista, y otras para llevar control del ciclo.

Es así como un bloque como este:

for(int i = 0; i < lista.size(); i++)
{
  lista.get(i).setValor(5);
}

Puede abreviarse en uno como este:

for(Operaciones elemento : lista)
{
  elemento.setValor(5);
}

El único inconveniente es que no tendremos control del indice como tal, pero cuando debemos recorrer objetos de la clase Collections, es una forma mucho mas optimizada y elegante de hacerlo.

Uso practico del puntero this en la POO

En lenguajes de programación orientada a objetos, como C++, C#, Visual Basic .NET y demases, es común utilizar una variable presente en todas las clases: el puntero this.

Este puntero (no confundir explícitamente con los punteros de C/C++; se debe interpretar mas bien como el “apuntador a”) hace referencia a la clase en si misma. Entender su funcionamiento es bastante simple, y en código se hace más evidente.

static public int sumardos(int valor)
{
    return valor + 2;
}

Hasta aquí nada muy nuevo. Una función sumardos que retorna un entero, que es un valor que se le entrega a esta función y se le suman dos unidades. Ahora, démosle contexto a este método (recordemos que en la jerga informática, función es una rutina que devuelve o no un valor. Un Método es una propiedad de los objetos que realiza una operación con el objeto o relativo a él).

public class operaciones{
    private int valor;

    public operaciones()
    {
      valor = 1;
    }

    static public int sumardos(int valor)
    {
      return valor + 2;
    }
}

Ahora, podemos apreciar que la clase también tiene un atributo (de nuevo, en la jerga informática, una variable es un elemento en el cual podemos almacenar datos, un atributo es una propiedad de los objetos relativos a estos) llamado valor.

Veamos como funciona el asunto.

operaciones obj = new operaciones();
Console.WriteLine("3 + 2 = " + obj.sumardos(3));

La consola imprime esto:

3 + 2 = 5

No hay problema. Se imprime el valor esperado, pero eso plantearía otra pregunta, ¿y como imprimo y/o utilizo el atributo valor y no solamente el parámetro valor dado al método?

Como se puede suponer, la solución y el objetivo de esta entrada es simplemente, referenciar a la misma clase (u objeto, según como se mire), con el puntero this.

public class operaciones{
    private int valor;

    public operaciones()
    {
      valor = 1;
    }

    static public int sumardos(int valor)
    {
      return this.valor + 2;
    }
}

Lo que, bajo la misma impresión dada anteriormente imprimirá:

3 + 2 = 3

Esto ocurre ya que ahora no tomo al parámetro valor, si no que al atributo valor, cuyo valor es 1.

Una de las buenas practicas de los lenguajes OOP cuando los programas comienzan a ser muy grandes, y trabajados entre varias personas, es la correcta utilización del puntero this donde corresponda; pues nadie sabe cuando un tercero podrá agregar atributos o parámetros con los mismos valores ya existentes en el ámbito privado o local, que harán que la aplicación deje de funcionar correctamente.

Notar que los nombres de variables repetidos no son marcados ni como advertencia ni como error, pues están en ámbitos diferentes.