⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 java3.htm

📁 E-books about Java Programing in Spanish
💻 HTM
📖 第 1 页 / 共 2 页
字号:
archiva un objeto, o sea que no forman parte del estado permanente
del mismo.
<P>
<I>Volatile</I> se utiliza con variables modificadas asincr&oacute;nicamente
por objetos en diferentes <I>threads</I> (literalmente &quot;hilos&quot;,
tareas que se ejecutan en paralelo); b&aacute;sicamente esto implica
que distintas tareas pueden intentar modificar la variable simult&aacute;neamente,
y <I>volatile</I> asegura que se vuelva a leer la variable (por
si fue modificada) cada vez que se la va a usar (esto es, en lugar
de usar registros de almacenamiento como buffer).
<H3>Los tipos de Java</H3>
<P>
Los tipos de variables disponibles son b&aacute;sicamente 3:
<UL>
<LI>tipos b&aacute;sicos (no son objetos)
<LI>arreglos (arrays)
<LI>clases e interfases
</UL>
<P>
Con lo que vemos que cada vez que creamos una clase o interfase
estamos definiendo un nuevo tipo.
<P>
Los <B>tipos b&aacute;sicos</B> son:<BR>

<TABLE BORDER=1>
<TR><TD WIDTH=104><B>Tipo</B></TD><TD WIDTH=170><B>Tama&ntilde;o/Formato</B>
</TD><TD WIDTH=208><B>Descripci&oacute;n</B></TD></TR>
<TR><TD WIDTH=104>byte</TD><TD WIDTH=170>8-bit complemento a 2
</TD><TD WIDTH=208>Entero de un byte</TD></TR>
<TR><TD WIDTH=104>short</TD><TD WIDTH=170>16-bit complemento a 2
</TD><TD WIDTH=208>Entero corto</TD></TR>
<TR><TD WIDTH=104>int</TD><TD WIDTH=170>32-bit complemento a 2
</TD><TD WIDTH=208>Entero</TD></TR>
<TR><TD WIDTH=104>long</TD><TD WIDTH=170>64-bit complemento a 2
</TD><TD WIDTH=208>Entero largo</TD></TR>
<TR><TD WIDTH=104>float</TD><TD WIDTH=170>32-bit IEEE 754</TD>
<TD WIDTH=208>Punto flotante, precisi&oacute;n simple</TD></TR>
<TR><TD WIDTH=104>double</TD><TD WIDTH=170>64-bit IEEE 754</TD>
<TD WIDTH=208>Punto flotante, precisi&oacute;n doble</TD></TR>
<TR><TD WIDTH=104>char</TD><TD WIDTH=170>16-bit caracter Unicode
</TD><TD WIDTH=208>Un caracter</TD></TR>
<TR><TD WIDTH=104>boolean</TD><TD WIDTH=170>true, false</TD><TD WIDTH=208>Valor booleano (verdadero o falso)
</TD></TR>
</TABLE>
<P>
<P>
Los <B>arrays</B> son arreglos de cualquier tipo (b&aacute;sico
o no). Por ejemplo, existe una clase <I>Integer</I>; un arreglo
de objetos de dicha clase se notar&iacute;a:
<P>
  Integer vector[ ];
<P>
Los arreglos siempre son din&aacute;micos, por lo que <B>no es
v&aacute;lido</B> poner algo como:
<P>
  Integer cadena[5];
<P>
Aunque s&iacute; es v&aacute;lido inicializar un arreglo, como
en:
<P>
  int d&iacute;as[ ] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31,
30, 31 };
<P>
  char letras[ ] = { 'E', 'F', 'M', 'A', 'M', 'J', 'J', 'A', 'S',
'O', 'N', 'D' };
<P>
String nombres[ ] = new String[12];<BR>
<P>
Nota al margen: no confundir un String (<I>cadena</I> de caracteres)
con un <I>arreglo</I> de caracteres! Son cosas bien distintas!
<P>
Ya hablaremos m&aacute;s adelante de las clases String y StringBuffer.
<P>
En Java, para todas las variables de tipo b&aacute;sico se accede
al valor asignado a la misma directamente (no se conoce la direcci&oacute;n
de memoria que ocupa). Para las dem&aacute;s (arrays, clases o
interfases), se accede a trav&eacute;s de un puntero a la variable.
El valor del puntero no es accesible ni se puede modificar (como
en C); Java no necesita esto y adem&aacute;s eso atentar&iacute;a
contra la robustez del lenguaje.
<P>
De hecho, en Java no existen los tipos <B>pointer</B>, <B>struct</B>
o <B>union</B>. Un objeto es m&aacute;s que una estructura, y
las uniones no se hacen necesarias con un m&eacute;todo de programaci&oacute;n
adecuado (y adem&aacute;s se evita la posibilidad de acceder a
los datos incorrectamente).
<P>
Algo m&aacute;s respecto a los arreglos: ya que Java gestiona
el manejo de memoria para los mismos, y lanza excepciones si se
intenta violar el espacio asignado a una variable, se evitan problemas
t&iacute;picos de C como acceder a lugares de memoria prohibidos
o fuera del lugar definido para la variable (como cuando se usa
un sub&iacute;ndice m&aacute;s grande que lo previsto para un
arreglo&#133;).
<H3>Y los m&eacute;todos&#133;</H3>
<P>
Los m&eacute;todos, como las clases, tienen una declaraci&oacute;n
y un cuerpo.
<P>
La declaraci&oacute;n es del tipo:<BR>
<P>
[<B>private</B>|<B>protected</B>|<B>public</B>] [<B>static</B>]
[<B>abstract</B>] [<B>final</B>] [<B>native</B>] [<B>synchronized</B>]
TipoDevuelto NombreM&eacute;todo <B>( </B>[tipo1 nombre1[, tipo2
nombre2 ]&#133;] <B>)</B> [<B>throws</B> excepci&oacute;n1 [,excepci&oacute;n2]&#133;
]<BR>
<P>
A no preocuparse: poco a poco aclararemos todo con ejemplos.
<P>
B&aacute;sicamente, los m&eacute;todos son como las funciones
de C: implementan, a trav&eacute;s de funciones, operaciones y
estructuras de control, el c&aacute;lculo de alg&uacute;n par&aacute;metro
que es el que devuelven al objeto que los llama. S&oacute;lo pueden
devolver <B>un</B> valor (del tipo <I>TipoDevuelto</I>), aunque
pueden no devolver ninguno (en ese caso <I>TipoDevuelto</I> es
<B>void</B>). Como ya veremos, el valor de retorno se especifica
con la instrucci&oacute;n <B>return</B>, dentro del m&eacute;todo.
<P>
Los m&eacute;todos pueden utilizar valores que les pasa el objeto
que los llama (<I>par&aacute;metros</I>), indicados con <I>tipo1
nombre1, tipo2 nombre2</I>&#133; en el esquema de la declaraci&oacute;n.
<P>
Estos par&aacute;metros pueden ser de cualquiera de los tipos
ya vistos. Si son tipos b&aacute;sicos, el m&eacute;todo recibe
el <I>valor</I> del par&aacute;metro; si son arrays, clases o
interfases, recibe un puntero a los datos (<I>referencia</I>).
Veamos un peque&ntilde;o ejemplo:<BR>
<PRE WIDTH=132>
<FONT SIZE=2>public int AumentarCuenta(int cantidad) {
cnt = cnt + cantidad;
return cnt;
}<BR>
</FONT>
</PRE>
<P>
Este m&eacute;todo, si lo agregamos a la clase <B>Contador</B>,
le suma <I>cantidad</I> al acumulador <B>cnt</B>. En detalle:
<UL>
<LI>el m&eacute;todo recibe un valor entero (<I>cantidad</I>)
<LI>lo suma a la variable de instancia <I>cnt</I>
<LI>devuelve la suma (<I>return cnt</I>)
</UL>
<P>
&#191;C&oacute;mo hago si quiero devolver m&aacute;s de un valor?
Por ejemplo, supongamos que queremos hacer un m&eacute;todo dentro
de una clase que devuelva la posici&oacute;n del mouse.
<P>
Lo siguiente no sirve:
<PRE WIDTH=132>
<FONT SIZE=2>		void GetMousePos(int x, int y) {
			x = &#133;.;		// esto no sirve!
			y = &#133;.;		// esto tampoco!
}</FONT>
</PRE>
<P>
porque el m&eacute;todo no puede modificar los par&aacute;metros
<I>x</I> e <I>y</I> (que han sido pasados por valor, o sea que
el m&eacute;todo recibe el valor num&eacute;rico pero no sabe
ad&oacute;nde est&aacute;n las variables en memoria).
<P>
La soluci&oacute;n es utilizar, en lugar de tipos b&aacute;sicos,
una clase:
<PRE WIDTH=132>
<FONT SIZE=2>		class MousePos { public int x, y; }</FONT>
</PRE>
<P>
y luego utilizar esa clase en nuestro m&eacute;todo:
<PRE WIDTH=132>
<FONT SIZE=2>		void GetMousePos( MousePos m ) {
			m.x = &#133;&#133;;
			m.y = &#133;&#133;;
}<BR>
<BR>
</FONT>
</PRE>
<H3>El resto de la declaraci&oacute;n</H3>
<P>
<B>Public</B>, <B>private</B> y <B>protected</B> act&uacute;an
exactamente igual para los m&eacute;todos que para los atributos,
as&iacute; que veamos el resto.
<P>
Los m&eacute;todos est&aacute;ticos (<B>static</B>), son, como
los atributos, m&eacute;todos <I>de clase</I>; si el m&eacute;todo
no es <B>static</B> es un m&eacute;todo <I>de instancia</I>. El
significado es el mismo que para los atributos: un m&eacute;todo
<I>static</I> es compartido por todas las instancias de la clase.
<P>
Ya hemos hablado de las clases abstractas; los m&eacute;todos
abstractos (<B>abstract</B>) son aquellos de los que se da la
declaraci&oacute;n pero no la implementaci&oacute;n (o sea que
consiste s&oacute;lo del encabezamiento). Cualquier clase que
contenga al menos un m&eacute;todo abstracto (o cuya clase madre
contenga al menos un m&eacute;todo abstracto que no est&eacute;
implementado en la hija) es una clase abstracta.
<P>
Es <B>final</B> un m&eacute;todo que no puede ser redefinido por
ning&uacute;n descendiente de la clase.
<P>
Las clases <B>native</B> son aquellas que se implementan en otro
lenguaje (por ejemplo C o C++) propio de la m&aacute;quina. Sun
aconseja utilizarlas bajo riesgo propio, ya que en realidad son
ajenas al lenguaje. Pero la posibilidad de usar viejas bibliotecas
que uno arm&oacute; y no tiene ganas de reescribir existe!.
<P>
Las clases <B>synchronized</B> permiten sincronizar varios <I>threads</I>
para el caso en que dos o m&aacute;s accedan concurrentemente
a los mismos datos. De nuevo, m&aacute;s detalles habr&aacute;
en el futuro, cuando hablemos de threads.
<P>
Finalmente, la cl&aacute;usula <B>throws</B> sirve para indicar
que la clase genera determinadas excepciones. Tambi&eacute;n hablaremos
de las excepciones m&aacute;s adelante.<BR>
<P>
En la pr&oacute;xima veremos el cuerpo de la declaraci&oacute;n
y empezaremos a armar algunos ejemplos concretos para ir aclarando
todos estos conceptos&#133;
<P>
<HR>
Jorge Bourdette
<P>
<A HREF="mailto:jpb@amarillas.com">jpb@amarillas.com</A>
</BODY>
</HTML>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -