¿Constructores en el método main en Java? – java poo

Pregunta:


Estoy viendo un pequeño código el cual tiene el propósito de crear un software para crear un cliente y un agregarle el sueldo, etc., pero he visto y me han comentando que es incorrecto agregar el método constructor en el método main sino en la clase donde construyo todo los métodos, propiedades, etc.

¿Qué opinan?

Mi código:

public class HolaMundo{    
    public static void main(String[]args) {   
    }
}    

La otra clase es esta:

public class Metodos {
    public int id;
    public String nombre;
    public float pago;

    public Metodos() {
        this.int
        //ETC
    }
}

¿Es posible agregar el constructor en un método main o deberías agregar el método constructor en la otra clase?

Preguntado por: simon

1) Un constructor es una función como una forma especial de un método(1) inicial para construir un objeto según las especificaciones de una clase:

  • El constructor en Java tiene exactamente el mismo nombre de la clase, y no define ningún resultado.
  • El constructor se llama con la palabra clave new para instar un nuevo objeto de tipo “clase”.
  • Se puede definir más que un constructor con diferentes argumentos.

2) Métodos (y constructores) se definen en el cuerpo de la clase, pero nunca directamente adentro de otros métodos.

3) main(String... args) es un método, precisamente un método estático.
Aparte de servir como punto de entrada arrancando un programa es como cualquier otro método estático. La diferencia es que el método main permite recibir argumentos desde afuera de la maquina virtual.

Conclusión

Resumiendo estos hechos, queda claro que un constructor no se puede definir directamente en un método (ni main, ni otro).

Para aclarar un poco más la estructura donde se puede definir un constructor y donde no, un poco más información sobre clases:

Una definición de una clase siempre sigue el mismo patrón, y se hace fuera de código ejecutable:

 // declaración de la clase
 public class MiClase{

      // cuerpo de la clase

      // declaración de campos y métodos

      // campo
      private int indice = 0;

      // el constructor es un caso especial de un método:
      public MiClase(int arg){
           indice = arg;
      }

      // método
      public int getIndice(){
           return indice;
      }
 }

Las únicas clases que se definen dentro de código ejecutable son clases anónimas (más información encuentras en ¿para que sirvan las clases anónimas en Java?):

 public Listener getListener(){
      return new Listener(){

           @Override
           public void onEvento(Event e){
               // reacciona al evento
           }
       };
 }

En síntesis, la definición de una clase puedes hacer:

  • En un archivo propio con el nombre de tu clase y extensión .java

  • Dentro del cuerpo de otra clase, pero fuera de métodos (una clase interior)

  • Dentro del código donde instas una objeto con new como clase anónima, normalmente basado en una interfaz

Te recomiendo este articulo para obtener una idea de que se trata la POO (programación orientado a objetos) en Java.

(1) Explicación hacía de la comparación de los constructores con métodos: Aun que el constructor es un método en el sentido de un modo de obrar o proceder, formalmente no es un método según la definición del lenguaje Java. En algunos lenguajes de programación el constructor (tal cual como el destructor) se consideran casos especiales de funciones o métodos y tienen más o menos características en común con funciones o métodos regulares. Para evitar discusiones dogmáticas quiero aclarar: Es una forma simple y común de describir un constructor como un caso especial de un método, sin embargo formalmente y técnicamente no lo es por una cantidad de diferencias importantes.

Puedes mandar llamar el método constructor desde un método main, pero no puedes crearlo dentro de un método main ya que en todo caso lo estarías sobrecargando.

El constructor, lo declares o no, existe; si lo declaras, evidentemente tiene que ser un método de la clase, no un método de otro método.

Hola la gracia es que el método main solo sea el punto de entrada hacia tu aplicación y desde ahí llames a tus clases y metodos, tu clase Metodos se Debiese llamar Empleado ya que eso es lo que representa debe quedar algo asi :

   public class Empleado {
// los atributos de la clase deben ser privados y su contenido debe ser
// accedido por metodos publicos
// **Principio de Encapsulacion**
private int id;
private String nombre;
private float pago;

// constructor vacio, sin parametros
public Empleado() {
    id = 0;
    nombre = "";
    pago = 0f;// los valores float deben llevar la letra ( f ) al final
}

// constructor con parametros
public Empleado(int id, String nombre, float pago) {
    this.id = id;
    this.nombre = nombre;
    this.pago = pago;
}

public int getId() {
    return id;
}

public void setId(int id) {
    this.id = id;
}

public String getNombre() {
    return nombre;
}

public void setNombre(String nombre) {
    this.nombre = nombre;
}

public float getPago() {
    return pago;
}

public void setPago(float pago) {
    this.pago = pago;
}

}

y luego tu metodo main : el cual puedes pegar en cualquier clase

    public static void main (String [] args)
{
    Empleado empleado1 = new Empleado();
    empleado1.setId(5);
    empleado1.setNombre("pepito");
    empleado1.setPago(150.000f);

    Empleado empleado2 = new Empleado(5, "pedro", 150.000f);

    //informacion empleado 1 
    System.out.println("empleado 1  ID: " + empleado1.getId() + " Nombre : " + empleado1.getNombre()+" Pago : " + empleado1.getPago());
    //informacion empleado 2 
    System.out.println("empleado 2  ID: " + empleado2.getId() + " Nombre : " + empleado2.getNombre()+" Pago : " + empleado2.getPago());


} 

Fuente

Related Posts:

Several c-lick language editor extensions for laravel-admin based on code-mirror
...
PHP Java bridge server tools
...
Soluble PHP Java bridge integration
...
Create Reports in PHP with JasperReports
...
YUI Compressor is an open source tool that supports the compression of both JavaScript and CSS files. The JavaScript compression removes comments and white-spaces as well as obfuscates local variables using the smallest possible variable name. CSS compression is done using a regular-expression-based…
...
Tomcat no encuentra los recursos – java angularjs http
Pregunta: Bueno tengo una aplicación con AngularJS que hace peticiones al API de gitHub como un ejemplo para aprender a usar AngularJS, pero el problema ...
Crear cuenta regresiva N segundos mientras se visualiza una Activity en Android – java android
Pregunta: Quiero implementar una cuenta regresiva de N segundos, que se inicie cuando la Activity se muestre, se pare el contador cuando el usuario decide ...
¿Es legal leer imágenes y descripciones de otro sitio web y ponerlas en mi app? – java woocommerce
Pregunta: ¿Es legal leer imágenes y descripciones de otro sitio web y ponerlas en mi programa? Supongamos que quiero hacer una aplicación como la de ebay, ...
Problema con consulta JPQL + JPA + JSF + EJB – java jsf jpa
Pregunta: @Override public Usuario iniciarSesion(Usuario us){ Usuario usuario = null; String consulta; try { ...
No encuentra el audio dentro de src – java
Pregunta: Tengo una carpeta "audios" dentro de "src", para cuando construya el proyecto pueda reproducir los audios. Intento abrir el audio pero me salta "java.lang.NullPointerException" ...
¿Como saber con Apache POI y java si una columna en excel esta oculta? – java apache-poi
Pregunta: Hola estoy importando archivos excel con extensión xls y xlsx pero mi duda es como poder detectar si la columna de una celda esta ...
Spinner y EditText – java android
Pregunta: Tengo este código para cargar un spinner con datos de una base de datos: private class Getfrutas extends AsyncTask<Void, Void, Void> { ...
¿Cómo enviar datos de una pagina JSP a un Servlet sin un form? – java jsp java-ee
Pregunta: Tengo un problema. No logro recibir un valor por GET en el Servlet, no se por qué. Aquí el código JSP: <html> ...
Ayuda con un Calendario en Linea de Codigo – java
Pregunta: Pues se supone que mi código debería imprimir en algunos meses 31 días según una de mis condiciones pero no lo hace de hecho ...
¿ Por qué se me detiene la aplicación al usar este pequeño código? – java android bottombar
Pregunta: Tengo un bottomBar donde tengo 5 opciones, la última es la del mapa de google API. Mi problema es que al hacer click en ...
Tags:,

Add a Comment

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *