Questão sobre o cap 10 da Kathy

11 respostas
sammaraAdriana

Pessoal, esse capítulo não entra na minha cabeça... Será que alguém poderia me explicar esse código?

Muito obrigada.

A UNIX user named Bob wants to replace his chess program with a new one, but he is
not sure where the old one is installed. Bob is currently able to run a Java chess program
starting from his home directory /home/bob using the command:
java -classpath /test:/home/bob/downloads/*.jar games.Chess

Bob's CLASSPATH is set (at login time) to:
/usr/lib:/home/bob/classes:/opt/java/lib:/opt/java/lib/*.jar
What is a possible location for the Chess.class file?

A. /test/Chess.class
B. /home/bob/Chess.class
C. /test/games/Chess.class
D. /usr/lib/games/Chess.class
E. /home/bob/games/Chess.class
F. inside jarfile /opt/java/lib/Games.jar (with a correct manifest)
G. inside jarfile /home/bob/downloads/Games.jar (with a correct manifest)

11 Respostas

sammaraAdriana

Outra:

A developer is creating a class Book, that needs to access class Paper. The Paper class is
deployed in a JAR named myLib.jar. Which three, taken independently, will allow the
developer to use the Paper class while compiling the Book class? (Choose three.)

A. The JAR file is located at $JAVA_HOME/jre/classes/myLib.jar.
B. The JAR file is located at $JAVA_HOME/jre/lib/ext/myLib.jar..
C. The JAR file is located at /foo/myLib.jar and a classpath environment variable is set
that includes /foo/myLib.jar/Paper.class.
D. The JAR file is located at /foo/myLib.jar and a classpath environment variable is set
that includes /foo/myLib.jar.
E. The JAR file is located at /foo/myLib.jar and the Book class is compiled using javac -
cp /foo/myLib.jar/Paper Book.java.
F. The JAR file is located at /foo/myLib.jar and the Book class is compiled using javac -d
/foo/myLib.jar Book.java
G. The JAR file is located at /foo/myLib.jar and the Book class is compiled using javac -
classpath /foo/myLib.jar Book.java
R

Eai conseguiu entender ?

100 viram a duvida e ninguém respondeu nada…

Eu não sei te explicar a respeito ! :smiley:

douglas_vidotto

oi Sammara, só me confirma as respostas pra ver se não vou falar bobagem, hehehe. As respostas são:

Primeira Pergunta - Letra G

Segunda Pergunta - A, D e G

É isso?

alias

Hm…

Ambas as questões são a respeito do Classpath (mas isso voce já sabe, hehe), e de que forma as classes serão encontradas durante a compilação/execução do programa.

No primeiro exemplo, é mostrado que a variavel de ambiente CLASSPATH está definida para determinados diretórios, porém o comando java foi executado com o parametro -classpath,
que sobrescreve a variavel de ambiente. Portanto, para essa execução em específico, o classpath será: /test:/home/bob/downloads/*.jar. O que isso significa? Que os arquivos
constantes nesses diretorios ( : é um separador no unix, no Windows seria ; ) estarão visíveis para a VM. Portanto creio que as respostas seriam:

A -> (INCORRETA) (o arquivo Chess.class existe, mas não coincide com games.Chess)

B -> (INCORRETA) (esse diretorio nao está no classpath da execução)

C -> (CORRETA) (repare que a classe executada é games.Chess. O diretorio /test está no classpath e a estrutura do diretorio coincide com games.Chess (nome do pacote deve coincidir com a estrutura dos diretorios))

D -> (INCORRETA) (pelo mesmo motivo que B. Repare que esse diretorio está na variavel de ambiente CLASSPATH, mas a variavel foi desconsiderada em função do parametro -classpath)

E -> (INCORRETA) (mesmo motivo que B)

F -> (INCORRETA) (esse jar nao nao está no classpath, pelo mesmo motivo que a opção D)

G -> (INCORRETA) (repare no parametro passado para o classpath: /home/bob/downloads/*.jar. Não é permitido selecionar todos os arquivos JAR de um diretorio dessa maneira, com o * (o Java6 permite de uma forma um pouco diferente). Portanto, esse jar tambem nao está no classpath)

No segundo exemplo, o cenário é a compilação do programa, que envolve as mesmas questões de classpath

A -> (INCORRETA) (esse diretorio, ainda que exista, não é incluído no classpath)

B -> (CORRETA) (todos os jars incluidos em $JAVA_HOME/jre/lib/ext/ estarão no classpath da compilação/execução, sempre. é um diretorio que serve para voce incluir qualquer jar que queira que esteja no classpath de qualquer execução  na sua maquina)

C -> (INCORRETA) (a variavel de ambiente CLASSPATH deve indicar diretorios e/ou arquivos JARs, não um .class específico dentro de um jar)

D -> (CORRETA) (a variavel de ambiente CLASSPATH foi definida corretamente para incluir o JAR que contem o class necessario)

E -> (INCORRETA) (mesmo motivo de C. Repare que ele passa no comando javac o parametro -cp, que é a mesma coisa que o parametro -classpath)

F -> (INCORRETA) (uma pegadinha. repare que ele passa o JAR no parametro -d. esse parametro serve para determinar o destino do seu arquivo class compilado, e nao para definir o classpath)

G -> (CORRETA) (o jar que contem a classe necessaria foi passado corretamente no parametro -classpath)

Espero ter ajudado, e espero ter acertado tambem :lol: . Duvidas poste aí!

douglas_vidotto

Opa…falha minha. Na segunda eu vi a B e acabei colocando a questão A por engano na resposta (as classes padrão do Java ficam dentro de /lib e nao em /classes).

alias

Exato. A pasta $JAVA_HOME/jre/lib/ext serve para voce incluir qualquer jar que queira no classpath padrão, mas sem misturar com os jars do proprio Java (que estão na pasta $JAVA_HOME/jre/lib)

sammaraAdriana

douglas_vidotto:
oi Sammara, só me confirma as respostas pra ver se não vou falar bobagem, hehehe. As respostas são:

Primeira Pergunta - Letra G

Segunda Pergunta - A, D e G

É isso?

A primeira é C e a segunda é BDG.

Valeu.

sammaraAdriana

alias:
Hm…

Ambas as questões são a respeito do Classpath (mas isso voce já sabe, hehe), e de que forma as classes serão encontradas durante a compilação/execução do programa.

No primeiro exemplo, é mostrado que a variavel de ambiente CLASSPATH está definida para determinados diretórios, porém o comando java foi executado com o parametro -classpath,
que sobrescreve a variavel de ambiente. Portanto, para essa execução em específico, o classpath será: /test:/home/bob/downloads/*.jar. O que isso significa? Que os arquivos
constantes nesses diretorios ( : é um separador no unix, no Windows seria ; ) estarão visíveis para a VM. Portanto creio que as respostas seriam:

A -> (INCORRETA) (o arquivo Chess.class existe, mas não coincide com games.Chess)

B -> (INCORRETA) (esse diretorio nao está no classpath da execução)

C -> (CORRETA) (repare que a classe executada é games.Chess. O diretorio /test está no classpath e a estrutura do diretorio coincide com games.Chess (nome do pacote deve coincidir com a estrutura dos diretorios))

D -> (INCORRETA) (pelo mesmo motivo que B. Repare que esse diretorio está na variavel de ambiente CLASSPATH, mas a variavel foi desconsiderada em função do parametro -classpath)

E -> (INCORRETA) (mesmo motivo que B)

F -> (INCORRETA) (esse jar nao nao está no classpath, pelo mesmo motivo que a opção D)

G -> (INCORRETA) (repare no parametro passado para o classpath: /home/bob/downloads/*.jar. Não é permitido selecionar todos os arquivos JAR de um diretorio dessa maneira, com o * (o Java6 permite de uma forma um pouco diferente). Portanto, esse jar tambem nao está no classpath)

No segundo exemplo, o cenário é a compilação do programa, que envolve as mesmas questões de classpath

A -> (INCORRETA) (esse diretorio, ainda que exista, não é incluído no classpath)

B -> (CORRETA) (todos os jars incluidos em $JAVA_HOME/jre/lib/ext/ estarão no classpath da compilação/execução, sempre. é um diretorio que serve para voce incluir qualquer jar que queira que esteja no classpath de qualquer execução  na sua maquina)

C -> (INCORRETA) (a variavel de ambiente CLASSPATH deve indicar diretorios e/ou arquivos JARs, não um .class específico dentro de um jar)

D -> (CORRETA) (a variavel de ambiente CLASSPATH foi definida corretamente para incluir o JAR que contem o class necessario)

E -> (INCORRETA) (mesmo motivo de C. Repare que ele passa no comando javac o parametro -cp, que é a mesma coisa que o parametro -classpath)

F -> (INCORRETA) (uma pegadinha. repare que ele passa o JAR no parametro -d. esse parametro serve para determinar o destino do seu arquivo class compilado, e nao para definir o classpath)

G -> (CORRETA) (o jar que contem a classe necessaria foi passado corretamente no parametro -classpath)

Espero ter ajudado, e espero ter acertado tambem :lol: . Duvidas poste aí!

Muito obrigada pela ajuda.
E você acertou sim.

Valeu.

sammaraAdriana

RodrigoM91:
Eai conseguiu entender ?

100 viram a duvida e ninguém respondeu nada…

Eu não sei te explicar a respeito ! :smiley:

Eu já tinha perdido as esperanças… Mas estava tentando colocar na minha cabeça com a ajuda da Kathy…

alias

sammaraAdriana:
alias:

Espero ter ajudado, e espero ter acertado tambem :lol: . Duvidas poste aí!

Muito obrigada pela ajuda.
E você acertou sim.

Valeu.

Beleza. No caso de ainda estar com duvidas, poste ai que a gente tenta ajudar. :wink:

giselezr

Pessoal, sei que estou ressuscitando o tópico, mas sera que alguém pode me ajudar nesta…

1. package com.company.application;
2.
3. public class MainClass {
4. public static void main(String[] args) { }
5. }
And MainClass exists in the /apps/com/company/application directory.
Assume the CLASSPATH environment variable is set to ?.? (current
directory). Which two java commands entered at the command line
will run MainClass? (Choose two.)
A. java MainClass if run from the /apps directory
B. java com.company.application.MainClass if run from the /apps
directory
C. java -classpath /apps com.company.application.MainClass if run
from any directory
D. java -classpath . MainClass if run from the
/apps/com/company/application directory
E. java -classpath /apps/com/company/application:. MainClass if run
from the /apps directory
F. java com.company.application.MainClass if run from the
/apps/com/company/application directory
Answer: BC

eu realmente não consegui entender…

Criado 10 de janeiro de 2012
Ultima resposta 11 de jan. de 2013
Respostas 11
Participantes 5