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
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.