Empecé a estudiar Java.
Una parte me quedé atrapado es acerca de cómo crear y utilizar objetos que se originó a partir de otra clase.
Estructura de directorios:
/temp_dir/Java_code
Main.java
/java_db_code/
User_Table.java
Los códigos fuente son como éstos.
// File: /temp_dir/Java_code/Main.java
package temp_dir.java_code; // Package configuration of this java file
import temp_dir.java_code.java_db_code.User_Table; // import other class
public class Main
{
public static void main(String[] args)
{
int temp=5;
// Create obj_user_table object from User_Table class located in package of temp_dir.java_code.java_db_code.User_Table, through its int parameterized constructor
User_Table obj_user_table=new User_Table(temp);
System.out.println(obj_user_table);
// Expected: obj_user_table object
System.out.println(obj_user_table.user_a);
// Expected: 5
}
}
// File: /temp_dir/Java_code/java_db_code/User_Table.java
package temp_dir.java_code.java_db_code;
public class User_Table
{
public User_table(int a)
{
this.user_a=a;
}
}
correr
cd /temp_dir/Java_code
javac -d . Main.java ./java_db_code/User_Table.java
Error
./java_db_code/User_Table.java:22: error: invalid method declaration; return type required
public User_table(int a)
^
1 error
Escribí public User_table(int a)
en User_Table.java
que el constructor
Pero no sé por qué dice que el errorinvalid method declaration; return type required
Los nombres de método entre mayúsculas y minúsculas: User_table
no es lo mismo que User_Table
(aviso de la capital T). El constructor debe tener exactamente el mismo nombre que la clase, a fin de utilizar User_Table
.
Aún así, el compilador se quejará de una otra cosa una vez que arreglar eso: en el constructor que haces
this.user_a=a;
Pero user_a
no está declarado en su clase, lo que hará que el compilador emite un error. Para corregir esto, sólo hay que declararlo en la clase; ya que desea tener acceso al campo fuera de la clase (por ejemplo, en Main.main()
) lo convierten en public
:
public class User_Table
{
public int user_a;
public User_table(int a)
{
this.user_a=a;
}
}
Como recomendación, que realmente debería considerar las siguientes convenciones de nombres y estilo de Java: - Se debe utilizar más espacios en blanco: this.user_a = a
, int temp = 5
, obj_user_table = new
- Los nombres de clase utilizan el UpperCamelCase
, sin guiones: UserTable
- Método y nombres de variables utilizan el lowerCamelCase
, sin subrayados:userA
Esto no va a cambiar la funcionalidad del código, pero que hará que sea más fácil de leer y estándar para otros usuarios de Java.