2011-03-05 6 views
6

Cada programa de Java requiere la presencia de de al menos una clase.¿Todos los programas en Java requieren una clase?

¿La afirmación anterior es siempre cierta?

+2

Siempre es cierto, para core y enterprise Java y cualquier otro tipo también. – duffymo

+2

Necesita cargar objetos y cadenas antes de que pueda cargar un método mian (String []) vacío, que crea tres;) –

+1

@Peter: hay alrededor de 200 clases del paquete 'java. *'; ver mi respuesta actualizada –

Respuesta

20

Sí, necesita al menos una clase para tener un programa, pero no, no necesita ningún método (a diferencia de algunas otras respuestas).

La razón por la que necesita una clase es porque en Java, todo el código está dentro de las clases. Entonces para tener cualquier código, necesitas una clase. Sin embargo, el código no necesariamente tiene que estar en un método. También puede estar en inicializadores. Así pues, aquí es un programa Java completa sin métodos:

class LookMaNoMethods { 
    static { 
     System.out.println("Hello, world!"); 
     System.exit(0); 
    } 
} 

Y que da ...

$ javac LookMaNoMethods.java 
$ java LookMaNoMethods 
Hello, world! 
$ 

EDIT: De Java 7 el código anterior con el bloque sin movimiento y sin método principal no hace producir cualquier salida. El método principal ahora es obligatorio. Sin embargo, el código sin método principal compila con éxito.

+1

Interesante. Una clase con un inicializador estático es un programa válido, aunque no hay un método 'main', que luego se requiere si no hay un inicializador estático. Me pregunto qué dice el estándar exactamente sobre el requisito de un punto de entrada. –

+1

El bloque estático se implementa como un tipo especial de método interno (""). Al menos AFAIK. Pero todavía es una buena respuesta, nunca me di cuenta de que podrías comenzar un método sin main(), también ... Es bueno saberlo. – Boris

+5

Este programa funciona solo porque el inicializador estático invoca 'System.exit()' antes de que pueda mostrarse el mensaje de error sobre un método principal que falta. –

2

Sí. En Java siempre necesitas una clase con la función main para que JRE la ejecute.

+3

Esta no es la razón. Ruby también está orientado a objetos, pero no necesita ninguna clase. La razón es solo "porque". –

+0

Hmm Acepto que la implicación no es cierta. ¿Qué tal 'el sol lo quiere así?' /. – Konerak

+1

Groovy (obviamente construido encima de JVM) no requiere ninguna clase para ejecutarse. Pero el bytecode generado define las clases detrás de escena. –

6

Un programa requiere un punto de entrada. Un punto de entrada tiene que ser un método. En Java, todos los métodos deben estar contenidos en una clase.

Eso implicaría que cada programa debe tener al menos una clase.

+1

Esta es una respuesta muy razonable, pero "un punto de entrada tiene que ser un método" no es * completamente * verdadero. Vea mi respuesta para un punto de entrada que no es un método. – rlibby

6

Desde el punto de vista de la JVM; sí. Desde el punto de vista de un programador, puede ser una Clase o un Enum.

public enum AAA { 

    AAA; 

    public static void main(final String[] args) { 
     System.out.println("H"); 
    } 

} 

EDIT: Incluso si usted tiene una clase con el método principal de vacío, hay un montón de clases del núcleo que trabajan detrás de la escena a tan sólo ejecute la clase "vacío" de los suyos. Se puede ver una lista de esas clases (alrededor de 200 del paquete java.*) configurando el parámetro JVM -verbose:class.

+1

Las enumeraciones de Java son * extrañas *. –

+2

Pero un Enum es una clase: http://download.oracle.com/javase/1.5.0/docs/api/java/lang/Enum.html.La nueva palabra clave es azúcar sintáctica que oculta la palabra clave class. – duffymo

Cuestiones relacionadas