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

📄 java2.htm

📁 E-books about Java Programing in Spanish
💻 HTM
字号:
<HTML>
<HEAD>
<TITLE>Java desde Cero</TITLE>

<META NAME="GENERATOR" CONTENT="Internet Assistant for Microsoft Word 2.0z">
</HEAD>
<BODY background=1.gif  TEXT=000000 LINK=FF0000 VLINK=A62A2A>
<H1>Las clases en Java</H1>
<P>
Bueno, antes que nada conviene saber que en Java hay un mont&oacute;n
de clases ya definidas y utilizables.
<P>
&Eacute;stas vienen en las bibliotecas est&aacute;ndar:
<UL>
<LI>java.lang  - clases esenciales, n&uacute;meros, strings, objetos,
compilador, runtime, seguridad y threads (es el &uacute;nico paquete
que se incluye autom&aacute;ticamente en todo programa Java)
<LI>java.io  - clases que manejan entradas y salidas
<LI>java.util  - clases &uacute;tiles, como estructuras gen&eacute;ricas,
manejo de fecha, hora y strings, n&uacute;mero aleatorios, etc.
<LI>java.net - clases para soportar redes: URL, TCP, UDP, IP,
etc.
<LI>java.awt - clases para manejo de interface gr&aacute;fica,
ventanas, etc.
<LI>java.awt.image - clases para manejo de im&aacute;genes
<LI>java.awt.peer - clases que conectan la interface gr&aacute;fica
a implementaciones dependientes de la plataforma (motif, windows)
<LI>java.applet - clases para la creaci&oacute;n de applets y
recursos para reproducci&oacute;n de audio.
</UL>
<P>
Para que se den una idea, los n&uacute;meros enteros, por ejemplo,
son &quot;instancias&quot; de una clase no redefinible, <I>Integer</I>,
que desciende de la clase <I>Number</I> e implementa los siguientes
atributos y m&eacute;todos:
<PRE>
<FONT SIZE=2>public  final  class  java.lang.Integer extends  java.lang.Number {
        // Atributos
    public final static int MAX_VALUE;
    public final static int MIN_VALUE;
        // M&eacute;todos Constructores
    public Integer(int  value);
    public Integer(String  s);
        // M&aacute;s M&eacute;todos
    public double doubleValue();
    public boolean equals(Object  obj);
    public float floatValue();
    public static Integer getInteger(String  nm);
    public static Integer getInteger(String  nm, int  val);	
    public static Integer getInteger(String  nm, Integer  val);
    public int hashCode();
    public int intValue();
    public long longValue();
    public static int parseInt(String  s);
    public static int parseInt(String  s, int  radix);
    public static String toBinaryString(int  i);
    public static String toHexString(int  i);
    public static String toOctalString(int  i);
    public String toString();
    public static String toString(int  i);
    public static String  toString(int  i, int  radix);
    public static Integer valueOf(String  s);
    public static Integer valueOf(String  s, int  radix);
}</FONT>
</PRE>
<P>
Mucho, no?
<P>
Esto tambi&eacute;n nos da algunas ideas:
<UL>
<LI>la estructura de una clase
<LI>caramba, hay m&eacute;todos repetidos!
</UL>
<P>
De la estructura enseguida hablaremos; en cuanto a los m&eacute;todos
repetidos (como <I>parseInt</I> por ejemplo), al llamarse al m&eacute;todo
el compilador decide cu&aacute;l de las implementaciones del mismo
usar bas&aacute;ndose en la cantidad y tipo de par&aacute;metros
que le pasamos. Por ejemplo, parseInt(&quot;134&quot;) y parseInt(&quot;134&quot;,16),
al compilarse, generar&aacute;n llamados a dos m&eacute;todos
distintos.
<H2>Estructura de una clase</H2>
<P>
Una clase consiste en:
<PRE>
<FONT SIZE=2>algunas_palabras <B>class</B> <B>nombre_de_la_clase</B> [algo_m&aacute;s] <B>{
</B>	[lista_de_atributos]
	[lista_de_m&eacute;todos]
<B>}</B></FONT>
</PRE>
<P>
Lo que est&aacute; entre [ y ] es opcional&#133;
<P>
Ya veremos qu&eacute; poner en &quot;algunas_palabras&quot; y
&quot;algo_m&aacute;s&quot;, por ahora sigamos un poco m&aacute;s.
<P>
La lista de atributos (nuestras viejas variables locales) sigue
el mismo formato de C: se define primero el tipo y luego el nombre
del atributo, y finalmente el &quot;;&quot;.
<P>
<FONT FACE="Arial">public final static <B>int MAX_VALUE</B></FONT>
<P>
<FONT FACE="Arial">;</FONT>
<P>
Tambi&eacute;n tenemos &quot;algunas_palabras&quot; adelante,
pero en seguida las analizaremos.
<P>
En cuanto a los m&eacute;todos, tambi&eacute;n siguen la sintaxis
del C; un ejemplo:
<PRE>
<FONT SIZE=2>public int <B>incContador() {</B>	// declaraci&oacute;n y apertura de {
    cnt++;			// instrucciones, separadas por &quot;;&quot;
    return(cnt);
<B>}</B>				// cierre de }</FONT>
</PRE>
<P>
Finalmente, se aceptan comentarios entre /* y */, como en C, o
bien usando // al principio del comentario (el comentario termina
al final de la l&iacute;nea).
<P>
Veamos un ejemplo:
<PRE WIDTH=132>
<FONT SIZE=2>// Implementaci&oacute;n de un contador sencillo
// GRABAR EN UN ARCHIVO	&quot;Contador.java&quot; 	(OJO CON LAS MAYUSCULAS!)
// COMPILAR CON:		&quot;javac Contador.java&quot;	(NO OLVIDAR EL .java!)
// ESTA CLASE NO ES UNA APLICACION, pero nos va a servir enseguida

public class Contador {			// Se define la clase Contador

  // Atributos
  int cnt;					// Un entero para guardar el valor actual

  // Constructor				// Un m&eacute;todo constructor&#133;
  public Contador() {			// &#133;lleva el mismo nombre que la clase
    cnt = 0;				// Simplemente, inicializa (1)
  }

  // M&eacute;todos
  public int incCuenta() {			// Un m&eacute;todo para incrementar el contador
    cnt++;				// incrementa cnt
    return cnt;				// y de paso devuelve el nuevo valor
  }
  public int getCuenta() {		// Este s&oacute;lo devuelve el valor actual
    return cnt;				// del contador
  }  
}</FONT>
</PRE>
<P>
Cuando, desde una aplicaci&oacute;n u otro objeto, se crea una
<B>instancia</B> de la clase <B>Contador</B>, mediante la instrucci&oacute;n:
<P>
<FONT FACE="Arial">new Contador()</FONT>
<P>
el compilador busca un m&eacute;todo con el mismo nombre de la
clase y que se corresponda con la llamada en cuanto al tipo y
n&uacute;mero de par&aacute;metros. Dicho m&eacute;todo se llama
Constructor, y una clase puede tener m&aacute;s de un constructor
(no as&iacute; un objeto o instancia, ya que una vez que fue creado
no puede recrearse sobre s&iacute; mismo).
<P>
En tiempo de ejecuci&oacute;n, al encontrar dicha instrucci&oacute;n,
el int&eacute;rprete reserva espacio para el objeto/instancia,
crea su estructura y llama al constructor.
<P>
O sea que el efecto de <FONT FACE="Arial">new Contador()</FONT>
es, precisamente, reservar espacio para el contador e inicializarlo
en cero.
<P>
En cuanto a los otros m&eacute;todos, se pueden llamar desde otros
objetos (lo que incluye a las aplicaciones) del mismo modo que
se llama una funci&oacute;n desde C.
<P>
Por ejemplo, usemos nuestro contador en un programa bien sencillo
que nos muestre c&oacute;mo evoluciona:
<PRE WIDTH=132>
<FONT SIZE=2>// Usemos nuestro contador en una mini-aplicaci&oacute;n
// GRABAR EN UN ARCHIVO	&quot;Ejemplo1.java&quot; 	(OJO CON LAS MAYUSCULAS!)
// COMPILAR CON:		&quot;javac Ejemplo.java&quot;	(NO OLVIDAR EL .java!)
// EJECUTAR CON:		&quot;java Ejemplo1&quot;		(SIN el .java)

import java.io.*;				// Uso la biblioteca de entradas/salidas

public class Ejemplo1 {			// IMPORTANTE: Nombre de la clase
					// igual al nombre del archivo!
  // entero para asignarle el valor del contador e imprimirlo
  // aunque en realidad no me hace falta.
  static int n;
  // y una variable tipo Contador para instanciar el objeto&#133;
  static Contador laCuenta;

  // ESTE METODO, MAIN, ES EL QUE HACE QUE ESTO SE COMPORTE
  // COMO APLICACION. Es donde arranca el programa cuando ejecuto &quot;java Ejemplo1&quot;
  // NOTA: main debe ser public &amp; static.
  public static void main ( String args[] ) {
    System.out.println (&quot;Cuenta&#133; &quot;);		// Imprimo el t&iacute;tulo
    laCuenta = new Contador();			// Creo una instancia del Contador
    System.out.println (laCuenta.getCuenta());	// 0 - Imprimo el valor actual (cero!)
    n = laCuenta.incCuenta();			// 1 - Asignaci&oacute;n e incremento
    System.out.println (n);			// Ahora imprimo n
    laCuenta.incCuenta();			// 2 - Lo incremento (no uso el valor&#133;
    System.out.println (laCuenta.getCuenta());	// &#133;de retorno) y lo imprimo
    System.out.println (laCuenta.incCuenta());	// 3 - Ahora todo en un paso!
  }
}</FONT>
</PRE>
<P>
En el cap&iacute;tulo III vamos a analizar este programa en detalle.
Por ahora veamos la diferencia con un applet que haga lo mismo:
<BR>
<PRE WIDTH=132>
<FONT SIZE=2>	// Applet de acci&oacute;n similar a la aplicaci&oacute;n Ejemplo1
	// GRABAR EN ARCHIVO:	&quot;Ejemplo2.java&quot;
	// COMPILAR CON:		&quot;javac Ejemplo2.java&quot;
	// PARA EJECUTAR:	Crear una p&aacute;gina HTML como se indica luego
import java.applet.*;
import java.awt.*;

public class Ejemplo2 extends Applet {
  static int n;
  static Contador laCuenta;

  // Constructor&#133;
  public Ejemplo2 () {
    laCuenta = new Contador();
  }

  // El m&eacute;todo paint se ejecuta cada vez que hay que redibujar
  // NOTAR EL EFECTO DE ESTO CUANDO SE CAMBIA DE TAMA&Ntilde;O LA
  // VENTANA DEL NAVEGADOR!
  public void paint (Graphics g) {
    g.drawString (&quot;Cuenta...&quot;, 20, 20);
    g.drawString (String.valueOf(laCuenta.getCuenta()), 20, 35 );
    n = laCuenta.incCuenta();
    g.drawString (String.valueOf(n), 20, 50 );
    laCuenta.incCuenta();
    g.drawString (String.valueOf(laCuenta.getCuenta()), 20, 65 );
    g.drawString (String.valueOf(laCuenta.incCuenta()), 20, 80 );
  }
}<BR>
</FONT>
</PRE>
<P>
Ahora es necesario crear una p&aacute;gina HTML para poder visualizarlo.
Para esto, crear y luego cargar el archivo ejemplo2.htm con un
browser que soporte Java (o bien ejecutar en la ventana DOS: &quot;appletviewer
ejemplo2.htm&quot;):
<PRE WIDTH=132>
<FONT SIZE=2>&lt;HTML&gt;
&lt;HEAD&gt;
&lt;TITLE&gt;Ejemplo 2 - Applet Contador&lt;/TITLE&gt;
&lt;/HEAD&gt;
&lt;BODY&gt;
&lt;applet code=&quot;Ejemplo2.class&quot; width=170 height=150&gt;
&lt;/applet&gt;
&lt;/BODY&gt;
&lt;/HTML&gt;<BR>
</FONT>
</PRE>
<P>
Para terminar este cap&iacute;tulo, observemos las diferencias
entre la aplicaci&oacute;n standalone y el applet:
<UL>
<LI>La aplicaci&oacute;n usa un m&eacute;todo main, desde donde
arranca
<LI>El applet, en cambio, se arranca desde un constructor (m&eacute;todo
con el mismo nombre que la clase)
</UL>
<P>
Adem&aacute;s:
<UL>
<LI>En la aplicaci&oacute;n utilizamos System.out.println para
imprimir en la salida est&aacute;ndar
<LI>En el applet necesitamos &quot;dibujar&quot; el texto sobre
un fondo gr&aacute;fico, por lo que usamos el m&eacute;todo g.drawString
dentro del m&eacute;todo paint (que es llamado cada vez que es
necesario redibujar el applet)
</UL>
<P>
Con poco trabajo se pueden combinar ambos casos en un solo objeto,
de modo que <B>la misma</B> clase sirva para utilizarla de las
dos maneras:<BR>
<PRE WIDTH=132>
<FONT SIZE=2>// Archivo:  Ejemplo3.java
// Compilar con: javac Ejemplo3.java
import java.applet.*;
import java.awt.*;
import java.io.*;

public class Ejemplo3 extends Applet {
  static int n;
  static Contador laCuenta;

  public Ejemplo3 () {
    laCuenta = new Contador();
  }

  public static void main(String args[]) {
    laCuenta = new Contador();
    paint();
  }

  public static void paint () {
    System.out.println (&quot;Cuenta...&quot;);
    System.out.println (laCuenta.getCuenta());
    n = laCuenta.incCuenta();
    System.out.println (n);
    laCuenta.incCuenta();
    System.out.println (laCuenta.getCuenta());
    System.out.println (laCuenta.incCuenta());
  }
  public void paint (Graphics g) {
    g.drawString (&quot;Cuenta...&quot;, 20, 20);
    g.drawString (String.valueOf(laCuenta.getCuenta()), 20, 35 );
    n = laCuenta.incCuenta();
    g.drawString (String.valueOf(n), 20, 50 );
    laCuenta.incCuenta();
    g.drawString (String.valueOf(laCuenta.getCuenta()), 20, 65 );
    g.drawString (String.valueOf(laCuenta.incCuenta()), 20, 80 );
  }
}</FONT>
</PRE>
<P>
Esta clase puede ejecutarse tanto con &quot;java Ejemplo3&quot;
en una ventana DOS, como cargarse desde una p&aacute;gina HTML
con:
<PRE WIDTH=132>
<FONT SIZE=2>&lt;applet code=&quot;Ejemplo3.class&quot; width=170 height=150&gt;
&lt;/applet&gt;</FONT>
</PRE>
<P>
Notar que conviene probar el applet con el appletviewer (&quot;appletviewer
ejemplo3.htm&quot;), ya que &eacute;ste indica en la ventana DOS
si hay alg&uacute;n error durante la ejecuci&oacute;n. Los browsers
dejan pasar muchos errores, simplemente suprimiendo la salida
a pantalla del c&oacute;digo err&oacute;neo.
<P>
Notar que en todo este desarrollo de las clases Ejemplo1, Ejemplo2
y Ejemplo3, en ning&uacute;n momento volvimos a tocar la clase
Contador!
<P>
En el pr&oacute;ximo cap&iacute;tulo analizaremos el c&oacute;digo
l&iacute;nea por l&iacute;nea para ir comprendiendo los distintos
elementos que all&iacute; aparecen.
<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 + -