Boar normas sobre classes

Boa notie senhores,
gostaria de tirar uma duvida.

Existe alguma norma sobre definir classe e main no mesmo arquivo ?
eu tenho declarodo assim:

arquivo Numeros.class

public class Numeros{
int 1,2,3;
}

Arquivo TrocaNumero.class

public class TrocaNumero{
public static void main(String args[]){
//invocacao de objetos e instancias//}
}

mas ai me surgiu a seguinte ideia que ao mesmo tempo fiquei na duvida se ja tinha lido sobre ela ou nao :S

tem algum problema fazer desse modo aqui:

public class Numeros{
int 1,2,3;
public static void main(String args[]){
//invocacoes e instancias…//
}
}

Desde ja agradeco a todos e desculpa se ela estiver meio baguncada :stuck_out_tongue:

sem problemas… mas fica muito bagunçado e seu código perderá a idéia de encapsulamento…
É preferível utilizar uma classe com o método MAIN separada. Assim seu código ficará mais fácil de depurar e encapsular seus atributos ou métodos.

Para código “Hello World” assim, não tem por que separar. Agora, em um sistema de verdade, tudo fica separado naturalmente.

hmmmm, valeu!

e me tirem otura duvida?
cada classe tem que ter um arquivo soh para ela certo ?
pois fiquei na duvida em declarar duas classes em um mesmo arquivo pois pdoeria conflitar com o nome do arquivo.
Deve fazer o que? separar classe por classe em arquivos ou uni-los?

Em Java, duas classes públicas tem que estar em arquivos diferentes.

Aliás, querer deixar tudo dentro de uma classe só é preguiça. Como disse, é natural que tudo vá se separando, cada objeto cuidando da própria vida.

Opa! show de bola valeu!
eu pensei que botando tudo denro do mesmo arquivo ocuparia menos espaco, tudo bem que nao eh nem 1 mega… mas ocuparia menos, mas de qualquer forma vou seguir as normas :smiley:

valeu obrigado!

[quote=pedrolima88]hmmmm, valeu!

e me tirem otura duvida?
cada classe tem que ter um arquivo soh para ela certo ?
pois fiquei na duvida em declarar duas classes em um mesmo arquivo pois pdoeria conflitar com o nome do arquivo.
Deve fazer o que? separar classe por classe em arquivos ou uni-los?[/quote]

Aproveitando a duvida do nosso amigo pedro eu pergunto: "SE EU DECLARAR DUAS CLASSES EM UM UNICO ARQUIVO, QUANDO COMPILAR NAO VAI DAR ERRO? kkkkkkk eis a questãooooooo

digo isso pq pelo que sei, cada arquivo deve ter o nome identico ao da classe, então se eu tiver duas clases com nomes distintos em um mesmo arquivo, isso vai gerar erro de compilação correto??

Vamos aguardar alguem mais graduado nos tirar esta duvida :slight_smile:

abraçooo t+

[quote=danilopelegrino][quote=pedrolima88]hmmmm, valeu!

e me tirem otura duvida?
cada classe tem que ter um arquivo soh para ela certo ?
pois fiquei na duvida em declarar duas classes em um mesmo arquivo pois pdoeria conflitar com o nome do arquivo.
Deve fazer o que? separar classe por classe em arquivos ou uni-los?[/quote]

Aproveitando a duvida do nosso amigo pedro eu pergunto: "SE EU DECLARAR DUAS CLASSES EM UM UNICO ARQUIVO, QUANDO COMPILAR NAO VAI DAR ERRO? kkkkkkk eis a questãooooooo

digo isso pq pelo que sei, cada arquivo deve ter o nome identico ao da classe, então se eu tiver duas clases com nomes distintos em um mesmo arquivo, isso vai gerar erro de compilação correto??

Vamos aguardar alguem mais graduado nos tirar esta duvida :slight_smile:

abraçooo t+

[/quote]

Testa este código e depois me diga o que aconteçeu:

Contatos.java

package org.wss;


class Cliente1 {

    private String nome;

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }
}
class Cliente2 {

    private String nome2;

    public String getNome2() {
        return nome2;
    }

    public void setNome2(String nome2) {
        this.nome2 = nome2;
    }
}
class Testa{
    public static void main(String [] args){
        Cliente1 c1 = new Cliente1();
        Cliente2 c2 = new Cliente2();
        
        c1.setNome("Absolon de Jesus Souza");
        c2.setNome2("Guilhermina Bostanssa");
        
        System.out.println("Cliente1: " + c1.getNome());
        System.out.println("Cliente2: " + c2.getNome2());
    }
}

[quote=wswillianss][quote=danilopelegrino][quote=pedrolima88]hmmmm, valeu!

e me tirem otura duvida?
cada classe tem que ter um arquivo soh para ela certo ?
pois fiquei na duvida em declarar duas classes em um mesmo arquivo pois pdoeria conflitar com o nome do arquivo.
Deve fazer o que? separar classe por classe em arquivos ou uni-los?[/quote]

Aproveitando a duvida do nosso amigo pedro eu pergunto: "SE EU DECLARAR DUAS CLASSES EM UM UNICO ARQUIVO, QUANDO COMPILAR NAO VAI DAR ERRO? kkkkkkk eis a questãooooooo

digo isso pq pelo que sei, cada arquivo deve ter o nome identico ao da classe, então se eu tiver duas clases com nomes distintos em um mesmo arquivo, isso vai gerar erro de compilação correto??

Vamos aguardar alguem mais graduado nos tirar esta duvida :slight_smile:

abraçooo t+

[/quote]

Testa este código e depois me diga o que aconteçeu:

Contatos.java

[code]
package org.wss;

class Cliente1 {

private String nome;

public String getNome() {
    return nome;
}

public void setNome(String nome) {
    this.nome = nome;
}

}
class Cliente2 {

private String nome2;

public String getNome2() {
    return nome2;
}

public void setNome2(String nome2) {
    this.nome2 = nome2;
}

}
class Testa{
public static void main(String [] args){
Cliente1 c1 = new Cliente1();
Cliente2 c2 = new Cliente2();

    c1.setNome("Absolon de Jesus Souza");
    c2.setNome2("Guilhermina Bostanssa");
    
    System.out.println("Cliente1: " + c1.getNome());
    System.out.println("Cliente2: " + c2.getNome2());
}

}
[/code][/quote]

Compilou normal, porem ao executar apresentou o seguinte erro:

Exception in thread “main” java.lang.NoClassDefFoundError: Testa (wrong name: or
g/wss/Testa)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$000(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClassInternal(Unknown Source)

Acho que fiz algo errado kkkkkkk O nome da classe tem que ser Testa.java??

A regra é essa: Um arquivo Java deve ter no máximo uma única classe pública e, se for esse o caso, de nome igual ao do arquivo.

Isso também quer dizer que ele pode ter quantas classes você quiser, desde que as demais não sejam públicas.
E também quer dizer que você não é obrigado a ter uma classe pública.

Faz o seguinte, escreva public antes da classe Testa do exemplo anterior e renomeie o arquivo para Testa.java

Deve compilar e rodar normalmente.

Agora, via de regra, é uma boa prática deixar classes em arquivos separados. Geralmente, quando há a necessidade de juntar duas classes num mesmo arquivo, é muito provável que uma classe possa se tornar inner class da outra.

desculpe eu esquecir de colocar o public na frente do Testa e mudar o nome do arquivo para Testa

[quote=ViniGodoy]A regra é essa: Um arquivo Java deve ter no máximo uma única classe pública e, se for esse o caso, de nome igual ao do arquivo.

Isso também quer dizer que ele pode ter quantas classes você quiser, desde que as demais não sejam públicas.
E também quer dizer que você não é obrigado a ter uma classe pública.

Faz o seguinte, escreva public antes da classe Testa do exemplo anterior e renomeie o arquivo para Testa.java

Deve compilar e rodar normalmente.

Agora, via de regra, é uma boa prática deixar classes em arquivos separados. Geralmente, quando há a necessidade de juntar duas classes num mesmo arquivo, é muito provável que uma classe possa se tornar inner class da outra.[/quote]

é por isso que eu gosto desse forum heheeh Gente inteligente e disposta a lhe dar as respostas corretas.

vVlw mesmo Vini excelente explicação :slight_smile: abraçooooooooo fuiiii