El Post Oficial para aprender Java

B

¿Qué es Java?

Java es un lenguaje de programación orientado a objetos, desarrollado por Sun Microsystems en 1995. El lenguaje en sí mismo toma mucha de su sintaxis de C, Cobol y Visual Basic, pero tiene un modelo de objetos más simple y elimina herramientas de bajo nivel, que suelen inducir a muchos errores, como la manipulación directa de punteros o memoria. La memoria es gestionada mediante un recolector de basura.

Las aplicaciones Java están típicamente compiladas en un bytecode, aunque la compilación en código máquina nativo también es posible. En el tiempo de ejecución, el bytecode es normalmente interpretado o compilado a código nativo para la ejecución, aunque la ejecución directa por hardware del bytecode por un procesador Java también es posible.
La implementación original y de referencia del compilador, la máquina virtual y las bibliotecas de clases de Java fueron desarrollados por Sun Microsystems en 1995. Desde entonces, Sun ha controlado las especificaciones, el desarrollo y evolución del lenguaje a través del Java Community Process, si bien otros han desarrollado también implementaciones alternativas de estas tecnologías de Sun, algunas incluso bajo licencias de software libre.

Entre diciembre de 2006 y mayo de 2007, Sun Microsystems liberó la mayor parte de sus tecnologías Java bajo la licencia GNU GPL, de acuerdo con las especificaciones del Java Community Process, de tal forma que prácticamente todo el Java de Sun es ahora software libre aunque la biblioteca de clases de paginas web comprendidas en las librerias de objetacion de objetos para ser compilados como aplicaciones comprimidas no estan totalmente acopladas de acuerdo con Sun que dice que se requiere un interprete para ejecutar los programas de Java.

¿Para qué sirve este hilo?

Básicamente, este hilo sirve y servirá para empezar a aprender a programar en Java y a ayudar a los novatos a aprender de sus errores, es como una pizarra abierta a cualquier persona que quiera dedicarse a la programación en Java.

Si entras aquí, saldrás habiendo aprendido algo nuevo.

Muy cutre el hilo... ahora, por donde empiezo?

Personalmente no sabría decirte por donde debes empezar, yo quiero dedicarme a la programación en Java, sí, pero orientada a la programación de videojuegos, yo he empezado buscando guías y tutoriales sobre como hacer un juego basado en texto.

Si quieres saber por dónde empezar, lo mejor será que postees y nos digas a lo que te quiere orientar, es decir, a lo que quieres llegar a hacer con Java.

Sitios de Interés

Tutoriales - YOUTUBE

Como hacer un juego basado en Texto.

Las bases de Java

De parte de #12 - http://www.tecnun.es/asignaturas/Informat1/AyudaInf/aprendainf/Java/Java2.pdf
Recomendado por #9 "Thinking in Java" EN ESPAÑOL - http://depositfiles.com/files/1qd2xt99z

Software con el que desarrollar con Java

Yo os recomiendo Eclipse debido a que es el que me recomendaron a mi y va bastante bien, tiene una interfaz muy simple para no liarte demasiado, pero no he probado ninguno más, así que, sois libres de elegir qué compilador/ide usar con Java.

-Netbeans.

*Seguiré metiendo cosas al post, de momento vamos a empezar, si os parece que la gente ponga las dudas que tenga y alguien se encargará de responderle, yo estoy también aprendiendo desde cero, así que no podré ayudar mucho, pero si se algo que vosotros no sepais aún, no dudéis en que os ayudaré.

5
zErOx

Se agradece.

1
B

Lo añado al programa, o lo escribo aquí?

Edit, nopez, lo he intentado y creía realmente que sabía, al final del código de las preguntas (antes de cerrarlo) he puesto:

else{
       sleep("Error");
}

Pero no hace nada.. #1672

Desde mi lógica aplastante creo que a ese else le falta algo que indique cuándo debe salir, pero claro, yo diría que es el reply, pero claro, cómo meter el reply en el else?

PD: El hilo lo creo luego.


#1672 Aquí:

import java.util.Scanner;
public class mainclass {
	
public static void main(String args[]) {
	Scanner myScanner = new Scanner(System.in);
	String reply;
	
	sleep("Copyright (c) devMidgard.com");
	sleep("Bienvenido, gracias por probar este Test");
	sleep("Primera Pregunta: Te gusta programar?");
	sleep("Si = 1 No = 2");
	
	reply = myScanner.next();
	
	
	if(reply.equals("2")){
		sleep("Entonces, este juego no va dirigido a ti!");
		sleep("Por favor, cierra la puerta al cerrar.");
		}
	
	if(reply.equals("1")){
		sleep("Entonces, ya tenemos algo en comun!");
		sleep("-----------------------------------");
		sleep("Sabes que este juego esta programado en Java?");
		sleep("Si = 1 No = 2");
		reply = myScanner.next();
		
		if(reply.equals("1")){
			sleep("Muy bien! Has acabado el juego!");
		}
		
		if(reply.equals("2")){
			sleep("Muy mal!");
			sleep("Ahora ya lo sabes!");
			sleep("Has acabado el juego!");
		}
	}
	else{
		sleep("Error");
	}
	}

public static void sleep(String s){
	for(int i = 0;i<s.length();i++){
		try{
			Thread.sleep(35);
			System.out.print(s.substring(i, i + 1));
		}catch(Exception e){}
	}
	System.out.println();
	try{
		Thread.sleep(1000);
	}catch(Exception e){}
}
}

#1672 Pues ahora que lo dices nop, no me he preguntado para qué sirve el Try, y ahora que me has dicho lo del else if entiendo algunas cosas, pero del Try nada.

1 respuesta
charlesmarri

¿Y no sería mejor haberse esperado a tener el hilo entero montado y publicarlo? DIGO YO.

2 respuestas
krew

Midgard tío, este hilo es el futuro

#4 se monta porque en el hilo "Guía de desarrollo de juegos indie" si están diferenciando dos vertientes: dudas de java midgerianas y juegos indie, así está todo organizadito.

Todo lo que sea no desvirtuar el santuario indie es bueno

3
B

#4 Ya está algo más arreglado, ahora almenos hay texto y un banner ;)

autlos

básicamente el if...else no funciona así.


if(loquesea){

}else if(loquepuedaser){

}else{

}

Esto es: tienes el caso 1, el caso 2, y todo lo demás. Tienes la opción de hacer un switch y el "else" equivaldría al default.

Y lo que te dije en el otro hilo: controlar los errores con try...catch es una muy buena opción.


Lo que el procesador hace a tu código es:

Compruebo si es 1.

Si lo es, hago cosas.

Compruebo si es 2. (si es 1 esto no se va a hacer nunca, sin embargo la comprobación se realizará igual, ahí estás malgastando tiempo).


Lo que hace con 'else'

Compruebo si es 1.

Si lo hes, hago las cosas.

No compruebo lo demás.

1 1 respuesta
B

#7 Oye, tengo una duda, ahora estoy re-escribiendo todo sin usar ningún tutorial para ver si se me ha quedado en la cabeza y mientras escribía me ha dado por pensar, si por ejemplo yo en la clase, dentro de ella pongo cualquier otro void que no sea MAIN, el programa no lo leerá? O como va esto?

En teoría, según el del tutorial dice que el MAIN es lo que el programa leerá primero, está claro, pero si no existe main en la clase, no leerá esa clase?

EDIT

#7 Ya lo he reescrito, he tenido que consultar a penas 2 veces el código (no he metido el efecto de escritura esta vez por que sinceramente no sé como funciona..)

Aquí está el ejercicio que me has pedido, al final usando el orden que me has dicho :)


import java.util.Scanner;

public class a {
	
public static void main(String args[]){
	Scanner myScanner = new Scanner(System.in);
	String reply;
	
	System.out.println("Qué eliges");
	System.out.println("A o B");
	reply = myScanner.next();
	
	if(reply.equals("a")){
		System.out.println("Has elegido A.");
	}
	
	else if(reply.equals("b")){
		System.out.println("Has elegido B.");
	}
	
	else{
		System.out.println("Tu elección no es ni A ni B.");
	}
}

}
2 respuestas
B

#8 la clase principal siempre tiene un main. Lo estas haciendo mal, no se trata de copiar y pegar código y ver que hace, tienes que entender los principios de java antes de empezar. Bajate "thinking in java" y si no sabes ingles aprendes.

1 2 respuestas
eisenfaust

¿Pero por qué pones al mongolo de Notch en la imagen? ¿Qué ha hecho ese tío por Java?

Venga, por favor xD

1 respuesta
B

#9 Ya, eso es lo que quiero, pero voy muy perdido :( Gracias por aconsejar el thinking in java, ahora lo busco.

PD: Sé inglés como para entenderlo.

#10 Creo que es una imagen muy reciente en el mundo de Java, no es que haya hecho nada (no sé si lo ha hecho) es que ha sido lo primero que se me ha ocurrido, si tienes alguna sugerencia para hacer un mejor banner, suéltalo :P

Fastestwat

Yo te recomiendo que empieces por la base. De nada sirve que sepas el código de un programa que sabe leer números sino sabes el procedimiento que sigue el programa para leer esos números, que estructura tiene, etc.

Esta un poco anticuado pero te puede servir.
http://www.tecnun.es/asignaturas/Informat1/AyudaInf/aprendainf/Java/Java2.pdf

1 respuesta
autlos

#8 public static void main(String args[]) sólo vas a tener uno. Pero métodos public, y void puedes tener todos los que tú quieras.

Esto es mejor que mires en documentación. Está bien que mires manuales, yo aprendí directamente java desde:
http://docs.oracle.com/javase/tutorial/

Y mirando el código ya hecho del proyecto en el que me tocó. Pero claro, ya sabía C y VB. Este manual sí que lo miré un par de veces:

http://www.etnassoft.com/biblioteca/desarrollo-de-proyectos-informaticos-con-tecnologia-java/

es muy sencillito, y puedes terminarlo en 2-3 días y quedarte con la base. O bien probar cosas y consultarlas en el libro. Y para dudas concretas te contestamos por aquí.

PD: ahora veo mejor tu código.

Josekron

#3 No te voy a decir nada que no te hayan dicho ya. Tampoco hace falta que sigas el tochaco de "Piensa en Java", con buscarte cualquier librito que siga un orden, vas sobrado. Java es muy fácil pero hay cosas que aunque también son fáciles, hay que tenerlas claras e ir poco a poco como por ejemplo la herencia, interfaces, Threads, etc.

El tutorial que estas siguiendo en mi opinión no es nada bueno, ya de por sí estás malinterpretando la clase Thread. Resulta muy curioso utilizar los sleep para lanzar poco a poco los mensajes pero en la vida real no tiene mucho sentido dormir la hebra principal.

Empezaría con bucles (if, while, for) y luego con arrays unidimensionales y bidimensionales. Para que no te aburras, un juegecillo que puedes hacer es el "Hundir la flota", me acuerdo que en mis tiempos lo hice en C y le ponía colores quedando muy chulo xD.

2
bLero

Yo empezaría con un holamundo como en cualquier lenguaje, y a partir de ahí aprender la sintaxis y la API.

1
Kr4n3oK

Vaya basura.

public class HolaMidgard {

/**
 * @param args the command line arguments
 */
public static void main(String[] args) {
   
  System.out.println("Hola Midgard");

}
}

2
HukymaN
sleep("Por favor, cierra la puerta al cerrar.");

Indeed, cierra la puerta al cerrar.

1
HeXaN

¿Para estas cosas no se empezaba con la teoría sobre objetos, clases, herencias...? A lo mejor es que soy demasiado viejo y ya no se hace así.

2 2 respuestas
babri

#18 antes mejor pseudocodigo...xDDDD que luego los pones un bucle y se quedan locos

BLZKZ

#18 emmm claro, no sabes programar y empiezas por eso xDDDDDDDDDDD

No sabe lo que es un if como para meterle oo

1 respuesta
B

#20 Ahora sí que lo sé.

B

Yo empezaría con python sin OO a probar cosas básicas (if, while, funciones, io con ficheros y red...) y luego ya mirar un mínimo de OO y/o tema punteros si te vas a meter con C/C++.

Si tienes tiempo y quieres aprender bien (aunque considero que se aprende mejor en una clase de universidad, pero no tan divertido) te sugieron que vayas a www.udacity.com y te hagas el curso CS101. Es un curso de introducción a la programación, te explican todo con calma y además es divertido, pues te vas construyendo un buscador tipo Google (aunque más básico, obviamente) y sale gente de Google dando consejos.

PiPePiTo

#1 como IDE de desarrollo yo era de eclipse a saco hasta que me dijeron que usara el netbeans para unas clases visuales... yo te diria que lo añadieras a la lista simplemente porque el editor visual viene muy bien, aunque esté de moda el hacer J2EE y tal...

1 1 respuesta
B

#23 Añadido, gracias por la sugerencia.

1 respuesta
PiPePiTo

#24 otra cosa, cómo queires orientar el post? J2SE o java en general?

1 respuesta
B

#25 Java en General, pero ya se verá.

Igneus

Te añado un paquete de graficos de entrada/salida pa que sigas trasteando:

http://www.ctr.unican.es/Fundamentos/

autlos

No sabía que al final querías enfocar el primer post para ser una gran referencia. Creía que lo que querías era aprender java.

Añade estos, los cuales deberías leerte tú también (yo he mirado el primero, el segundo me han dicho que está bien):

http://www.etnassoft.com/biblioteca/desarrollo-de-proyectos-informaticos-con-tecnologia-java/

http://www.etnassoft.com/biblioteca/aprenda-java-como-si-estuviera-en-primero/

Y no olvides poner este enlace:
http://docs.oracle.com/javase/tutorial/

1 1 respuesta
Fyn4r

Esto también ayuda:
http://docs.oracle.com/javase/7/docs/api/

#28 el segundo está bastante bien, doy fe

PocketAccess

Una duda existencial que tengo, ¿cómo pronunciáis java?.

Java o "Yaba" ? ¿cuál es la correcta?.

1 respuesta

Usuarios habituales