<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-2016004623247230365</id><updated>2011-08-03T15:29:49.607-05:00</updated><category term='reflection'/><category term='enum'/><category term='ant'/><category term='dll'/><category term='java'/><category term='listas'/><category term='php'/><category term='ordernar'/><category term='JZab'/><category term='singleton'/><category term='tutorial'/><category term='classpath'/><category term='Windows'/><category term='introduccion'/><category term='java bean'/><category term='facil'/><category term='XNA'/><category term='Widgets'/><category term='oracle'/><category term='anotaciones'/><category term='jni'/><category term='Tip'/><category term='Networking'/><category term='sun'/><category term='performance'/><category term='gustavo villegas'/><category term='compra'/><title type='text'>Developer Tips</title><subtitle type='html'>Tips sobre programación Java, Web, Software y más</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://xyzdev.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2016004623247230365/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://xyzdev.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>JZabdiel</name><uri>http://www.blogger.com/profile/13273407104522826832</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_1F7J4DNWM5I/SZmHTogG5tI/AAAAAAAAACo/ROAasCSsfyM/S220/duke.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>24</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-2016004623247230365.post-5896161704259703678</id><published>2009-06-23T03:44:00.003-05:00</published><updated>2009-06-23T04:03:05.653-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='reflection'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='java bean'/><category scheme='http://www.blogger.com/atom/ns#' term='gustavo villegas'/><title type='text'>Más Reflexión</title><content type='html'>Reflection es un API de Java que es muy útil y que es utilizada por muchos frameworks de Java, como Spring, Struts o Trapestry, ya que permite acceder a métodos, atributos y ver el comportamiento de una clase durante la ejecución del programa.&lt;br /&gt;&lt;br /&gt;Reflection puede servir para crear entornos de desarrollo visuales, herramientas que sirvan para realizar pruebas a algún componente, herramientas de depuramiento (aka debugging) o algún marco de trabajo que cree instancias e inyecte propiedades de objetos a partir de un archivo de configuración&lt;br /&gt;&lt;br /&gt;Así que está vez muestro una clase que realizó un compañero de trabajo ya hace algunos años y que permite crear instancias y/o acceder a las propiedades (a tráves de los métodos accesores) de manera reflexiva. Esta es una herramienta muy útil ya que permite obtener propiedades de objetos de manera que podemos usarla para ordenar beans de manera mas general sin tener que definir un comparator para cada bean dependiendo de la propiedad que se desee comparar, convertir una lista de un beans en un mapa o crear listas de con alguna de las propiedades del bean.&lt;br /&gt;&lt;br /&gt;&lt;pre class="java" name="code"&gt;&lt;br /&gt;/*&lt;br /&gt; * GenericBean.java&lt;br /&gt; *&lt;br /&gt; * Created on 22 de junio de 2006, 09:32 PM&lt;br /&gt; *&lt;br /&gt;&lt;br /&gt; */&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt; *&lt;br /&gt; * @author JM&lt;br /&gt; */&lt;br /&gt;import java.lang.reflect.Constructor;&lt;br /&gt;import java.lang.reflect.Method;&lt;br /&gt;&lt;br /&gt;public class GenericBean {&lt;br /&gt; private Object o;&lt;br /&gt; private Class beanClass;&lt;br /&gt;&lt;br /&gt; /** Creates a new instance of GenericBean */&lt;br /&gt; public GenericBean(String className) {&lt;br /&gt;  try {&lt;br /&gt;   beanClass = Class.forName(className);&lt;br /&gt;   Constructor c = beanClass.getConstructor();&lt;br /&gt;   o = c.newInstance();&lt;br /&gt;  } catch (Exception e) {&lt;br /&gt;   e.printStackTrace();&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; public GenericBean(Object instance) {&lt;br /&gt;  o = instance;&lt;br /&gt;  beanClass = o.getClass();&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; public Object get(String property) {&lt;br /&gt;  Object ret = null;&lt;br /&gt;  property = property.substring(0, 1).toUpperCase()&lt;br /&gt;    + property.substring(1);&lt;br /&gt;  try {&lt;br /&gt;   String methodName = "get" + property;&lt;br /&gt;   Method method = beanClass.getMethod(methodName);&lt;br /&gt;   ret = method.invoke(o);&lt;br /&gt;  }&lt;br /&gt;  catch(Exception e) {&lt;br /&gt;   try {&lt;br /&gt;    String methodName = "is" + property;&lt;br /&gt;    Method method = beanClass.getMethod(methodName);&lt;br /&gt;    ret = method.invoke(o);&lt;br /&gt;   }&lt;br /&gt;   catch(Exception ex) {&lt;br /&gt;    e.printStackTrace();&lt;br /&gt;   }&lt;br /&gt;  } &lt;br /&gt;  &lt;br /&gt;  return ret;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; public void set(String property, Object value) {&lt;br /&gt;  property = property.substring(0, 1).toUpperCase()&lt;br /&gt;    + property.substring(1);&lt;br /&gt;  try {&lt;br /&gt;   Method method = beanClass.getMethod("set" + property, value&lt;br /&gt;     .getClass());&lt;br /&gt;   method.invoke(o, value);&lt;br /&gt;  } catch (Exception e) {&lt;br /&gt;   e.printStackTrace();&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; public Object getObject() {&lt;br /&gt;  return o;&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; public Class getObjectClass() {&lt;br /&gt;  return o.getClass();&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Mañana escribiré como poder usar esta clase, porque la verdad ahorita ya es un poco noche jeje y ya me estoy quedando dormido. Sólo como recordatorio adicional, es importante recordad que utilizar Reflection genera bajas en el performance la máquina virtual ya que muchas veces no es posible utilizar los optimizadores con los que cuenta la JVM, como pueden ser en multiples llamadas a métodos, recursiones de cola etc...&lt;br /&gt;&lt;br /&gt;Saludos&lt;br /&gt;Gus&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2016004623247230365-5896161704259703678?l=xyzdev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xyzdev.blogspot.com/feeds/5896161704259703678/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://xyzdev.blogspot.com/2009/06/mas-reflexion.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2016004623247230365/posts/default/5896161704259703678'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2016004623247230365/posts/default/5896161704259703678'/><link rel='alternate' type='text/html' href='http://xyzdev.blogspot.com/2009/06/mas-reflexion.html' title='Más Reflexión'/><author><name>Gus</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2016004623247230365.post-7807558847326685635</id><published>2009-06-15T16:48:00.002-05:00</published><updated>2009-06-15T18:46:10.852-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='anotaciones'/><category scheme='http://www.blogger.com/atom/ns#' term='gustavo villegas'/><title type='text'>Anotaciones en Java</title><content type='html'>Nivel: Intermedio&lt;br /&gt;&lt;br /&gt;Las anotaciones en Java, son marcas que se hacen a una parte del programa, que no tienen un efecto directo sobre el mismo pero que son reflexivas en la ejecución, es decir, pueden ser utilizadas por algún contenedor al momento de la ejecución del programa.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Las anotaciones son un tipo especial de modificador y puede ser usando junto a otros modificadores, tales como public, static, private etc... Digamos que las anotaciones son una forma de implementar una interfaz, sin que la clase lo haga directamente. Por ejemplo, creas un clase Perro, y entonces la anotas para decir que es un Animal, de está manera, en la ejecución del programa y utilizando reflexión es posible saber que cualquier objeto de clase Perro es un animal. Es decir estamos indicando que Perro es un animal y cumple una función similar a una interfaz.&lt;br /&gt;&lt;br /&gt;&lt;pre class="java" name="code"&gt;&lt;br /&gt;@Animal&lt;br /&gt;public class Perro {&lt;br /&gt;//Algún buen metodo de la clase perro&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Definir una anotación es algo muy sencillo, se hace de igual forma que una interfaz y se antepone una "@" al inicio de la palabra interface, y los métodos que contenga serán los elementos de la anotación, y sólo pueden regresar tipos primitivos, String y Enums.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="java" name="code"&gt;&lt;br /&gt;public @interface Animal {&lt;br /&gt;     boolean vertebrado();&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Con la anotación presentada anteriormente, podremos anotar alguna clase y definir si el Animal que estamos anotando es vertebrado o invertebrado&lt;br /&gt;&lt;br /&gt;&lt;pre class="java" name="code"&gt;&lt;br /&gt;@Animal( vertebrado = true )&lt;br /&gt;public class Perro {&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;De está forma en la ejecución del Programa podemos saber si que un objeto de clase Perro es un animal, y que tipo de animal es, además podemos especificar que la anotación solo sirve para anotar clases, ya que no podemos tener métodos de tipo animal.  Y para hacer esto anotamos nuestra anotación. Entonces nuestra anotación queda así:&lt;br /&gt;&lt;br /&gt;&lt;pre class="java" name="code"&gt;&lt;br /&gt;package anotaciones;&lt;br /&gt;&lt;br /&gt;import java.lang.annotation.Retention;&lt;br /&gt;import java.lang.annotation.Target;&lt;br /&gt;import java.lang.annotation.ElementType;&lt;br /&gt;import java.lang.annotation.RetentionPolicy;&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;@Retention(RetentionPolicy.RUNTIME)&lt;br /&gt;@Target(ElementType.TYPE)&lt;br /&gt;public @interface Animal {&lt;br /&gt; &lt;br /&gt; boolean vertebrado();&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;De esa forma específicamos que la anotación sólo sirve para definir tipos. Ahora cómo usarlo en la ejecución:&lt;br /&gt;&lt;br /&gt;&lt;pre class="java" name="code"&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;package anotaciones;&lt;br /&gt;&lt;br /&gt;import java.util.ArrayList;&lt;br /&gt;import java.util.List;&lt;br /&gt;&lt;br /&gt;public class Main {&lt;br /&gt; &lt;br /&gt; @SuppressWarnings("unchecked")&lt;br /&gt; public static void main(String[] args) {&lt;br /&gt;  &lt;br /&gt;  //Creamos una Lista&lt;br /&gt;  List obj = new ArrayList();&lt;br /&gt;  &lt;br /&gt;  //Agregamos 2 Perros&lt;br /&gt;  obj.add(new Perro());&lt;br /&gt;  obj.add(new Perro());&lt;br /&gt;  &lt;br /&gt;  //Agregamos 1 String&lt;br /&gt;  obj.add("Soy un String");&lt;br /&gt;  &lt;br /&gt;  System.out.println("Numero de animales en la lista:" + contarAnimales(obj));&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; &lt;br /&gt; public static int contarAnimales(List&lt;?&gt; o ) {&lt;br /&gt;  if(o==null) &lt;br /&gt;   return 0;&lt;br /&gt;  else {&lt;br /&gt;   System.out.println("Empezando a contar");&lt;br /&gt;   int count = 0;&lt;br /&gt;   for (Object object : o) {&lt;br /&gt;    //System.out.println(object.getClass().getAnnotation(Animal.class));&lt;br /&gt;    if(object.getClass().isAnnotationPresent(Animal.class)) {&lt;br /&gt;     count++;&lt;br /&gt;    }&lt;br /&gt;   }&lt;br /&gt;   return count;&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Aunque el ejemplo no es de lo más ortodoxo, da una muestra de lo que pueden hacer las anotaciones, y de como que es las utilizan los frameworks como JAXB o Spring 2.5 Anotado, en el cual se puede hacer el Autoalambrado, definir controlador, mapeos de request con anotaciones evitando tener que configurar un dispatcher servlet muy grande.&lt;br /&gt;&lt;br /&gt;Saludos&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2016004623247230365-7807558847326685635?l=xyzdev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xyzdev.blogspot.com/feeds/7807558847326685635/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://xyzdev.blogspot.com/2009/06/anotaciones-en-java.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2016004623247230365/posts/default/7807558847326685635'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2016004623247230365/posts/default/7807558847326685635'/><link rel='alternate' type='text/html' href='http://xyzdev.blogspot.com/2009/06/anotaciones-en-java.html' title='Anotaciones en Java'/><author><name>Gus</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2016004623247230365.post-2752854701346246365</id><published>2009-05-12T10:43:00.001-05:00</published><updated>2009-05-12T10:43:16.017-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='Tip'/><category scheme='http://www.blogger.com/atom/ns#' term='JZab'/><title type='text'>Correr Archivos Jar en Vista</title><content type='html'>&lt;p&gt;Si algún programa que instalamos como puede ser Winrar u otro compresor de datos se “adueño” de la asociación de los archivos jar podemos regresar esta asociación con la JVM para que al dar doble click en un archivo jar lo abra.&lt;/p&gt;  &lt;p&gt;Para poder hacer esto solo es necesario bajar y correr el programa &lt;strong&gt;JarFix.&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.jonelo.de/java/jarfix/"&gt;http://www.jonelo.de/java/jarfix/&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2016004623247230365-2752854701346246365?l=xyzdev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xyzdev.blogspot.com/feeds/2752854701346246365/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://xyzdev.blogspot.com/2009/05/correr-archivos-jar-en-vista.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2016004623247230365/posts/default/2752854701346246365'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2016004623247230365/posts/default/2752854701346246365'/><link rel='alternate' type='text/html' href='http://xyzdev.blogspot.com/2009/05/correr-archivos-jar-en-vista.html' title='Correr Archivos Jar en Vista'/><author><name>JZabdiel</name><uri>http://www.blogger.com/profile/13273407104522826832</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_1F7J4DNWM5I/SZmHTogG5tI/AAAAAAAAACo/ROAasCSsfyM/S220/duke.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2016004623247230365.post-3171795175718598415</id><published>2009-04-20T14:47:00.003-05:00</published><updated>2009-04-20T14:54:51.768-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='sun'/><category scheme='http://www.blogger.com/atom/ns#' term='compra'/><category scheme='http://www.blogger.com/atom/ns#' term='gustavo villegas'/><category scheme='http://www.blogger.com/atom/ns#' term='oracle'/><title type='text'>Oracle compra Sun</title><content type='html'>El día 20 de Abril Oracle anunció que compraría Sun Microsystems por una suma de $7400 millones de dólares ( $7.4 billion dollars ) y cada acción se compro en 9.54 dólares. Por el momento sólo fue aceptado como un hecho unánime en Sun Microsystems, aunque aún falta que la transacción sea autorizada por el Gobierno.&lt;br /&gt;&lt;br /&gt;Más información en:&lt;br /&gt;http://www.bloomberg.com/apps/news?pid=20601087&amp;sid=aVWptwRiZl1w&amp;refer=home&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2016004623247230365-3171795175718598415?l=xyzdev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xyzdev.blogspot.com/feeds/3171795175718598415/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://xyzdev.blogspot.com/2009/04/oracle-compra-sun.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2016004623247230365/posts/default/3171795175718598415'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2016004623247230365/posts/default/3171795175718598415'/><link rel='alternate' type='text/html' href='http://xyzdev.blogspot.com/2009/04/oracle-compra-sun.html' title='Oracle compra Sun'/><author><name>Gus</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2016004623247230365.post-7966893325759763552</id><published>2009-03-20T09:09:00.000-06:00</published><updated>2009-03-20T09:20:32.340-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tip'/><category scheme='http://www.blogger.com/atom/ns#' term='XNA'/><category scheme='http://www.blogger.com/atom/ns#' term='tutorial'/><category scheme='http://www.blogger.com/atom/ns#' term='JZab'/><title type='text'>XNA usando fuentes personalizadas</title><content type='html'>&lt;p&gt;Cuando creamos un juego una de las partes importantes es el texto a desplegar, pero no siempre queremos usar las fuentes que tenemos instaladas en el sistema. Para poder usar otras fuentes debemos seguir los siguientes pasos.&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Bajar la Fuente&lt;/li&gt;    &lt;li&gt;Installarla en el Sistema&amp;#160; &lt;ol&gt;       &lt;li&gt;EN Windows XP: Copiar la fuente y pegarla en &lt;strong&gt;&lt;em&gt;/Windows/Fonts &lt;/em&gt;&lt;/strong&gt;&lt;/li&gt;     &lt;/ol&gt;   &lt;/li&gt;    &lt;li&gt;Crear o Abrir el proyecto &lt;/li&gt;    &lt;li&gt;Click derecho en directorio &lt;strong&gt;Content&lt;/strong&gt;      &lt;ol&gt;       &lt;li&gt;Add new Item &lt;/li&gt;        &lt;li&gt;Crear un SpriteFont          &lt;ol&gt;           &lt;li&gt;Cambiar en &amp;lt;FontName&amp;gt; el nombre de la fuente que bajamos&lt;/li&gt;            &lt;li&gt;Cambiar las caracteristicas de la fuente (Optional)&lt;/li&gt;         &lt;/ol&gt;       &lt;/li&gt;     &lt;/ol&gt;   &lt;/li&gt;    &lt;li&gt;Ahora ya podemos usar la fuente en el juego&lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;&lt;strong&gt;Nota: Si le enviamos a alguna persona el proyecto de xna, tmb se tiene que instalar la fuente en la otra computadora, pero para la distribución del juego no es necesaria.&lt;/strong&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2016004623247230365-7966893325759763552?l=xyzdev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xyzdev.blogspot.com/feeds/7966893325759763552/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://xyzdev.blogspot.com/2009/03/xna-usando-fuentes-personalizadas.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2016004623247230365/posts/default/7966893325759763552'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2016004623247230365/posts/default/7966893325759763552'/><link rel='alternate' type='text/html' href='http://xyzdev.blogspot.com/2009/03/xna-usando-fuentes-personalizadas.html' title='XNA usando fuentes personalizadas'/><author><name>JZabdiel</name><uri>http://www.blogger.com/profile/13273407104522826832</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_1F7J4DNWM5I/SZmHTogG5tI/AAAAAAAAACo/ROAasCSsfyM/S220/duke.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2016004623247230365.post-1890273508586714846</id><published>2009-03-20T08:53:00.001-06:00</published><updated>2009-03-20T08:53:31.732-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tip'/><category scheme='http://www.blogger.com/atom/ns#' term='Widgets'/><category scheme='http://www.blogger.com/atom/ns#' term='JZab'/><title type='text'>Blogger nube de Etiquetas</title><content type='html'>&lt;p&gt;Si nosotros quisieramos agregar a nuestro blog una nube de etiquetas como la que tenemos en este blog podemos hacer uso de este tutorial.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://phy3blog.googlepages.com/Beta-Blogger-Label-Cloud.html"&gt;http://phy3blog.googlepages.com/Beta-Blogger-Label-Cloud.html&lt;/a&gt; [En inglés]&lt;/p&gt;  &lt;p&gt;Este tutorial es para Blogger y debemos de tener habilitado los “Labels” en las sección Widgets.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2016004623247230365-1890273508586714846?l=xyzdev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xyzdev.blogspot.com/feeds/1890273508586714846/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://xyzdev.blogspot.com/2009/03/blogger-nube-de-etiquetas.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2016004623247230365/posts/default/1890273508586714846'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2016004623247230365/posts/default/1890273508586714846'/><link rel='alternate' type='text/html' href='http://xyzdev.blogspot.com/2009/03/blogger-nube-de-etiquetas.html' title='Blogger nube de Etiquetas'/><author><name>JZabdiel</name><uri>http://www.blogger.com/profile/13273407104522826832</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_1F7J4DNWM5I/SZmHTogG5tI/AAAAAAAAACo/ROAasCSsfyM/S220/duke.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2016004623247230365.post-5292110476116369434</id><published>2009-02-26T21:27:00.002-06:00</published><updated>2009-02-26T21:49:14.048-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='jni'/><category scheme='http://www.blogger.com/atom/ns#' term='gustavo villegas'/><category scheme='http://www.blogger.com/atom/ns#' term='dll'/><title type='text'>Crear funciones Nativas en Java...DLL</title><content type='html'>Bueno a veces es necesario crear funciones que sean dependientes del Sistema y que por lo tanto no pueden ser implementadas en Java, para eso existe JNI (Java Native Interface), que sirve para llamar a funciones nativas del Sistema y que pueden estar en un DLL (En Windows). Bien ahora veremos cómo crear una función nativa y que está sea llamada en Java. Lo primero que tenemos que hacer es crear una clase, y que tenga definido un método nativo, a su vez, la clase cargara una librería que se llamara "Project1" (así fue como le puso mi compilador de C jajaja) luego en el main, instanciaremos el objeto y llamaremos a la función:&lt;br /&gt;&lt;pre class="java" name="code"&gt;&lt;br /&gt;public class HelloWorld {&lt;br /&gt;&lt;br /&gt; public native void sayHello();&lt;br /&gt; &lt;br /&gt; static {&lt;br /&gt;  System.loadLibrary("Project1");&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; public static void main(String[] args) {&lt;br /&gt;  new HelloWorld().sayHello();&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;El ejemplo es muy simple, sólo tenemos una clase con un método nativo, un bloque estático que carga una librería de nombre Project1, y un main, el cual crea la instancia y manda a llamar al método.Y ahora solo compilamos la clase:&lt;br /&gt;&lt;pre class="java" name="code"&gt;&lt;br /&gt;javac HelloWorld.java&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Ahora lo que tenemos que hacer es crear un header de C, que contenga la definición de la función que tenemos que implementar, Java tiene una herramienta para esto y entonces vamos a la línea de comandos de nuevo y tecleamos:&lt;br /&gt;&lt;pre class="java" name="code"&gt;&lt;br /&gt;javah HelloWorld&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Vamos a la carpeta donde estaba nuestra clase y ahi podemos ver que hay un archivo llamado HelloWorld.h&lt;br /&gt;&lt;pre class="java" name="code"&gt;&lt;br /&gt;/* DO NOT EDIT THIS FILE - it is machine generated */&lt;br /&gt;#include &lt;jni.h&gt;&lt;br /&gt;/* Header for class HelloWorld */&lt;br /&gt;&lt;br /&gt;#ifndef _Included_HelloWorld&lt;br /&gt;#define _Included_HelloWorld&lt;br /&gt;#ifdef __cplusplus&lt;br /&gt;extern "C" {&lt;br /&gt;#endif&lt;br /&gt;/*&lt;br /&gt; * Class:     HelloWorld&lt;br /&gt; * Method:    sayHello&lt;br /&gt; * Signature: ()V&lt;br /&gt; */&lt;br /&gt;JNIEXPORT void JNICALL Java_HelloWorld_sayHello&lt;br /&gt;  (JNIEnv *, jobject);&lt;br /&gt;&lt;br /&gt;#ifdef __cplusplus&lt;br /&gt;}&lt;br /&gt;#endif&lt;br /&gt;#endif&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Este Header contiene la definición de la función que va a llamar la librería, ahora solo tenemos que crear una implementación que lucirá más o menos cómo esto:&lt;br /&gt;&lt;br /&gt;&lt;pre class="java" name="code"&gt;&lt;br /&gt;#include &lt;jni.h&gt;&lt;br /&gt;#include "HelloWorld.h"&lt;br /&gt;#include &lt;stdio.h&gt;&lt;br /&gt;&lt;br /&gt;JNIEXPORT void JNICALL &lt;br /&gt;Java_HelloWorld_sayHello(JNIEnv *env, jobject obj) &lt;br /&gt;{&lt;br /&gt;  printf("Hello world Im a C Function\n");&lt;br /&gt;  return;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Y tenemos que compilar esto en un DLL, que es la parte un poco tediosa aunque si ya has usado alguna vez un compilador de C o C++ no tiene gran problema, puedes usar Borland,  Blodshed Dev C++ ó el Visual C++. Yo lo compile con el Blodshed Dev C++ y aquí van las instrucciones:&lt;br /&gt;&lt;br /&gt;1.- Una vez que tengas el archivo HelloWorld.h, abre el Bloodshed Dev C++ y crea un nuevo proyecto en la misma carpeta donde está el archivo, el proyecto especifica que sea de tipo DLL. (He aquí porque mi dll se llama Project1 jaja)&lt;br /&gt;&lt;br /&gt;2.- Ve a Tools-&gt;Compiler Options, cuando abra el cuadro de diálogo, ve a la pestaña de Directories y luego a C++ Includes. (o a C includes dependiendo del tipo de proyecto que hayas creado) Ahi haz clic en el botoncito ese que es como una carpetita, y ve hasta donde este instalado tu Java y agrega la siguientes carpetas $JAVA_HOME\include y $JAVA_HOME\include\win32, donde $JAVA_HOME = Directorio donde está instalado tu Java, en mi caso: C:\Program Files\Java\jdk1.6.0_11, entonces mis rutas quedan así:&lt;br /&gt;C:\Program Files\Java\jdk1.6.0_11\include&lt;br /&gt;C:\Program Files\Java\jdk1.6.0_11\include\win32&lt;br /&gt;&lt;br /&gt;3.- En el archivo .cpp que crea automáticamente el IDE copia el Siguiente código:&lt;br /&gt;&lt;pre class="java" name="code"&gt;&lt;br /&gt;#include &lt;jni.h&gt;&lt;br /&gt;#include "HelloWorld.h"&lt;br /&gt;#include &lt;stdio.h&gt;&lt;br /&gt;&lt;br /&gt;JNIEXPORT void JNICALL &lt;br /&gt;Java_HelloWorld_sayHello(JNIEnv *env, jobject obj) &lt;br /&gt;{&lt;br /&gt;  printf("Hello world Im a C++\n");&lt;br /&gt;  return;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Y ve a Execute-&gt;Compile, y tu programa debe compilar y generar un archivo de nombre "Project1.dll" (o como le hayas puesto al proyecto.&lt;br /&gt;&lt;br /&gt;Luego sólo ve a linea de comandos de nuevo y ejecuta:&lt;br /&gt;&lt;br /&gt;&lt;pre class="java" name="code"&gt;&lt;br /&gt;java HelloWorld&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Y el resultado debe ser:&lt;br /&gt;Hello world Im a C Function&lt;br /&gt;&lt;br /&gt;Y así has llamado a una función nativa :D Felicidades!&lt;br /&gt;&lt;br /&gt;Espero te haya servido&lt;br /&gt;&lt;br /&gt;Saludos!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2016004623247230365-5292110476116369434?l=xyzdev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xyzdev.blogspot.com/feeds/5292110476116369434/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://xyzdev.blogspot.com/2009/02/crear-funciones-nativas-en-javadll.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2016004623247230365/posts/default/5292110476116369434'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2016004623247230365/posts/default/5292110476116369434'/><link rel='alternate' type='text/html' href='http://xyzdev.blogspot.com/2009/02/crear-funciones-nativas-en-javadll.html' title='Crear funciones Nativas en Java...DLL'/><author><name>Gus</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2016004623247230365.post-6368209798766502427</id><published>2009-02-26T14:23:00.004-06:00</published><updated>2009-02-26T14:44:19.162-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='classpath'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='Tip'/><category scheme='http://www.blogger.com/atom/ns#' term='gustavo villegas'/><title type='text'>Classpath en Java</title><content type='html'>Bueno, cuando estamos empezando a programar en Java, siempre existe la pregunta ¿Qué es el Classpath? Bueno, pues es muy simple, como lo dice su nombre es la ruta de clases que serán usadas para compilar y/o ejecutar un programa. Y su función es poder acceder a clases que están fuera del proyecto, cómo alguna librería externa, existen dos principales formas de configurar un Classpath, la 1era es configurar una variable de entorno del sistema de nombre CLASSPATH, y ahi ir colocando cada una de las carpetas o archivos *.jar que tenemos. La 2da es Compilar escribiendo directamente el Classpath como un parámetro al compilador de está forma:&lt;br /&gt;&lt;br /&gt;&lt;pre class="java" name="code"&gt;&lt;br /&gt;javac -cp "RUTA" HolaMundo.java&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Bueno ahora, para encontrar un uso, imaginemos que tenemos una libería de clases en la carpeta C:/lib, y ahí se encuentra la clase "Libreria"&lt;br /&gt;&lt;br /&gt;&lt;pre class="java" name="code"&gt;&lt;br /&gt;public class Libreria {&lt;br /&gt;&lt;br /&gt;&lt;br /&gt; public static void imprimir(String mensaje) {&lt;br /&gt;  System.out.println(mensaje);&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Ahora imagina que la quieres usar en otro programa :&lt;br /&gt;&lt;pre class="java" name="code"&gt;&lt;br /&gt;public class HolaMundo {&lt;br /&gt; &lt;br /&gt; public static void main(String[] args) {&lt;br /&gt; &lt;br /&gt;  Libreria l = new Libreria();&lt;br /&gt;  l.imprimir("Hola Mundo");&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt; &lt;br /&gt;&lt;br /&gt;Para poder compilar esto, tenemos que indicarle al compilador el CLASSPATH, que va a usar para compilar la clases y para eso hacemos esto:&lt;br /&gt;&lt;br /&gt;&lt;pre class="java" name="code"&gt;&lt;br /&gt;javac -cp "C:\lib" HolaMundo.java&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Y también para correr el programa se requiere especificar el classpath de la misma manera ya que de lo contrario obtendremos NoClassDefFoundError, porque no va a encontrar todas las clases necesarias. Entonces lo que hacemos es algo muy similar, excepto que está vez tenemos que indicar también la ruta en la que estamos y eso se hace con un "punto":&lt;br /&gt;&lt;br /&gt;&lt;pre class="java" name="code"&gt;&lt;br /&gt;java -cp "C:\lib;." HolaMundo&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Y con eso ya podemos corre nuestra clase.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Saludos!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2016004623247230365-6368209798766502427?l=xyzdev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xyzdev.blogspot.com/feeds/6368209798766502427/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://xyzdev.blogspot.com/2009/02/classpath-en-java.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2016004623247230365/posts/default/6368209798766502427'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2016004623247230365/posts/default/6368209798766502427'/><link rel='alternate' type='text/html' href='http://xyzdev.blogspot.com/2009/02/classpath-en-java.html' title='Classpath en Java'/><author><name>Gus</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2016004623247230365.post-1693802873994276857</id><published>2009-02-16T10:01:00.001-06:00</published><updated>2009-02-16T10:01:42.153-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tutorial'/><category scheme='http://www.blogger.com/atom/ns#' term='JZab'/><category scheme='http://www.blogger.com/atom/ns#' term='Networking'/><title type='text'>Envío de paquetes entre VLANs</title><content type='html'>&lt;p&gt;Para poder hacer envio de paquetes entre VLANs tenemos que hacer uso de alg&amp;#250;n dispositivo de capa 3, ya sea un Router o un Switch de capa 3.&lt;/p&gt;  &lt;p&gt;La configuraci&amp;#243;n para un Router Cisco es la siguiente:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Router#(config) &lt;strong&gt;interface f0/0.X&lt;/strong&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //[ interface.n&amp;#250;meroVlan ]&lt;/p&gt;    &lt;p&gt;Router#(config-if) &lt;strong&gt;encapsulation dot1Q X&lt;/strong&gt;&amp;#160;&amp;#160;&amp;#160; //[X = N&amp;#250;mero VLAN]&lt;/p&gt;    &lt;p&gt;Router#(config-if) &lt;strong&gt;ip address address mask&lt;/strong&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Hay que configurar la interfaz f0/0 para cada de las VLANs&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2016004623247230365-1693802873994276857?l=xyzdev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xyzdev.blogspot.com/feeds/1693802873994276857/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://xyzdev.blogspot.com/2009/02/envio-de-paquetes-entre-vlans.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2016004623247230365/posts/default/1693802873994276857'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2016004623247230365/posts/default/1693802873994276857'/><link rel='alternate' type='text/html' href='http://xyzdev.blogspot.com/2009/02/envio-de-paquetes-entre-vlans.html' title='Envío de paquetes entre VLANs'/><author><name>JZabdiel</name><uri>http://www.blogger.com/profile/13273407104522826832</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_1F7J4DNWM5I/SZmHTogG5tI/AAAAAAAAACo/ROAasCSsfyM/S220/duke.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2016004623247230365.post-2742366932967232304</id><published>2009-02-15T22:10:00.000-06:00</published><updated>2009-02-15T22:13:01.159-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tip'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><category scheme='http://www.blogger.com/atom/ns#' term='JZab'/><title type='text'>Usar cuentas de correo como Live ID</title><content type='html'>&lt;p&gt;Si tenemos alguna cuenta que no sea &amp;quot;@msn, @hotmail, @live&amp;quot; a&amp;#250;n podemos tener acceso a los servicios que ahora todo el suite de Live nos proporciona. Para poder realizar esto tenemos que entrar a:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="http://www.passport.net"&gt;http://www.passport.net&lt;/a&gt; &lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Le damos click al link donde podemos agregar una cuenta existente, nos pedir&amp;#225; nuestros datos, los agregamos y LISTO! podemos empezar a usar nuestra cuenta de correo (ej. Gmail) para servicios Live.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;strong&gt;&lt;u&gt;NOTA: En la parte de la contrase&amp;#241;a no es necesaria que sea la misma contrase&amp;#241;a que usamos para accesar a nuestro mail, y recordemos que por lo mismo cambios a la contrase&amp;#241;a del mail no har&amp;#225;n cambios a la contrase&amp;#241;a del Live ID&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;&lt;/blockquote&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2016004623247230365-2742366932967232304?l=xyzdev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xyzdev.blogspot.com/feeds/2742366932967232304/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://xyzdev.blogspot.com/2009/02/usar-cuentas-de-correo-como-windows.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2016004623247230365/posts/default/2742366932967232304'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2016004623247230365/posts/default/2742366932967232304'/><link rel='alternate' type='text/html' href='http://xyzdev.blogspot.com/2009/02/usar-cuentas-de-correo-como-windows.html' title='Usar cuentas de correo como Live ID'/><author><name>JZabdiel</name><uri>http://www.blogger.com/profile/13273407104522826832</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_1F7J4DNWM5I/SZmHTogG5tI/AAAAAAAAACo/ROAasCSsfyM/S220/duke.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2016004623247230365.post-1389252054465379691</id><published>2009-02-13T09:36:00.000-06:00</published><updated>2009-02-13T09:51:40.387-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='Tip'/><category scheme='http://www.blogger.com/atom/ns#' term='JZab'/><title type='text'>Compilar todo un paquete java</title><content type='html'>&lt;p&gt;Cuando compilamos un archivo java tenemos que usar la herramienta &amp;quot;javac&amp;quot;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;javac Archivo.java&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;El problema lo tenemos cuando tenemos los archivos en paquetes y tenemos que compilar estos paquetes. Podriamos compiilar archivo por archivo pero tendriamos problema si estos archivos tienen referencias entre ellos por lo que habr&amp;#237;a compilar en un orden especifico los archivos. Para solucionar esto nos tenemos que poner en el directorio &amp;quot;root&amp;quot; del proyecto y aplicar la herramienta javac:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;javac paquete/subpaquete/*.java&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Esto nos compilar&amp;#225; todo los archivos en ese paquete sin problemas, sin tener que estar compilando uno por uno.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2016004623247230365-1389252054465379691?l=xyzdev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xyzdev.blogspot.com/feeds/1389252054465379691/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://xyzdev.blogspot.com/2009/02/compilar-todo-un-paquete-java.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2016004623247230365/posts/default/1389252054465379691'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2016004623247230365/posts/default/1389252054465379691'/><link rel='alternate' type='text/html' href='http://xyzdev.blogspot.com/2009/02/compilar-todo-un-paquete-java.html' title='Compilar todo un paquete java'/><author><name>JZabdiel</name><uri>http://www.blogger.com/profile/13273407104522826832</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_1F7J4DNWM5I/SZmHTogG5tI/AAAAAAAAACo/ROAasCSsfyM/S220/duke.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2016004623247230365.post-605525412547042424</id><published>2009-02-12T13:50:00.005-06:00</published><updated>2009-02-12T13:59:47.149-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='enum'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='Tip'/><category scheme='http://www.blogger.com/atom/ns#' term='singleton'/><category scheme='http://www.blogger.com/atom/ns#' term='gustavo villegas'/><title type='text'>Singleton: Mejorado</title><content type='html'>El Singleton, que presenté en mi entrada anterior es la implementación más común de un Singleton, sin embargo aun tiene algunos defectos, entre ellos está es que si esa clase la hacemos serializable, en cada ejecución se crearían diferentes instancias del singleton y tendríamos que crear un método para proteger esto. Y también tenemos el problema de que se puede accesar al constructor privado utilizando el API Reflection. Entonces aquí tenemos una forma más elegante de crear un Singleton:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="java" name="code"&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;public enum Singleton {&lt;br /&gt; &lt;br /&gt; INSTANCE;&lt;br /&gt; &lt;br /&gt; public void doSomething() {&lt;br /&gt;  &lt;br /&gt; }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;Y luego cuando lo quisieramos usar, lo único que tendríamos que hacer sería esto:&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;pre class="java" name="code"&gt;&lt;br /&gt;&lt;br /&gt;public class Principal {&lt;br /&gt; &lt;br /&gt; public static void main(String[] args) {&lt;br /&gt;  Singleton.INSTANCE.doSomething();&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;Y con eso tenemos una mejor y más sencilla implementación de un Singleton que nos garantiza que siempre será una única instancia.&lt;br /&gt;SaludoSS!&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;Referencias:&lt;br /&gt;&lt;br /&gt;Blooch, J. Effective Java 2nd Edition&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2016004623247230365-605525412547042424?l=xyzdev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xyzdev.blogspot.com/feeds/605525412547042424/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://xyzdev.blogspot.com/2009/02/singleton-mejorado.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2016004623247230365/posts/default/605525412547042424'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2016004623247230365/posts/default/605525412547042424'/><link rel='alternate' type='text/html' href='http://xyzdev.blogspot.com/2009/02/singleton-mejorado.html' title='Singleton: Mejorado'/><author><name>Gus</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2016004623247230365.post-6010224251017521896</id><published>2009-02-09T14:43:00.002-06:00</published><updated>2009-02-09T18:53:18.614-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='singleton'/><category scheme='http://www.blogger.com/atom/ns#' term='gustavo villegas'/><title type='text'>Singleton en Java</title><content type='html'>Bien, un Singleton en t&amp;eacute;rminos muy generales es un objeto del cuál sólo podremos tener una instancia (es decir sólo podemos construir un objeto de esa clase durante la ejecución del programa). Programar un Singleton en Java es muy sencillo, lo único que tenemos que hacer es evitar que otras clases tengan acceso al constructor de mi clase singleton, y ¿cómo se hace eso? Pues sólo tenemos que hacer el constructor Privado, y luego hacemos un método que nos regrese la única Instancia creada.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="java" name="code"&gt;&lt;br /&gt;public class Singleton {&lt;br /&gt;&lt;br /&gt;&lt;br /&gt; //LA UNICA INSTANCIA QUE SERÁ CREADA&lt;br /&gt; //LA CREAMOS DESDE QUE SE CARGUE LA CLASE&lt;br /&gt; private static Singleton instancia = new Singleton();&lt;br /&gt;&lt;br /&gt;&lt;br /&gt; //HACEMOS EL CONSTRUCTOR PRIVADO&lt;br /&gt; //PARA QUE SÓLO PUEDA INSTANCIA OBJETOS DESDE LA MISMA CLASE&lt;br /&gt; private Singleton() {&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt; //MÉTODO PARA OBTENER LA INSTANCIA&lt;br /&gt; public Singleton getInstance() {&lt;br /&gt;  return instancia;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;En este ejemplo la instancia se crea, desde que se crea la clase, pero a veces es mejor crear la instancia hasta que se pide, entonces el código quedaría algo así:&lt;br /&gt;&lt;br /&gt;&lt;pre class="java" name="code"&gt;&lt;br /&gt;public class Singleton {&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt; //CREAMOS LA REFERENCIA&lt;br /&gt; //AUNQUE AL INICIO APUNTA A NULL&lt;br /&gt; private static Singleton instancia ;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt; //HACEMOS EL CONSTRUCTOR PRIVADO&lt;br /&gt; //PARA QUE SÓLO PUEDA INSTANCIA OBJETOS DESDE LA MISMA CLASE&lt;br /&gt; private Singleton() {&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt; //MÉTODO PARA OBTENER LA INSTANCIA&lt;br /&gt; public Singleton getInstance() {&lt;br /&gt;  if(instancia==null) //SI ES NULL&lt;br /&gt;   instancia = new Singleton(); //LO INSTANCIAMOS&lt;br /&gt;  return instancia;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Y con esto creamos nuestra clase Singleton, Luego ya le podemos programar métodos adicionales que son los servicios que va a ofrecer.&lt;br /&gt;&lt;br /&gt;Saludos&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2016004623247230365-6010224251017521896?l=xyzdev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xyzdev.blogspot.com/feeds/6010224251017521896/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://xyzdev.blogspot.com/2009/02/singleton-en-java.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2016004623247230365/posts/default/6010224251017521896'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2016004623247230365/posts/default/6010224251017521896'/><link rel='alternate' type='text/html' href='http://xyzdev.blogspot.com/2009/02/singleton-en-java.html' title='Singleton en Java'/><author><name>Gus</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2016004623247230365.post-8919085409959270011</id><published>2009-02-08T15:08:00.000-06:00</published><updated>2009-02-08T15:11:02.992-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='Tip'/><category scheme='http://www.blogger.com/atom/ns#' term='JZab'/><title type='text'>Borrar Archivos con Java</title><content type='html'>&lt;p&gt;Para poder borrar archivos del disco duro, primero tenemos que realizar una clase File&lt;/p&gt;  &lt;pre class="java" name="code"&gt;java.io.File file = java.oi.File(&amp;quot;String con la ruta&amp;quot;);&lt;br /&gt;file.delete();&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;Este m&amp;#233;todo nos regresa un boolean si es que lo pudo borrar.&lt;br /&gt;&lt;br /&gt;En caso de que necesitemos crear archivos temporales y que se borren cuando terminemos el programa, podemos hacer uso de otro m&amp;#233;todo de la clase file.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="java" name="code"&gt;java.io.File file = java.oi.File(&amp;quot;String con la ruta&amp;quot;);&lt;br /&gt;file.deleteOnExit();&lt;/pre&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;&lt;span&gt;Este metodo es void, pues como no es instantaneo no puede garantizar el borrado del archivo. Los archivos se borraran cuando el programa que los llam&amp;#243; se cierre.&lt;/span&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2016004623247230365-8919085409959270011?l=xyzdev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xyzdev.blogspot.com/feeds/8919085409959270011/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://xyzdev.blogspot.com/2009/02/borrar-archivos-con-java.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2016004623247230365/posts/default/8919085409959270011'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2016004623247230365/posts/default/8919085409959270011'/><link rel='alternate' type='text/html' href='http://xyzdev.blogspot.com/2009/02/borrar-archivos-con-java.html' title='Borrar Archivos con Java'/><author><name>JZabdiel</name><uri>http://www.blogger.com/profile/13273407104522826832</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_1F7J4DNWM5I/SZmHTogG5tI/AAAAAAAAACo/ROAasCSsfyM/S220/duke.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2016004623247230365.post-5055316570858774772</id><published>2009-02-03T00:22:00.015-06:00</published><updated>2009-02-07T14:12:20.258-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='tutorial'/><category scheme='http://www.blogger.com/atom/ns#' term='ant'/><category scheme='http://www.blogger.com/atom/ns#' term='gustavo villegas'/><category scheme='http://www.blogger.com/atom/ns#' term='introduccion'/><title type='text'>Introducción a ANT</title><content type='html'>&lt;p&gt;Nivel: Intermedio&lt;/p&gt;ANT es una herramienta que se utiliza cuándo se está realizando un proyecto de programación y es necesario estar repitiendo tareas repetitivas cómo la compilación y la construcción. Ant está hecho en Java y es muy similar a Make, pero con las ventajas de ser multiplataforma y de no depender de las instrucciones del sistema operativo, sino que se configura con archivos XML. ANT es un proyecto open-source de la Apache Software Foundation.&lt;br /&gt;&lt;p&gt;Bien para comenzar a usar ANT, lo primero que hay que hacer es descargarlo de la página de apache, pueden escribir en google ANT y será alguno de los primeros resultados, sino aquí está la liga:&lt;/p&gt;&lt;p&gt;http://ant.apache.org/bindownload.cgi&lt;br /&gt;&lt;/p&gt;Una vez que hayas descargado ANT, descomprime el arcihvo, ve al directorio /bin y agrega ese directorio al PATH de la Computadora, para que de esta forma, lo puedes llamar fácilmente y no tengas que escribir la ruta completa desde la línea de comandos. Probablemente tengas algunos problemas con el nombre de la carpeta, por los puntos y los guiónes medios, lo que yo hice fue cambiarle el nombre de la carpeta, y así el PATH me quedó asi: C:\ant\bin. También es necesario que tengas Java al menos 1.4. Finalmente para comprobar que lo hiciste bien escribe en una línea de comandos (MS-DOS).&lt;span class="Apple-style-span" style="font-style: italic; "&gt;ant -version&lt;/span&gt;&lt;p&gt;Y si lo configuraste bien entonces verás información acerca de la versión de Ant que hayas descargado, sino está bien configurado te dirá que ant no es un comando reconocido.&lt;br /&gt;&lt;/p&gt;Bien, ahora si vamos a la parte de usar ANT :D. Como ya mencione ANT es una herramienta que sirve para realizar procesos que es necesario repetir muchas veces cuándo estamos desarrollando un proyecto, cómo por ejemplo estar compilando y que tengamos una buena organización de directorios, y queremos separar nuestros archivos fuente de los ya compilados. Y que además se genere automáticamente un jar para correrlo.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Para usar ANT lo único que tenemos que hacer es crear un archivo XML de configuración el cual contendrá las instrucciones de que es lo queremos hacer. En ANT tenemos que configurar un target, que es la opción que va a ejecutar y luego las tareas que queremos que realice cuando seleccionemos ese objetivo. Bien para iniciar, vamos a establecer un nuevo proyecto, crearemos una carpeta que se llamara introduccionant, y ahí meteremos dos archivos:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;HolaMundo.java (El Archivo que vamos a compilar y correr con ant)&lt;/div&gt;&lt;div&gt;build.xml (El Archivo de configuración de ANT)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;HolaMundo.java&lt;pre class="java" name="code"&gt;public class HolaMundo {&lt;br /&gt;&lt;br /&gt;public static void main(String[] args) {&lt;br /&gt;&lt;br /&gt;System.out.println("Hola Mundo");&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;build.xml&lt;br /&gt;&lt;pre class="java" name="code"&gt;&lt;br /&gt;&lt;br /&gt;&lt;project name="introduccionAnt" &lt;br /&gt;         basedir="." &lt;br /&gt;         default="compilar"&gt;    &lt;br /&gt;&lt;br /&gt;&lt;target name="compilar" description="Compilar"&gt;&lt;br /&gt;  &lt;javac destdir="." &lt;br /&gt;         debug="true" &lt;br /&gt;         deprecation="false" &lt;br /&gt;         optimize="false" &lt;br /&gt;         failonerror="true"&gt;&lt;br /&gt;    &lt;src path="."&gt; &lt;/src&gt;&lt;br /&gt; &lt;/javac&gt;&lt;br /&gt;&lt;/target&gt;&lt;br /&gt;&lt;/project&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Primero definimos un proyecto, le damos un nombre, le ponemos el directorio base, en este caso es el mismo y por eso estamos poniendo el "." y el Target que por default va a ejecutar es el de nombre compilar. &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Después de eso tenemos que definir el target, el cuál tiene nombre compilar (es el default) Y en seguida se colocan las tareas que queremos realizar, en este caso solo queremos llamar a javac para que compile los archivos, nuestro directorio destino será el mismo y además colocamos unas opciones adicionales. Además cuando usamos javac, es obligatorio que tengamos definido donde están los archivos fuente por eso definimos también el directorio fuente que en este caso y por simplicidad también es el mismo.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Ahora lo único que tenemos que hacer es ir a una línea de comandos ir al directorio introduccionant y ejecutar el comando:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;ant&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Una vez esto el resultado dirá que el build se ha hecho satisfactoriamente y para los que han usado NetBeans, verán que la salida de consola es igual a la del IDE, esto es porque NetBeans utiliza Ant para hacer el build de nuestros proyectos. Y si vas al directorio utilizando un Explorador verás que tu archivo .class ya fue creado y puedes escribir en la línea de comandos: &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;java HolaMundo&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;img src="http://3.bp.blogspot.com/_uO9VG6Lce-s/SY3pPi7JClI/AAAAAAAAAAw/A2WxuwodTkA/s400/ant.jpg" style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 201px;" border="0" alt="Linea de Comandos con Ant" id="BLOGGER_PHOTO_ID_5300148789767113298" /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Bien con eso hemos compilado nuestro primer programa utilizando ant, ahora lo único que tenemos que hacer es agregar más opciones a nuestro archivo build.xml para que podamos realizar más cosas utilizando ANT.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Saludos&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2016004623247230365-5055316570858774772?l=xyzdev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xyzdev.blogspot.com/feeds/5055316570858774772/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://xyzdev.blogspot.com/2009/02/introduccion-ant.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2016004623247230365/posts/default/5055316570858774772'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2016004623247230365/posts/default/5055316570858774772'/><link rel='alternate' type='text/html' href='http://xyzdev.blogspot.com/2009/02/introduccion-ant.html' title='Introducción a ANT'/><author><name>Gus</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_uO9VG6Lce-s/SY3pPi7JClI/AAAAAAAAAAw/A2WxuwodTkA/s72-c/ant.jpg' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2016004623247230365.post-1744844455386675699</id><published>2009-01-29T14:35:00.010-06:00</published><updated>2009-02-07T14:24:15.787-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='reflection'/><category scheme='http://www.blogger.com/atom/ns#' term='ordernar'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='listas'/><category scheme='http://www.blogger.com/atom/ns#' term='gustavo villegas'/><title type='text'>Ordenar Listas en Java</title><content type='html'>&lt;p&gt;Bien, ordenar una lista en Java, es algo muy sencillo, lo único que tenemos que hacer es llamar al método Sort, de la clase Collections, mandarle cómo parámetro la Lista que queremos ordenar y este los ordenara dado el orden natural del objeto (interfaz Comparable) , y si no queremos eso, pues podemos crear un Comparator. Sin embargo, imaginemos que tenemos aproximadamente unos 20 Objetos diferentes, que son JavaBeans, y que requerimos ordenarlos muchas veces por diferentes propiedades que tengan como por ejemplo Nombre, Apellido Paterno, Apellido Materno o Dirección. Tendríamos que estar creando Comparators para cada una de las propiedades que tenga el JavaBean y de está forma luego ya poder ordenarlos. Tendríamos al menos más de 20 Comparators diferentes que implementan casi la misma lógica, comparar un bean por alguna de sus propiedades, complicado no?. Bueno una solución para esto es el API de Reflection de Java&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Bueno para inciar es necesario crear la firma de nuestro método, el cual podemos introducir en una clase Util que tenga métodos que usaremos durante nuestra aplicación, entonces la firma de nuesto método queda así:&lt;br /&gt;&lt;pre class="java" name="code"&gt;&lt;br /&gt;import java.util.List;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;public class Util {&lt;br /&gt;&lt;br /&gt; public static void ordena(List lista, String propiedad) {&lt;br /&gt;  &lt;br /&gt; }&lt;br /&gt; &lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Lo único que hara el método sera recibir una lista, la cual ordenaremos, y la propiedad por la cual queremos ordenarla. Es decir vamos a ordenar una lista de Personas por Edad, entonces lo único que tendríamos que hacer es llamar a nuestro metodo ordena(lista,"nombre"), donde lista, es la Lista de Personas y nombre es una propiedad del JavaBean, es decir tiene métodos de setNombre() y getNombre().&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;Bien, ahora si pasemos a la parte divertida, para hacer esto, lo único que tenemos que hacer es mandar llamar al metodo Sort de la Clase Collections (la idea original) y crear un Comparator. Sólo que el Comparator, llamara a las propiedades de los objetos en tiempo de ejecución utilizando el API de Reflection de Java. Entonces hasta ahora lo que tenemos es esto:&lt;br /&gt;&lt;br /&gt;&lt;pre class="java" name="code"&gt;&lt;br /&gt;&lt;br /&gt;import java.util.Collections;&lt;br /&gt;import java.util.Comparator;&lt;br /&gt;import java.util.List;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;public class Util {&lt;br /&gt;&lt;br /&gt; public static void ordena(List lista, String propiedad) {&lt;br /&gt;  Collections.sort(lista, new Comparator() {&lt;br /&gt;   public int compare(Object arg0, Object arg1) {&lt;br /&gt;    return 0;&lt;br /&gt;   }&lt;br /&gt;  });&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;Ahora lo que tenemos que hacer es llamar a los metodos getPropiedad de cada uno de los objetos y compararlos. Esto se logra llamando al método getClass() de la clase Object, luego con esa Clase, llamamaos al método getMethod() y se le manda como pararametro el nombre del método el cual sera getXXXXX donde XXXXX es nuestra propiedad, por ejemplo "nombre" llamara al método getNombre. Y finalmente se invocan esos métodos para obtener las propiedades y luego compararlas. El método invoke() de la clase Method, regresa siempre Object y si el método regresa tipos primitivos regresa su clase encapsuladora (int-&gt;Integer etc...).&lt;br /&gt;&lt;br /&gt;&lt;pre class="java" name="code"&gt;&lt;br /&gt;import java.lang.reflect.Method;&lt;br /&gt;import java.util.Collections;&lt;br /&gt;import java.util.Comparator;&lt;br /&gt;import java.util.List;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;public class Util {&lt;br /&gt;&lt;br /&gt; public static void ordena(List lista, final String propiedad) {&lt;br /&gt;  Collections.sort(lista, new Comparator() {&lt;br /&gt;   &lt;br /&gt;   public int compare(Object obj1, Object obj2) {&lt;br /&gt;    &lt;br /&gt;    Class clase = obj1.getClass();&lt;br /&gt;    String getter = "get" + Character.toUpperCase(propiedad.charAt(0)) + propiedad.substring(1);&lt;br /&gt;    try {&lt;br /&gt;     Method getPropiedad = clase.getMethod(getter);&lt;br /&gt;     &lt;br /&gt;     Object propiedad1 = getPropiedad.invoke(obj1);&lt;br /&gt;     Object propiedad2 = getPropiedad.invoke(obj2);&lt;br /&gt;     &lt;br /&gt;     //AUN TENEMOS QUE COMPARARLAS&lt;br /&gt;     &lt;br /&gt;    }&lt;br /&gt;    catch(Exception e) {&lt;br /&gt;     e.printStackTrace();&lt;br /&gt;    }&lt;br /&gt;      &lt;br /&gt;    &lt;br /&gt;    &lt;br /&gt;    &lt;br /&gt;    &lt;br /&gt;    return 0;&lt;br /&gt;   }&lt;br /&gt;  });&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; &lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;Por último solo falta comparar las propiedades, para esto utilizaremos el operador instanceof, para saber si la propiedad es comparable utilizando compareTo(), de lo contrario usaremos el metodo equals para comparar los objetos y si no son iguales regresaremos 1 (Que en realidad esto no es de mucha utilidad de cualquier forma jaja, pero es lo único que se puede hacer). Además al parámetro de la propiedad, tenemos que agregar la opcion final, porque será usado dentro de la clase Comparator que estamos definiendo internamente.&lt;br /&gt;&lt;br /&gt;&lt;pre class="java" name="code"&gt;&lt;br /&gt;&lt;br /&gt;import java.lang.reflect.Method;&lt;br /&gt;import java.util.Collections;&lt;br /&gt;import java.util.Comparator;&lt;br /&gt;import java.util.List;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;public class Util {&lt;br /&gt;&lt;br /&gt; public static void ordena(List lista, final String propiedad) {&lt;br /&gt;  Collections.sort(lista, new Comparator() {&lt;br /&gt;   &lt;br /&gt;   public int compare(Object obj1, Object obj2) {&lt;br /&gt;    &lt;br /&gt;    Class clase = obj1.getClass();&lt;br /&gt;    String getter = "get" + Character.toUpperCase(propiedad.charAt(0)) + propiedad.substring(1);&lt;br /&gt;    try {&lt;br /&gt;     Method getPropiedad = clase.getMethod(getter);&lt;br /&gt;     &lt;br /&gt;     Object propiedad1 = getPropiedad.invoke(obj1);&lt;br /&gt;     Object propiedad2 = getPropiedad.invoke(obj2);&lt;br /&gt;     &lt;br /&gt;     if(propiedad1 instanceof Comparable &amp;&amp; propiedad2 instanceof Comparable) {&lt;br /&gt;      Comparable prop1 = (Comparable)propiedad1;&lt;br /&gt;      Comparable prop2 = (Comparable)propiedad2;&lt;br /&gt;      return prop1.compareTo(prop2);&lt;br /&gt;     }//CASO DE QUE NO SEA COMPARABLE&lt;br /&gt;     else {&lt;br /&gt;      if(propiedad1.equals(propiedad2))&lt;br /&gt;       return 0;&lt;br /&gt;      else&lt;br /&gt;       return 1;&lt;br /&gt;&lt;br /&gt;     }&lt;br /&gt;  &lt;br /&gt;    }&lt;br /&gt;    catch(Exception e) {&lt;br /&gt;     e.printStackTrace();&lt;br /&gt;    }&lt;br /&gt;    return 0;&lt;br /&gt;   }&lt;br /&gt;  });&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; &lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt; Bien de esta forma tenemos terminado nuestro método, ahora solo falta probarlo, y para esto crearemos un Main, con una Lista de Objetos de Clase Persona, que son un JavaBean y la Ordenaremos. Además al método agregamos una anotación para que elimine las Warnings y el compilador no este dando lata jaja. Por último nuestra clase luce así:&lt;br /&gt;&lt;br /&gt;&lt;pre class="java" name="code"&gt;&lt;br /&gt;import java.lang.reflect.Method;&lt;br /&gt;import java.util.ArrayList;&lt;br /&gt;import java.util.Collections;&lt;br /&gt;import java.util.Comparator;&lt;br /&gt;import java.util.List;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;public class Util {&lt;br /&gt;&lt;br /&gt; @SuppressWarnings("unchecked")&lt;br /&gt; public static void ordena(List lista, final String propiedad) {&lt;br /&gt;  Collections.sort(lista, new Comparator() {&lt;br /&gt;   &lt;br /&gt;   public int compare(Object obj1, Object obj2) {&lt;br /&gt;    &lt;br /&gt;    Class clase = obj1.getClass();&lt;br /&gt;    String getter = "get" + Character.toUpperCase(propiedad.charAt(0)) + propiedad.substring(1);&lt;br /&gt;    try {&lt;br /&gt;     Method getPropiedad = clase.getMethod(getter);&lt;br /&gt;     &lt;br /&gt;     Object propiedad1 = getPropiedad.invoke(obj1);&lt;br /&gt;     Object propiedad2 = getPropiedad.invoke(obj2);&lt;br /&gt;     &lt;br /&gt;     if(propiedad1 instanceof Comparable &amp;&amp; propiedad2 instanceof Comparable) {&lt;br /&gt;      Comparable prop1 = (Comparable)propiedad1;&lt;br /&gt;      Comparable prop2 = (Comparable)propiedad2;&lt;br /&gt;      return prop1.compareTo(prop2);&lt;br /&gt;     }//CASO DE QUE NO SEA COMPARABLE&lt;br /&gt;     else {&lt;br /&gt;      if(propiedad1.equals(propiedad2))&lt;br /&gt;       return 0;&lt;br /&gt;      else&lt;br /&gt;       return 1;&lt;br /&gt;&lt;br /&gt;     }&lt;br /&gt;  &lt;br /&gt;    }&lt;br /&gt;    catch(Exception e) {&lt;br /&gt;     e.printStackTrace();&lt;br /&gt;    }&lt;br /&gt;    return 0;&lt;br /&gt;   }&lt;br /&gt;  });&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; public static void main(String[] args) {&lt;br /&gt;  List&amp;lt;Persona&amp;gt; personas = new ArrayList&amp;lt;Persona&amp;gt;();&lt;br /&gt;  &lt;br /&gt;  &lt;br /&gt;  personas.add(new Persona("Gustavo",25));&lt;br /&gt;  personas.add(new Persona("Pedro",32));&lt;br /&gt;  personas.add(new Persona("Pablo",15));&lt;br /&gt;  personas.add(new Persona("Juan",10));&lt;br /&gt;  personas.add(new Persona("Ramiro",50));&lt;br /&gt;  personas.add(new Persona("Daniel",81));&lt;br /&gt;  personas.add(new Persona("Hector",23));&lt;br /&gt;  &lt;br /&gt;  System.out.print("Lista sin ordenar:");&lt;br /&gt;  System.out.println(personas);&lt;br /&gt;  System.out.println();&lt;br /&gt;  &lt;br /&gt;  &lt;br /&gt;  //LLAMAMOS A ORDENA POR NOMBRE&lt;br /&gt;  ordena(personas,"nombre");&lt;br /&gt;  System.out.print("Ordenadas por Nombre:");&lt;br /&gt;  System.out.println(personas);&lt;br /&gt;  System.out.println();&lt;br /&gt;  &lt;br /&gt;  //LLAMAMOS A ORDENA POR EDAD&lt;br /&gt;  ordena(personas,"edad");&lt;br /&gt;  System.out.print("Ordenadas por Edad:");&lt;br /&gt;  System.out.println(personas);&lt;br /&gt;  System.out.println();&lt;br /&gt;  &lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; &lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;class Persona {&lt;br /&gt; &lt;br /&gt; String nombre;&lt;br /&gt; int edad;&lt;br /&gt; &lt;br /&gt; &lt;br /&gt; &lt;br /&gt; public Persona(String nombre, int edad) {&lt;br /&gt;  super();&lt;br /&gt;  this.nombre = nombre;&lt;br /&gt;  this.edad = edad;&lt;br /&gt; }&lt;br /&gt; public String getNombre() {&lt;br /&gt;  return nombre;&lt;br /&gt; }&lt;br /&gt; public void setNombre(String nombre) {&lt;br /&gt;  this.nombre = nombre;&lt;br /&gt; }&lt;br /&gt; public int getEdad() {&lt;br /&gt;  return edad;&lt;br /&gt; }&lt;br /&gt; public void setEdad(int edad) {&lt;br /&gt;  this.edad = edad;&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; //SOLO PARA QUE SEA MAS FACIL VER LOS DATOS&lt;br /&gt; public String toString() {&lt;br /&gt;  return nombre + " " + edad;&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;Aún habría algunas cosas que agregar a nuestro método, cómo manejo correcto de excepciones, ponerlo en una clase más adecuada etc... Pero en Escencia ya está terminado y lo podremos usar y reusar en muchos de nuestros proyectos!&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;Espero te haya servido&lt;br /&gt;Saludos&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2016004623247230365-1744844455386675699?l=xyzdev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xyzdev.blogspot.com/feeds/1744844455386675699/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://xyzdev.blogspot.com/2009/01/ordenar-listas-en-java.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2016004623247230365/posts/default/1744844455386675699'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2016004623247230365/posts/default/1744844455386675699'/><link rel='alternate' type='text/html' href='http://xyzdev.blogspot.com/2009/01/ordenar-listas-en-java.html' title='Ordenar Listas en Java'/><author><name>Gus</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2016004623247230365.post-3718555837747497471</id><published>2009-01-23T09:22:00.001-06:00</published><updated>2009-01-23T09:22:41.272-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tip'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><category scheme='http://www.blogger.com/atom/ns#' term='JZab'/><title type='text'>Apagar la computadora automáticamente (XP)</title><content type='html'>&lt;p&gt;A veces nosotros necesitamos dejar la computadora prendida bajando algo o realizando alguna tarea, si nos tuvieramos que ir, nos gustar&amp;#237;a poder apagarla autom&amp;#225;ticamente. Para realizar esto haremos uso de un commando que nos proporciona el sistema operativo.&lt;/p&gt;  &lt;p&gt;Para usarlo tenemos que entrar a INICIO -&amp;gt; Ejecutar...&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;shutdown -s -f - t [tiempoEnSegundos] &lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Con este comando le decimos que apague la computadora y que si alguna aplicaci&amp;#243;n no responde la finalice, adem&amp;#225;s de asignar el tiempo en que queremos que se apague.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2016004623247230365-3718555837747497471?l=xyzdev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xyzdev.blogspot.com/feeds/3718555837747497471/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://xyzdev.blogspot.com/2009/01/apagar-la-computadora-automticamente-xp.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2016004623247230365/posts/default/3718555837747497471'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2016004623247230365/posts/default/3718555837747497471'/><link rel='alternate' type='text/html' href='http://xyzdev.blogspot.com/2009/01/apagar-la-computadora-automticamente-xp.html' title='Apagar la computadora automáticamente (XP)'/><author><name>JZabdiel</name><uri>http://www.blogger.com/profile/13273407104522826832</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_1F7J4DNWM5I/SZmHTogG5tI/AAAAAAAAACo/ROAasCSsfyM/S220/duke.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2016004623247230365.post-8369089078323725982</id><published>2009-01-11T16:14:00.004-06:00</published><updated>2009-01-14T19:42:35.355-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='facil'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><category scheme='http://www.blogger.com/atom/ns#' term='gustavo villegas'/><title type='text'>PHP: Un lenguaje Sencillo</title><content type='html'>En los últimos años, PHP se ha convertido en un lenguaje para programación web muy utilizado, existen muchas aplicaciones desarrolladas utilizándolo y muy grandes (como Facebook). Además, hoy en día es posible programar aplicaciones de escitorio utilizando PHP (sí, ya es posible) utilizando las librerías GTK para la interfaz gráfica. También existe un gran soporte en Internet, hay demasiados foros que contienen información del mismo, una gran cantidad de librerías con funciones ya hechas e incluso paquetes totalmente gratis, gestores de Contenido, Foros, Carritos de Compras, Galerías de Imágenes, Lectores de RSS, entre muchas otras. Cuenta con soporte multiplataforma, las funciones son llamadas nativas (no está implementado sobre ninguna máquina virtual como Java) y cuenta con gran conectividad con MySQL.&lt;br /&gt;&lt;br /&gt;Sin embargo hablando como programador, más que como un usuario "que descarga paquetes", creo que PHP es HORRENDO, tiene como origen un modelo de programación en web antiguo, el soporte que tiene para la programación orientada a objetos es nefasto (incluso en PHP5 que dicen que SUPUESTAMENTE mejoró mucho), su naturaleza fomenta en la mayoría de programadores mezclar completamente el código de la lógica del negocio con la vista. El poder utilizar variables donde sea, hace que sea más difícil la corrección de bugs, ya que puede llegar a confundir las variables $id_usuario con $id_usario y tener errores de ejecución, y debido a que PHP "lo permite" es muy dificil de corregir.&lt;br /&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;PHP no se utiliza para la creación de aplicación empresariales, a veces resulta muy complicado implementar patrones de diseño ya que no tiene gran soporte de la programación orientada a objetos, no es Como Java, que es 100% Orientado a Objetos en el que incluso las funciones nativas o librerías que vienen incluidas en el JRE residen siempre en un objeto. Las empresas de desarrollo, nunca eligen a PHP para un proyecto grande, ya que su arquitectura no lo permite.&lt;br /&gt;&lt;br /&gt;Otro problema, el principal y más grande que yo veo en PHP, es que muchos de los programadores que aprenden está tecnología, lo hacen porque necesitan hacer una página web que sea interactiva y que permita el registro de usuarios, no estudian Programación Orientada a Objetos, ni siquiera se preocupan de Patrón Modelo Vista Controlador, hacen un revoltijo en las páginas de código HTML, CSS, Javascript y PHP (Ya que así es como se vende PHP, "APRENDA PHP, Sólo con saber un poco de HTML y CSS). A diferencia de aquellos que aprenden a programar en Java o .NET (no todos) adquieren mejores prácticas de Programación, tienen una mejor idea de cómo hacer un Modelado de un Sistema (aclaro, no todos jeje) y son más disciplinados para programar (REPITO: NO TODOS JAJA).&lt;br /&gt;&lt;br /&gt;Se habla mucho acerca de Java VS PHP o .NET VS PHP, sin embargo creo que ni siquiera hay puntos de comparación, .NET y Java, son tecnologías en las que se pueden realizar un sin fin de cosas, aplicaciones web, aplicaciones Standalone, Celulares, Servicios Web, RMI, RPC, DAEMONS, Interpretes, Compiladores. Tienen gran Soporte de Transacciones, y no creo que haya un Framework para aplicaciones web tan completo y tan robusto como Spring. PHP es un lenguaje que sirve para aplicaciones sencillas, carritos de compras y foros, pero no creo que al menos en el corto plazo se pueda comparar con un lenguaje y una Suite tan completa y poderosa como Java. Claro la curva de aprendizaje de Java, es mucho más grande que la de PHP, pero los beneficios que trae también son así, además aprender a programar en un lenguaje de programación como Java hace que los programadores comprendan en funcionamiento de un simple programa y así que puedan ir aprendiendo hasta llegar a comprender un Sistema Distribuido, que utiliza Web Services y bases de datos distribuidas que soporta transacciones, a diferencia de muchos que aprenden PHP, que a veces ni siquiera llegan a comprender el esquema Cliente-Servidor.&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2016004623247230365-8369089078323725982?l=xyzdev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xyzdev.blogspot.com/feeds/8369089078323725982/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://xyzdev.blogspot.com/2009/01/php-un-lenguaje-sencillo.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2016004623247230365/posts/default/8369089078323725982'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2016004623247230365/posts/default/8369089078323725982'/><link rel='alternate' type='text/html' href='http://xyzdev.blogspot.com/2009/01/php-un-lenguaje-sencillo.html' title='PHP: Un lenguaje Sencillo'/><author><name>Gus</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2016004623247230365.post-2794940850534660923</id><published>2008-12-26T12:12:00.009-06:00</published><updated>2009-01-14T19:41:44.173-06:00</updated><title type='text'>Comparando Strings</title><content type='html'>&lt;p&gt;Para comparar Strings, es recomendable usar (o más bien es lo que se debe usar) el método equals, pero es probable que nunca hayas usado una expresión como esta:&lt;/p&gt;&lt;br /&gt;&lt;pre class="java" name="code"&gt;&lt;br /&gt;public static void main(String[] args) {&lt;br /&gt; String a = "Hola";&lt;br /&gt; if("".equals(a)) {&lt;br /&gt;  System.out.println("El String es vacío");&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;A decir verdad no tiene mucha gracia, sólo estamos llamando al método equals de la clase String, de un String que se encuentra entrecomillado pero esto tiene algunas ventajas, cómo por ejemplo crear un if para validar si una entrada del usuario es vacía, pero ¿Dónde está la ventaja?.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;Bien si tuviesemos un String a y queremos ver que es vacío la comparación sería muy simple:&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;&lt;pre class="java" name="code"&gt;&lt;br /&gt;if(a.equals("") {&lt;br /&gt;System.out.println("El String es vacio");&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Pero también debemos validar que el String no sea null, ya que si por ejemplo lo estamos recuperando en un Servlet, si el parámetro no fue enviado, el String es null, entonces nuestra comparación debería quedar así:&lt;br /&gt;&lt;pre class="java" name="code"&gt;&lt;br /&gt;if(a!=null &amp;&amp; a.equals("")) {&lt;br /&gt;System.out.println("El String es vacio");&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;Con está ultima modificación, asumiremos que el compilador es capaz de reconocer que si la primera condición se cumple, no ejecutará nada más y no arrojará un excepción, pero dado que eso sería asumir algo (que en realidad si lo hace así), la comparación deberá quedar algo así:&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;pre class="java" name="code"&gt; public static void main(String[] args) {&lt;br /&gt; String a = "Hola";&lt;br /&gt; if(a!=null){&lt;br /&gt;  if(a.equals("") {&lt;br /&gt;   System.out.println("El String es vacío");&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;Sin embargo ese problema se puede resolver facilmente así:&lt;div&gt;&lt;br /&gt;&lt;pre class="java" name="code"&gt;public static void main(String[] args) {&lt;br /&gt; String a = null;&lt;br /&gt; if("".equals(a)) {&lt;br /&gt;  System.out.println("El String es vacío");&lt;br /&gt; }&lt;br /&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2016004623247230365-2794940850534660923?l=xyzdev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xyzdev.blogspot.com/feeds/2794940850534660923/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://xyzdev.blogspot.com/2008/12/comparando-strings.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2016004623247230365/posts/default/2794940850534660923'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2016004623247230365/posts/default/2794940850534660923'/><link rel='alternate' type='text/html' href='http://xyzdev.blogspot.com/2008/12/comparando-strings.html' title='Comparando Strings'/><author><name>Gus</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2016004623247230365.post-4352695715467696578</id><published>2008-12-24T18:52:00.001-06:00</published><updated>2009-01-14T20:19:01.640-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='performance'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='JZab'/><title type='text'>Copia de Arreglos</title><content type='html'>&lt;p&gt;Los arreglos son una forma importante de salvar datos. En caso de que tengamos que realizar una copia de arreglos podemos realizarlo de esta manera.&lt;/p&gt;&lt;pre class="java" name="code"&gt;public class Copy(){  &lt;br /&gt;  int[] array = new int[55555];  &lt;br /&gt;}  &lt;br /&gt;  &lt;br /&gt;public int[] copyArray(){  &lt;br /&gt;  int[] arrayCopy = new int[array.length];  &lt;br /&gt;  for( int i = 0; i &amp;lt; array.length; i++ )  &lt;br /&gt;     arrayCopy[i] = array[i];  &lt;br /&gt;  return arrayCopy;  &lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;&lt;p&gt;Para cada posición copiamos el valor de un arreglo al otro, esta es una manera pero existe una mejor y más sencilla. Para eso revisaremos la documentación ( &lt;a href="http://java.sun.com/javase/6/docs/api/java/lang/System.html"&gt;API documentation &lt;/a&gt;); Existe en la clase &lt;em&gt;System &lt;/em&gt;un método llamado &lt;strong&gt;&lt;em&gt;arraycopy.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&lt;textareaclass="java:nocontrols" name="code"&gt;public static native void arraycopy(Object src, int srcPos, Object dest, int destPos,int length) &lt;/textareaclass &gt;&lt;br /&gt;&lt;p&gt;Este método es nativo, por lo que la copia se hará en segmento de memoria haciendola más rápida. Este método nos da la posibilidad de copiar también segmentos del arreglo original.&lt;/p&gt;&lt;pre class="java:nocontrols" name="code"&gt;System.arraycopy(array, 5, array, 0, array.length-5);&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;Copiando desde la posición 5 del arreglo&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;Bibliography:&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Dactonta, Michael C; Monk, Eric; Keller Paul, Java Pitfalls, Wiley 2000;&lt;/p&gt;&lt;br /&gt;&lt;span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2016004623247230365-4352695715467696578?l=xyzdev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xyzdev.blogspot.com/feeds/4352695715467696578/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://xyzdev.blogspot.com/2008/12/copia-de-arreglos.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2016004623247230365/posts/default/4352695715467696578'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2016004623247230365/posts/default/4352695715467696578'/><link rel='alternate' type='text/html' href='http://xyzdev.blogspot.com/2008/12/copia-de-arreglos.html' title='Copia de Arreglos'/><author><name>JZabdiel</name><uri>http://www.blogger.com/profile/13273407104522826832</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_1F7J4DNWM5I/SZmHTogG5tI/AAAAAAAAACo/ROAasCSsfyM/S220/duke.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2016004623247230365.post-7181621436835396589</id><published>2008-12-24T16:32:00.000-06:00</published><updated>2008-12-24T17:01:39.131-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='performance'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='JZab'/><title type='text'>Crear un cronómetro</title><content type='html'>&lt;p&gt;Java es uno de los lenguajes de programaci&amp;#243;n m&amp;#225;s utilizados o por lo menos de los mas famosos. Una de sus debilidades es la velocidad de ejecuci&amp;#243;n (que ha ido mejorandose) y el consumo de memoria RAM,&lt;/p&gt;  &lt;p&gt;Para poder realizar los famosos &amp;quot;benchmarks&amp;quot; lo que podemos medir es el tiempo de ejecuci&amp;#243;n, esto lo podemos realizar a trav&amp;#233;s de una clase que simular&amp;#225; un cron&amp;#243;metro.&lt;/p&gt; &lt;span class="fullpost"&gt;   &lt;pre class="java" name="code" e="code"&gt;public class Stopwatch {&lt;br /&gt;  private long startTime = -1;&lt;br /&gt;  private long stopTime = -1;&lt;br /&gt;  private boolean running = false;&lt;br /&gt;  &lt;br /&gt;  public Stopwatch start(){&lt;br /&gt;     startTime = System.currentTimeMillis();&lt;br /&gt;     running = true;&lt;br /&gt;     return this;&lt;br /&gt;  }&lt;br /&gt;  &lt;br /&gt;  public Stopwatch stop(){&lt;br /&gt;     stopTime = System.currentTimeMillis();&lt;br /&gt;     running = false;&lt;br /&gt;     return this;&lt;br /&gt;  }&lt;br /&gt;  &lt;br /&gt;  public Stopwatch reset(){&lt;br /&gt;     startTime = -1;&lt;br /&gt;     stopTime = -1;&lt;br /&gt;     running = false;&lt;br /&gt;     return this;&lt;br /&gt;  }&lt;br /&gt;  &lt;br /&gt;  public long getElapsedTime(){&lt;br /&gt;     if(startTime == -1)&lt;br /&gt;       return 0;&lt;br /&gt;     else if(running)&lt;br /&gt;       return System.currentTimeMillis() - startTime;&lt;br /&gt;     else&lt;br /&gt;       return stopTime - startTime;&lt;br /&gt;  }&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Para poder utilizar esta clase s&amp;#243;lo debemos crear una instancia, y llamar a los m&amp;#233;todos necesarios.&lt;br /&gt;&lt;br /&gt;Ejemplo:&lt;/p&gt;&lt;br /&gt;&lt;pre class="java" name="code"&gt;public static void main(String[] args){&lt;br /&gt;  Stopwatch timer = new Stopwatch().start();&lt;br /&gt;  long total = 0;&lt;br /&gt;  for(int i = 0; i  Integer.MAX_VALUE; i++){&lt;br /&gt;     total +=i;&lt;br /&gt;  }&lt;br /&gt;  System.out.println(timer.getElapsedTime());&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;/span&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2016004623247230365-7181621436835396589?l=xyzdev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xyzdev.blogspot.com/feeds/7181621436835396589/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://xyzdev.blogspot.com/2008/12/crear-un-cronmetro.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2016004623247230365/posts/default/7181621436835396589'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2016004623247230365/posts/default/7181621436835396589'/><link rel='alternate' type='text/html' href='http://xyzdev.blogspot.com/2008/12/crear-un-cronmetro.html' title='Crear un cronómetro'/><author><name>JZabdiel</name><uri>http://www.blogger.com/profile/13273407104522826832</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_1F7J4DNWM5I/SZmHTogG5tI/AAAAAAAAACo/ROAasCSsfyM/S220/duke.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2016004623247230365.post-3389229065999743472</id><published>2008-12-23T21:31:00.000-06:00</published><updated>2008-12-23T21:33:01.925-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JZab'/><category scheme='http://www.blogger.com/atom/ns#' term='introduccion'/><title type='text'>Hola, Soy Zabdiel</title><content type='html'>&lt;p&gt;Hola a todos, el motivo de este post es poder presentarme, soy Zabdiel estudiante de ITC (Ingenier&amp;#237;a en Tecnolog&amp;#237;as Computacionales ) estudio mi 8vo semestre.&lt;/p&gt;  &lt;p&gt;El objetivo de este blog es el poder poner tutoriales y tips que ayuden a allgunos problemas que nosotros mismos hemos tenido y que nos hubiera gustado tener un lugar donde buscar el c&amp;#243;mo resolverlos. As&amp;#237; que esperamos sus comentarios y dudas.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2016004623247230365-3389229065999743472?l=xyzdev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xyzdev.blogspot.com/feeds/3389229065999743472/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://xyzdev.blogspot.com/2008/12/hola-soy-zabdiel.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2016004623247230365/posts/default/3389229065999743472'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2016004623247230365/posts/default/3389229065999743472'/><link rel='alternate' type='text/html' href='http://xyzdev.blogspot.com/2008/12/hola-soy-zabdiel.html' title='Hola, Soy Zabdiel'/><author><name>JZabdiel</name><uri>http://www.blogger.com/profile/13273407104522826832</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_1F7J4DNWM5I/SZmHTogG5tI/AAAAAAAAACo/ROAasCSsfyM/S220/duke.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2016004623247230365.post-4828566665823472782</id><published>2008-12-11T00:27:00.001-06:00</published><updated>2008-12-23T22:09:29.986-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='tutorial'/><category scheme='http://www.blogger.com/atom/ns#' term='gustavo villegas'/><title type='text'>Paso de Parámetros en java: Por Valor</title><content type='html'>&lt;div&gt;Parámetros por Valor.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Se utiliza cuándo se requiere pasar el valor de una variable a una función y que está realize alguna operación sobre ese Valor, la función o método crea una Variable Local y trabaja sobre ella.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;int a=5;&lt;/div&gt;&lt;div&gt;metodo(a):&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;void metodo(int c) {&lt;/div&gt;&lt;div&gt; System.out.println(c);&lt;/div&gt;&lt;div&gt;}&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;La variable c, es una variable local y que recibe una copia del valor de la variable a, es decir se pasa el parámetro por valor.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Paso por Referencia.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;El paso por referencia en vez de mandar el valor de la variable, se mánda la dirección de memoria en la que se encuentra almacenada, para de está manera modificar el contenido de la variable. Sin embargo este tipo de paso de parámetros en Java no existe pero si lo quisieramos hacer en C++ sería algo así:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;include &lt;iostream&gt;&lt;/iostream&gt;&lt;/div&gt;&lt;div&gt;using namespace std;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;void funcion(int &amp;amp;a) {&lt;/div&gt;&lt;div&gt; a = 10;&lt;/div&gt;&lt;div&gt;}&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;int main() {&lt;/div&gt;&lt;div&gt; int var = 5;&lt;/div&gt;&lt;div&gt; funcion(&amp;amp;var);&lt;/div&gt;&lt;div&gt; cout &lt;&lt;&gt;&lt;/div&gt;&lt;div&gt;}&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;El resultado de la ejecución sería, 10 ya que la variable 10 se pasa por referencia y la función modifica su valor.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Ahora regresando a lo importante ¿Cómo pasa los parámetros Java? En java sólo existe una forma de hacerlo y con el paso de parámetos por valor, aquí dejo un ejemplo de esto:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;public class PasoPorValor {&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt; public static void main(String [] args) {&lt;/div&gt;&lt;div&gt;  int a = 20;&lt;/div&gt;&lt;div&gt;  metodo(a);&lt;/div&gt;&lt;div&gt;  System.out.println(a);&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt; }&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt; public static void metodo(int c) {&lt;/div&gt;&lt;div&gt;  c = 10;&lt;/div&gt;&lt;div&gt; }&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;}&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;El valor de la variable a siempre es el mismo. Ahora veamos un ejemplo utilizando objetos, en este caso utilizaré un arreglo, ya que por definición los arreglos son objetos:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;public class PasoPorValor {&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt; public static void main(String [] args) {&lt;/div&gt;&lt;div&gt;  int[] a = new int[1]; //declaramos un arreglo de una posición;&lt;/div&gt;&lt;div&gt;  metodo(a);&lt;/div&gt;&lt;div&gt;  System.out.println(a[0]);&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt; }&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt; public static void metodo(int[] c) {&lt;/div&gt;&lt;div&gt;  c[0] = 10;&lt;/div&gt;&lt;div&gt; }&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;}&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Pero que ocurrió!!! Por qué cambió el valor mi objeto? En realidad esto ocurre por la sencilla razón de que en Java las variables que apuntan a objetos, no son el objeto, sino una referencia al él, es decir en Java cuando hacemos esto:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;int[] a = new int[1]; &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Estamos creando una referencia que tiene cómo identificador a y que el tipo de datos al que hace referencia es un arreglo de int y además ahí mismo con el operador new se crea el objeto, y por lo tanto la variable a, hará referencia a la locación de memoria de ese objeto.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Entonces cuándo el método recibe la referencia y lo modifica, estamos modificando el valor del objeto, pero ojo, esto no quiere decir que Java pase parámetros por referencia, sino que PASA EL VALOR DE LA REFERENCIA &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Si Java pasara valores por referencia cuándo hacemos esto:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;public class PasoPorValor {&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt; public static void main(String [] args) {&lt;/div&gt;&lt;div&gt;  String a = "Hola";&lt;/div&gt;&lt;div&gt;  metodo(a);&lt;/div&gt;&lt;div&gt;  System.out.println(a);&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt; }&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt; public static void metodo(String c) {&lt;/div&gt;&lt;div&gt;  c = "Nuevo Objeto";&lt;/div&gt;&lt;div&gt; }&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;}&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;El resultado debería ser "Nuevo Objeto" Sin embargo esto no sucede por la simple y sencilla razón de que Java sólo pasa parámetros por valor&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Espero con esto quede un poco más claro cómo pasa los parámetros Java&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Saludos&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2016004623247230365-4828566665823472782?l=xyzdev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xyzdev.blogspot.com/feeds/4828566665823472782/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://xyzdev.blogspot.com/2008/12/paso-de-parmetros-en-java-por-valor.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2016004623247230365/posts/default/4828566665823472782'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2016004623247230365/posts/default/4828566665823472782'/><link rel='alternate' type='text/html' href='http://xyzdev.blogspot.com/2008/12/paso-de-parmetros-en-java-por-valor.html' title='Paso de Parámetros en java: Por Valor'/><author><name>Gus</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2016004623247230365.post-4118718794678123229</id><published>2008-12-10T23:45:00.002-06:00</published><updated>2008-12-23T21:45:42.702-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gustavo villegas'/><category scheme='http://www.blogger.com/atom/ns#' term='introduccion'/><title type='text'>Hola, me llamo Gustavo!</title><content type='html'>Hola, me llamo Gustavo Villegas, tengo 19 años casi 20, Estudio la Carrera de Ingeniería en Tecnologías Computacionales en el Tec de Motnerrey acabo de terminar 5to semestre y pss yo creo que se puede decir que voy en 6to. Me gustan las computadoras, programar , creo que soy un poco Geek, pero leve no mucho jaja. Además a eso también me gustan mucho los coches, en particular los "american muscle". Antes solía ser un poco más fan de los videojuegos, pero pues la verdad es que ultimamente les he perdido el gusto y sobre todo el tiempo, además de no tener dinero para un PS 3 :(&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Bueno pues aquí estaré posteando cada que se pueda, para dar uno que otro tip de software alguna noticia etc... y estar dando ese tipo de información, consejos o tutoriales que se suele dar en un Blog. En particular el que área que me interesa en la actualidad es la Programación en Web, aunque también me gustan otras cosas de la programación en general. Sé programar en Java (es lo que digamos que de alguna forma soy menos ignorante jaja) también tengo algunos otros pequeños conocimientos aunque muy poco en PHP, ASP.NET, ASP (El viejito) , C#, C++, C y "HASKELL". Y también sé algunas cosas de las estándar que se saben para web, HTML, JavaScript, XML, JSON etc...&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Estaré escribiendo este Blog junto con mis compañeros de la escuela (hasta ahora) Zab (8vo) y Ger (6to, de mi generación) y pss espero te sea de ayuda. Si tienes alguna duda con todo gusto me puedes enviar un correo y si te puedo ayudar con todo gusto lo haré. Y pues a decir verdad, no creo que muchas personas lean esto, pero si algún día este blog crece y tiene más visitas espero lo leas jajajaja.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Saludos&lt;/div&gt;&lt;div&gt;Gus!!!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2016004623247230365-4118718794678123229?l=xyzdev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xyzdev.blogspot.com/feeds/4118718794678123229/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://xyzdev.blogspot.com/2008/12/hola-me-llamo-gustavo.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2016004623247230365/posts/default/4118718794678123229'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2016004623247230365/posts/default/4118718794678123229'/><link rel='alternate' type='text/html' href='http://xyzdev.blogspot.com/2008/12/hola-me-llamo-gustavo.html' title='Hola, me llamo Gustavo!'/><author><name>Gus</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
