jueves, 1 de mayo de 2014

OPERADORES

Los operadores son símbolos que nos permiten hacer operaciones con los datos. En java existen varios asi que vamos a echar una mirada.

Aritméticos
Se realizan para hacer operaciones aritméticas actuando sobre valores numéricos. El mas conocido es el operador "+", el cual tiene una gracia. Aparte de servir para sumar números, se ocupa para concatenar cadenas de texto.

System.out.print("Hola" + "chao"); // esto imprimiría Hola chao

Tambien se puede usar para concatenar un texto con el contenido de una variable.

Aqui estan los operadores aritmeticos.

+     suma dos valores
-      resta dos valores
*     multiplica dos valores
/      divide dos valores
%    calcula el resto de la división
++   incremente
--    decremento

Prefijo y postfijo

En cuanto a los operadores ++ y --, tenemos que tener una consideración. No realizan la misma acción si se colocan delante de la variable o después de la variable.























Que paso?
numero1 = numero2++; aqui el numero2 que vale 8 es asignado a la variable numero1 y despues se incrementa, por lo que no es 9 como se pensaria.

numero3 = ++ numero4; numero4 vale 2, y aca se incrementa en 1 y despues se asigna a la variable de destino.

por lo que:
numero ++ : asigna primero y suma después.
++numero  : suma primero y después asigna.







CONVERSIONES DE TIPO

Java es un lenguaje terriblemente estricto a la hora de asignar valores a las variables. Solo nos permite asignar un dato que sea propio de la variable declarada. Un int es un numero natural, por lo que llorara a gritos si intentamos asignarle un numero decimal. Incluso lloraría si tratamos de trabajar con una variable sin valor:


Pero a lo que vamos... java permite hacer conversiones de tipo entre los primitivos, menos con el bolean ya que es incompatible con todos.
Las conversiones pueden hacerse de dos maneras, de forma implícita y explicita.

Conversiones implícitas

Este tipo de conversiones se realizan de forma automática. Lo que quiere decir que la conversión la ejecuta el mismo compilador al tipo de dato que recibirá el valor. 


Para que esto pase, hay que cumplir una regla... el tipo de dato de destino debe ser mayor o igual al tipo de dato de origen.  En este caso el destino (int) es mayor que el dato de origen (byte). 
Tenemos dos excepciones a la regla:
- Si la variable de destino es entera y el origen es decimal (float o doble) la conversión no podrá ser automática.
- Si la variable de destino es un char y el origen es numérico, no podrás hacer ninguna conversión.

Conversiones explicitas

Cuando no se cumplen las condiciones para una conversión implicita, tenemos que recurrir a usar expresiones.

variable_destino = (tipo_destino) dato_origen;

Con esto le estamos diciendo al compilador que convierta el dato origen al tipo de la variable destino.
Esta operación es conocida como casting o estrechamiento, ya que al convertir un tipo de dato a otro tipo de dato de tamaño inferior, se estrecha, perdiendo en algunos casos los datos, aunque esto no provocaría errores de ejecución.




ÁMBITO DE LAS VARIABLES

Según en donde se declaren las variables, estas adquieren distintas denominaciones.

Campo o atributo: son las variables que son declaradas al principio de la clase, fuera de los métodos. Estas variables son compartidas por todos los métodos, por lo cual se tienen que declarar con el modificador private, para que no sean accesibles desde fuera de la clase.

Variable local: Son las variables que se declaran dentro de un método. Su ámbito esta restringido solamente al interior del método y no admiten ningún modificador. Estas variables también pueden declararse dentro de un bloque de instrucciones, aunque fuera de el mueren al instante.


















Declaración de un campo String, y de una variable local de nombre local. Cabe notar que la variable local no acepta ningún modificador, como public o private, solamente acepta el modificador "final" el cual lo convierte en una constante.













LITERALES

Un literal es un valor constante que se puede asignar directamente a una variable o puede ser usado en una expresión... emmm no entendi ni yo jajaja.
Veamos, por lo que lei,  un literal es un valor que es de una naturaleza genuina... esto quiere decir que:

el numero 10, obviamente es un entero, por lo cual para java es un int.
intentemos guardar un 3.4 (decimal) en un entero, en teoría no se podría asignar:
























Oh excelente, no se puede !!, eso es un Literal, valores que pueden ser declarados en un tipo de variable dado.

Existen 4 tipos de literales básicos, los cuales coinciden con los 4 tipos de datos básicos de java. 

NUMÉRICOS ENTEROS -  NUMÉRICOS DECIMALES - CARACTERES - LÓGICOS. 

Literales numéricos enteros: Son considerados de tipo int.
Los literales numérico-decimal: Son los tipos double.
Los literales de carácter: se escriben entre comillas simples.
Los literales lógicos: corresponden a true y false

Ahora puedes saber que no se puede guardar el valor " soy una cadena " en un tipo int... veamos por si no me crees:

























Vieron? !!... aunque hay unos casos especiales. Sabemos que los datos primitivos tienen un tamaño, algunos son mas grandes que otros, lo que significa que puedes guardar un dato pequeño en un tipo que es de mayor tamaño, no así guardar un tipo grande en un tipo chico. Lo veremos ahora:





















Que paso? pues estamos tratando de asignar el valor de un short (tamaño 2) en un byte (tamaño 1). No se puede por que el byte es pequeño... has la prueba e intenta meter una caja fuerte de banco dentro de una cajita de fósforos.... difícil verdad?, pues esto mismo pasa con los primitivos de java. Podríamos hacer varios ejemplos, pero una buena manera de recordarlo es imaginar una lista con los datos primitivos, desde el mas chico al mas grande, y asi ver que puedes asignar.

BYTE-SHORT-INT-LONG-FLOAT-DOUBLE

puedes asignar un byte a un short
puedes asignar un short a un int
puedes asignar un int en un long
puedes asignar un long a un float
puedes asignar un float en un double.
NO puedes asignar un double en un byte.. lo revientas !!.

Es posible hacer conversiones y nos queda todo un tema con los tipos de datos mas a fondo, lo veré mas adelante!!


DECLARACIÓN DE VARIABLES

Ahora veremos como declarar las variables como un campeón !

tipo_dato nombre_variable

Listo !!

Un nombre de variable valido tiene que cumplir ciertas reglas:
- Debe comenzar por un carácter alfabético.
- No puede contener espacios, signos de puntuación o sentencias de escape.
- No pueden utilizarse palabras reservadas java.

También se pueden declarar varias variables en una sola instrucción:

tipo variable1, variable2, variable 3

Mira este ejemplo, se ve como el compilador rechaza las declaraciones erroneas en tiempo de ejecución

ASIGNACIÓN DE VARIABLES

Una vez declarada la variable, podemos asignarle valores. Para hacerlo hay que seguir el siguiente formato:

variable=expresión

Donde expresión puede ser cualquier dato que sea un valor acorde a tu variable declarada, como por ejemplo:

int a, b, b;
a = 1;
b= 2;
c =3;

Ojo que también puedes inicializar una variable es su misma declaración:

int a = 7; // inicializas la variable con el valor 7.

No hay mas que hablar sobre este tema.

Tipos de datos primitivos y  Variables 

Jueves 1 de mayo 2013,


TIPOS PRIMITIVOS

 Toda información que se maneja en un programa java puede estar representada, bien por un objeto o por un dato básico, o mejor llamado por un tipo primitivo. Java soporta 8 tipos de datos primitivos:

byte-short-int-long-char-float-double-boolean

 Nótese que no encontramos ningún tipo de dato que represente una cadena de caracteres. Esto es por que java trata las cadenas con el objeto String. Los tipos de datos primitivos se pueden clasificar en 4 grupos distintos:

- Numéricos Enteros Son los tipo byte, short,int,long:  Estos 4 representan números enteros con signo . -- -- Carácter : El tipo char representa un carácter codificado en el sistema Unicode.
- Numérico decimal:  Los tipo double y float representan números con coma flotante.
- Booleanos El tipo bolean representa true o false.

Detalle de los tipos primitivos segun el tutorial java de oracle:

byte:  El tipo de dato  byte es un entero de 8 bits complemento a 2. Valor mínimo es -127 hasta 128.
short: El tipo de dato short es un entero de 16 bit complemento a 2. Valor mínimo -32.768 hasta 32.767
int:     El tipo de dato int es un entero de 32 bit complemento a 2. Valor mínimo -2.147.483.648 hasta 2.147.483.647.
long:  El tipo de dato long es un entero de 64 bit complemento a 2. su valor mínimo es un negativo muy grande.
float: El tipo de dato float es un dato en coma flotante de 32 bit precisión simple.
double: El tipo de dato double es un dato en coma flotante de 32 bit y precisión doble.
boolean: Este tipo contiene dos valores, true o false (1-0)
char: carácter unicode de 16 bit

VARIABLES

 Una variable es un espacio físico de memoria donde un programa puede almacenar un dato para su posterior utilización.

Tipos de datos de una variable
 Podemos utilizar las variables para almacenar los tipos de datos indicados anteriormente: 

Tipos primitivos: Las variables que trabajan con tipos primitivos, almacenan el dato en si (el dato en duro). Veamos si la siguiente imagen de la derecha lo puede graficar.


 Aquí tenemos en primer lugar, una variable int de nombre "a", la cual le asignamos el numero 1. A la variable "b" le asignamos el valor de "a"(b=a), por lo que la variable "b" ahora posee el valor 1.

 Tipos Objeto: Los objetos también se tratan a través de variables, pero de una forma distinta. Una variable de tipo Objeto no contiene al objeto como tal, sino que tiene una referencia al mismo. Mira el siguiente ejemplo, en donde estamos comparando dos String con el mismo valor "j". Debería dar true?

No... el resultado es:



 Con el == estamos comparando la dirección de memoria, por lo que da falso. Esto es por que los dos objetos String tienen referenciados dos direcciones de memoria distintas. Para saber si dos objetos String son iguales, tenemos que usar el método equals, el cual esta echo precisamente para comparar objetos.