¿Hay alguna forma de compilar un programa java sin tener el nombre del archivo java con su nombre de clase base?¿Puedo compilar un archivo java con un nombre diferente al de la clase?
Si es así, por favor explique ..
¿Hay alguna forma de compilar un programa java sin tener el nombre del archivo java con su nombre de clase base?¿Puedo compilar un archivo java con un nombre diferente al de la clase?
Si es así, por favor explique ..
Su nombre de archivo Java siempre debe reflejar la clase pública definida dentro de ese archivo. De lo contrario, obtendrá un error de compilación. Por ejemplo, test.java:
public class Foo {}
intentar compilar esto da:
[[email protected]:~]% javac test.java
test.java:1: class Foo is public, should be declared in a file named Foo.java
public class Foo {
^
1 error
lo que debe tener el nombre del archivo coincide con el nombre de la clase pública, que parece hacer que su cuestión discutible. O eso o no entiendo lo que estás preguntando ... dedicar algo de tiempo a explicar lo que realmente estás tratando de lograr sería un gran paso para hacer una pregunta más efectiva :)
Gracias .... eres exactamente rit ..... Sé que tengo que guardar el archivo con el nombre de la clase pública para compilarlo ...... pero ¿es posible no hacer esto y compilar el archivo del programa java con suma otro nombre en él ..... – Hulk
No. El compilador no le permitirá. Por favor, no intente eludir esta restricción, como otros lo han mencionado, es muy bueno que Java lo requiera. Si está tratando de lograr algún objetivo específico, si explica más acerca de lo que está tratando de lograr, podríamos sugerir métodos alternativos. –
Si desea que su programa tenga un nombre determinado, debe cambiar el nombre de su clase o crear una nueva clase que ejecutará el programa. – FloppyDisk
Creo que lo que quiere decir es el archivo .java se llama de manera diferente a la clase real definida en su interior.
Supongo que esto no es posible.
No, el nombre de la clase pública debe coincidir con el nombre del archivo. Los nombres de clase internos, no públicos, pueden diferir.
Debe tener una clase pública con el mismo nombre que el nombre del archivo. Esta es una cosa muy buena. PUEDE tener clases secundarias dentro del mismo archivo, siempre que no sean públicas. Sin embargo, aún pueden ser "predeterminados", por lo que aún pueden ser utilizados por otras clases en el mismo paquete.
Esto no se debe hacer en su mayor parte. Los patrones de nomenclatura de Java con respecto a clases y paquetes son una de las mayores ventajas que tiene: hace que la vida de los programadores sea más sencilla y sin costo.
No. Puedes escribir un shell script para cambiar el nombre del archivo .java antes de compilarlo, pero javac requiere que filenames = class names.
(también en las ventanas, que es sensible a mayúsculas, por lo ASDF.java puede compilar Asdf.class)
Puede utilizar la API de Java Compilar y la compilación de cualquier fuente de Java que desea, la fuente no es necesario que provienen de un archivo o podría provenir de un archivo con un nombre no relacionado. Depende de cuán obtuso quieras desarrollar tu programa. ;)
Algunos ejemplos: http://stackoverflow.com/questions/12173294/compile-code-fully-in-memory-with-javax-tools-javacompiler – Vadzim
Parece que la API de compilación de Java requiere que el nombre de clase se especifique antes de la compilación. Por lo tanto, no se puede usar para determinar el nombre de clase de la fuente en caso de que el nombre de archivo sea incorrecto. – Vadzim
@Vadzim correcto, aunque esa no es la pregunta. –
sí, puede elegir cualquier nombre para el archivo (.java). no importa cuál sea el nombre de las clases en ese archivo significa que los nombres de clase pueden ser totalmente diferentes del nombre del archivo. debe compilar el programa con el nombre de archivo y debe ejecutar el programa con el nombre de clase en el que existe el método principal. métodos principales pueden ser múltiples en diferentes clases por lo que debe funcionar con el nombre de la clase en la que el método principal que desea ejecutar ......
Si te entendí correctamente, estás equivocado, pero tal vez un ejemplo sería útil para aclarar las cosas. – Till
como sé que no estoy equivocado. por ejemplo, cree un archivo sample.java con la clase de codificación A {public static void main (String args []) {String str = {""}; System.out.println ("hola"); B.main (str); }} clase B {public static void main (String args []) {System.out.println ("hello"); }} ahora lo compila como javac sample.java y se ejecuta como java A y la salida será hola Hola – ved
Para responder a la pregunta echar un vistazo a este ejemplo:
Crea un archivo de muestra.java
class A
{
public static void main(String args[])
{
String str[] = {""};
System.out.println("hi");
B.main(str);
}
}
class B
{
public static void main(String args[])
{
System.out.println("hello");
}
}
ahora se compila como javac Sample.java
y se ejecuta como java A
entonces la salida será
hi
hello
o se corre como java B
entonces la salida será hello
en cuenta que ninguna de las las clases están marcadas como public
por lo que les da acceso a default
. Los archivos sin clases públicas no tienen restricciones de nomenclatura de archivos.
Esto funciona porque ni 'A' ni 'B' son clases públicas. Si A fuera, tendría que definirse en A.java. – DoctorRuss
Nice one ............ – Hulk
Nice answer. Sin embargo, ahora es imposible acceder a ellos desde otros paquetes, porque ya no son públicos: (((( –
podemos guardar el nombre diferente del nombre de la clase del archivo tootle porque en java compilamos el programa pero ejecutamos el método. tenemos que compilar nuestro programa con nombre de archivo y ejecutar nuestro nombre de clase
) Haga un comentario. – cereallarceny
Sí, es posible compilar un archivo fuente java con un nombre de archivo diferente, pero debe asegurarse de que ninguna de las clases definidas en el interior sea pública. .cuando compila el archivo fuente, se crean los archivos .class correspondientes para las clases dentro del archivo fuente.
¿Puede proporcionar un ejemplo simple de cómo hacer esto? ¡Los ejemplos siempre son algo bueno! –
Sí, puede guardar su archivo de código fuente java con cualquier otro nombre, no el mismo que el nombre de su clase principal, pero cuando lo codifique, el nombre del archivo de código de bytes será el mismo que el nombre de su clase principal. Por lo tanto, para su facilidad de no memorizar muchos nombres para la ejecución de código Java, debe tener su nombre de archivo igual que su clase principal que solo su nombre de archivo y el archivo de código de bytes tendrán el mismo nombre.
Siempre y cuando no tenga una clase pública en su archivo de origen, puede asignarle un nombre al archivo de origen y compilarlo. Pero, si tiene una clase pública en su archivo de origen, ese archivo debe tener el mismo nombre que su nombre de clase. De lo contrario, el compilador lanzará un error.
Ejemplo:
Nombre del archivo: TestFileName.java
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello,World\n");
}
}
Compilación: javac TestFileName.java
error:
TestFileName.java:1: class HelloWorld is public, should be declared in a file named HelloWorld.java
public class HelloWorld
^
1 error
sí, que compila un archivo de Java con un nombre diferente al de la clase, con la condición que no debería haber ninguna clase pública en ese archivo.
Si hay alguna clase pública en el archivo, entonces en ese caso, debe dar ese nombre como nombre de archivo. Pero si su clase no contiene ninguna clase pública, entonces puede dar cualquier nombre a su clase.
Por favor refiérase a continuación ejemplo para que sea más claro: nombre
archivo: sample.java
class A
{
public static void main(String args[])
{
System.out.println("hi in Class A");
}
}
class B
{
public static void main(String args[])
{
System.out.println("hello in class B");
}
}
luego compilarlo con (Windows): muestra javac.java
luego ejecutarlo: java Una salida
: Hola en la Clase A
luego ejecutarlo: java B
de salida: hola en la clase B
Por favor, comprobar y confirmar.
Si la clase no es pública, puede guardarla usando otro nombre como si nombre de clase es Simple y guárdela Hard.java. complie-> Hard.java ejecutar-> Simple.java Guarde su archivo java por .java solamente. compilación javac .java de ejecución de Java yourclassname Por ejemplo, si mi nombre de la clase principal del programa es A continuación, parada de .java única
de compilación javac .java
dirigido por java Un
sí, podemos elaborar una archivo java con un nombre diferente al de la clase, siempre que no haya ninguna clase pública en ese archivo.
Si hay clase pública en el archivo, entonces en ese caso debe dar ese nombre como nombre de archivo. Pero si su clase no contiene ninguna clase pública, puede dar cualquier nombre a su clase.
Por favor refiérase a continuación ejemplo para que sea más claro:
nombre de archivo: example.java
class A
{
public static void main(String args[])
{
System.out.println("You are in Class A");
}
}
class B
{
public static void main(String args[])
{
System.out.println("You are in class B");
}
}
luego compilarlo con: javac example.java
luego ejecutarlo: java A
output : you are in Class A
luego ejecútelo: java B
output : you are in class B
Compruebe y confirme.
Puede escribir más de un método principal en Java porque Java proporciona una sobrecarga de método principal en la que el método principal también puede estar sobrecargado. Una vez que compile el archivo aquí example.java El compilador crea el archivo .class que contiene el método principal cuando ejecuta el archivo con java A ejecutará el archivo A.class que contiene el método principal de la clase A y esa salida se mostrará en que la pantalla, pero cuando se ejecuta este archivo con java B, se ejecuta el archivo que proporciona B.class principal método de la clase B Así que su código se ejecuta con éxito
de acuerdo con las otras respuestas, la única solución viable es somehow determine the classname from the source , luego úselo para cambiar el nombre del archivo a su nombre y compilarlo como de costumbre.
Sí. Esto puede hacerse.
La razón principal para que la clase y el nombre de archivo sean los mismos es hacer que el trabajo del compilador sea fácil de verificar qué clase necesita ejecutar, en la lista completa de las clases de Java.
Por lo tanto, es una buena práctica tener el nombre de archivo y el nombre de clase como iguales.
Y ha compilado y ejecutado una clase con un nombre diferente al nombre del archivo, si no tiene ningún método público en esta clase.
No entiendo lo que quieres decir. ¿Qué estás intentando lograr? –
¿Por qué querrías hacer eso? En una nota lateral, si quieres que tu aplicación tenga un nombre y tu clase principal tenga otra, siempre puedes empaquetarla en un archivo jar. – Buhb
Lo siento, quise decir el nombre de la clase pública .... No quiero guardar el archivo con este (nombre de clase pública) para compilar el programa ...... ¿Es esto posible ... – Hulk