Questao testkiller - classpath

package com.sun.scjp;

public class Commander {
publc static void main(String[] args) {
//more code here
}}

Assume that class file is located at /foo/com/sun/scjp/ and the current directory is /foo/ and thatt the classpath contains “.” (currente directory)

Which commmand line correctly runs Commander:

a) java Commander
b)java com.sun.scjp.Commander
c)java com/sun/scjp/Commander
d)java -cp com.sun.scjp Commander
e)java -cp com/sun/scjp Commander

Se alguem puder me dar uma dica! grato!

Eu marquei C, dai a resposta é B.
Dai testei aqui e B e C funcionaram!

Ja havia post sobre isto aqui:
http://www.guj.com.br/posts/list/81555.java#434145

então…quando vc vai compilar uma classe, vc manda compilar e separa os diretórios com \ ou / dependendo do seu SO… ok

nesse caso o a questão esta pedindo pra executar, para se executar uma classe, separa-se no padrão dojava separando por . (igul a declaração do package)

eu testei aki com uma estrutura de packages e classes minhas aki e deu noClassDefoundError se substituir os pontos por barras… não sei bem o q q vc fez ai… tb nao simulei esse exemplo

uma pegadinha pra se ficar atento a prova é tentar executar uma classe assim:

java Classe.class

assim o java.exe tenta encontrar um diretório Classe e uma classe chamada class dentro dele… não sei se era necessario avisar disso mais em todo caso o excesso de informação é melhor do q a falta…rs

Boa cara… eu não tinha me ligado que o compilador fazia isto eu apenas sabia que nao rodava! Mas é muito melhor entender o “porque”… valeu!!!

Bom, eu marcaria a letra c java com/sun/scjp/Commander que realmente funciona.
Depois testando as outras opções descobri que a letra b também é valida. java com.sun.scjp.Commander

Então chego a conclusão de que tanto faz executar a classe utilizando “.” ou “/”, o resultado é o mesmo.
Não sei alguém tem uma opnião diferente.

[quote=maior_abandonado]então…quando vc vai compilar uma classe, vc manda compilar e separa os diretórios com \ ou / dependendo do seu SO… ok

nesse caso o a questão esta pedindo pra executar, para se executar uma classe, separa-se no padrão dojava separando por . (igul a declaração do package)

eu testei aki com uma estrutura de packages e classes minhas aki e deu noClassDefoundError se substituir os pontos por barras… não sei bem o q q vc fez ai… tb nao simulei esse exemplo

uma pegadinha pra se ficar atento a prova é tentar executar uma classe assim:

java Classe.class

assim o java.exe tenta encontrar um diretório Classe e uma classe chamada class dentro dele… não sei se era necessario avisar disso mais em todo caso o excesso de informação é melhor do q a falta…rs[/quote]

Legal sua observação do java Classe.class.
Agora entendo pq não permite executar o comando java.exe junto a extensão da classe.

Gujando e aprendendo. rsrs :smiley:

vcs estão em algum *unix ai???

parece q esse comportamento de funcionar a execução usando a barra varia de versão pra versão do java, ou um java para determinado SO…

eu to com o windows xp, a JVM da sun 6 up 11, com o código colado dali de cima da thread…vejam:

D:\>javac com\sun\scjp\Commander.java

D:\>java com.sun.scjp.Commander

D:\>java com\sun\scjp\Commander
Exception in thread "main" java.lang.NoClassDefFoundError: com\sun\scjp\Commander (wrong name: com/sun/scjp/Commander)
        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)
Could not find the main class: com\sun\scjp\Commander.  Program will exit.

D:\>cd com

D:\com>tree/F
Lista de caminhos de pastas para o volume java
O número de série do volume é 000091A2 3C23:348C
D:.
└───sun
    └───scjp
            Commander.class
            Commander.java


D:\com>java com/sun/scjp/Commander
Exception in thread "main" java.lang.NoClassDefFoundError: com/sun/scjp/Commander
Caused by: java.lang.ClassNotFoundException: com.sun.scjp.Commander
        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)
Could not find the main class: com/sun/scjp/Commander.  Program will exit.

D:\com>

a execução não funciona com nenhuma das duas barras, ao menos não aqui…

amigão, mas vc tá usando contra-barra “”, tenta a barra normal “/”.

abraço.