Buscar

pc2-aula2-perguntas

Prévia do material em texto

Programação de Computadores II - Prof. Senne 
Aula 2: Fundamentos da Linguagem Java - Perguntas & Respostas 
 
 
1. Há uma quantidade limite de campos que um objeto pode ter? 
Não. Uma classe pode definir quantos campos forem necessários. 
 
2. No laboratório, nós usamos a sintaxe "Empresa x = new Empresa()" para acessar os dados 
da classe Empresa. Entretanto, nós também usamos a sintaxe "Scanner s = new Scanner()" 
no método main() para que o usuário pudesse digitar os valores dos campos. De onde vem 
o "Scanner"? Na classe principal, onde há o método main(), pode ocorrer de ter outros 
métodos além dele ou é uma classe criada apenas para o "main()"? 
Scanner é uma classe da Java API, disponível para ser usada. Na classe principal, além do 
método main(), podem existir outros métodos. 
 
3. Como funciona "Scanner s = new Scanner(System.in)"? Cria um objeto s da classe 
Scanner ou apenas armazena o que foi inserido pelo usuário em "s"? 
Cria um objeto s da classe Scanner. Por meio deste objeto, tem-se acesso aos métodos da 
classe, que é no fim o que interessa. Por exemplo, para ler um valor inteiro usamos o método 
nextInt(). A chamada a este método é feita por meio de um objeto da classe Scanner. Por isso 
escrevemos: s.nextInt(). 
 
4. Como funciona a alocação de memória para uma variável de referência? É sempre um 
processo "automático" quando utilizamos o operador new? 
Sim, é um processo automático quando utilizamos o operador new. Na linguagem Java, a 
alocação de memória é feita sempre automaticamente, diferentemente da linguagem C, que 
dispõe de algumas funções (como calloc() e malloc()) para alocar memória e outras para 
liberar memória (como free()). 
 
5. Se eu precisar utilizar um método dentro de outro método, mesmo sendo na mesma classe, 
precisaria declarar um objeto no método? A ordem de declaração dos métodos iria 
interferir? Há alguma utilizade de declarar mais de um objeto para a mesma classe? 
Não. Para usar algum método de uma classe dentro de outros métodos da mesma classe não 
é preciso criar um objeto. Na verdade, dentro de uma classe existe um objeto criado 
automaticamente, denominado "this". Assim, a chamada de um método xXXX() dentro de uma 
classe é feita automaticamente por este objeto, ou seja, this.xXXX(). O objeto "this" significa 
"um objeto desta classe" e, se não for escrito explicitamente pelo programador, será 
automaticamente incluído pelo compilador Java. Em Java, os métodos de uma classe podem 
ser escritos em qualquer ordem. A utilidade em declarar vários objetos de uma mesma classe 
está em armazenar diferentes valores para os campos. Cada objeto tem os seus próprios 
valores para os campos. 
 
6. A conversão de tipos tem alguma obrigatoriedade de ser feita dentro do método? Na 
criação de objetos é possível colocar valores sem precisar usar o método set? Como na 
criação de várias matrizes? 
A conversão de tipos existe sempre. Mas, nem sempre é obrigatória a conversão explícita de 
tipos. Em alguns casos, a conversão é automática e fica implícita. A conversão explícita é 
feita colocando-se o tipo para o qual se quer converter entre parênteses antes do valor a ser 
convertido. Por exemplo, double x = 10; Neste caso, está-se atribuindo um valor inteiro a 
uma variável do tipo double. É obrigatório que haja uma conversão do valor inteiro para 
double antes de ocorrer a atribuição deste valor à variável. Isso pode ser feito explicitamente 
escrevendo-se: double x = (double) 10; Mas não há necessidade desta conversão ser 
explícita, pois será realizada automaticamente. É possível, dentro da classe, atribuir valores 
aos campos sem a necessidade de utilizar um método set. Fora da classe isto não é possível 
porque os campos são privados. Fora da classe a única forma de atribuir valores aos campos 
é utilizar um método set. 
 
7. Em quais situações é conveniente utilizar o operador "^" (disjunção lógica exclusiva)? 
A disjunção lógica exclusiva é uma operação sobre dois valores lógicos (em geral, os valores 
de duas comparações) que produz o valor verdadeiro (true) apenas se um dos dois valores 
for verdadeiro, mas não ambos. Por exemplo, na frase "A lâmpada está ligada ou desligada" 
este "ou" é uma disjunção lógica exclusiva, pois a lâmpada não pode estar ligada e desligada 
ao mesmo tempo. Mas na frase "Gosto de cerveja clara ou escura" este "ou" representa 
apenas uma disjunção, sem necessariamente ser exclusiva. 
 
8. Posso criar um objeto fora da classe main? Seria útil? 
Uma observação importante: main() não é uma classe. É um método de uma classe. Quando 
uma classe contém o método main() ela se torna uma classe principal (ou classe executável). 
Assim, ao dizer "classe main" deve-se estar se referindo à "classe principal". A criação de 
objetos pode ser feita em qualquer classe, sempre que necessário, e não apenas na classe 
principal. 
 
9. Sempre é possível criar um objeto para atribuir valor a uma String ou Math? 
Não é preciso criar objetos para utilizar os métodos das classes String ou Math. Estas classes 
são estáticas e os métodos são chamados usando-se o próprio nome da classe. Os métodos da 
classe String ou da classe Math sempre retornam algum valor. Por exemplo, String.format() 
retorna um valor do tipo String e Math.sqrt() retorna um valor do tipo double. Portanto é 
sempre possível escrever: String s = String.format(...); ou double x = Math.sqrt(...). Ou seja, 
é sempre possível atribuir a uma variável o valor retornado por um método das classes String 
ou Math, desde que o tipo da variável seja igual ao tipo do valor retornado pelo método. 
 
10. Se eu quiser uma raiz quadrada de um número negativo, cuja resposta é complexa, eu 
também uso o Math.sqrt()? E como expresso um número complexo? Como eu faço para o 
conjunto de classes virar um programa que possa ser instalado em um computador por 
exemplo? 
Não. O método Math.sqrt(double a) exige que o seu parâmetro seja um valor não negativo do 
tipo double. Um número complexo pode ser expresso como um par de valores do tipo double. 
A Java API não dispõe de uma classe para tratar com números complexos, mas pode-se 
facilmente escrever uma classe para isto. Para transformar um conjunto de classes em um 
programa deve-se construir o arquivo JAR (Java ARchive). O arquivo JAR armazena classes 
compiladas e outras informações associadas que podem constituir um programa. Um arquivo 
JAR pode ser criado usando o utilitário "jar", disponível no Netbeans na opção "Run | Build 
Project". 
 
11. Um método realiza operação matemática com valores restritos fornecidos pelo 
programador. Como verificar se o valor digitado está dentro das restrições e onde realizar 
este teste? Obs: os valores são determinados na classe e a operação matemática realizada 
no método. 
Os métodos set() servem exatamente para isto: verificar se os valores digitados pelos 
usuários estão dentro das restrições impostas pela classe aos seus campos. Se o método que 
irá realizar a operação matemática utilizar, em vez de valores de campos, o valor de um 
parâmetro, deve-se dentro deste método verificar se o valor recebido no parâmetro atende às 
restrições estabelecidas para que a operação matemática possa ser realizada. 
 
12. Já que um método pode retornar um valor, posso utilizar este valor retornado como 
argumento de outro método? 
Sim. A única restrição é que o valor retornado e o argumento do método sejam do mesmo 
tipo. 
 
13. No Java existe uma função que guarda os dados do programa em um bloco de notas ou em 
outro documento? 
Diretamente não. Mas um programa Java pode armazenar dados em um arquivo de texto e 
este arquivo ser aberto com o bloco de notas ou com outro programa de edição de textos. 
 
14. Classes podem apresentar métodos dinâmicos e estáticos juntos? Um método de uma 
classe pode receber um objeto como parâmetro? 
Sim. Uma classe pode conter métodos estáticos e dinâmicos. Um exemplo bem comum é uma 
classe conter vários métodos dinâmicos e também o método main(), que é um métodoestático. 
 
15. Tem como criar um método dentro de outro, para usar a mesma variável local? Exemplo: 
usar o "do" em um método e "while" em outro. 
Não. Pode-se chamar um método dentro de outro método, mas não é possível escrever um 
método dentro de outro método em Java. 
 
16. Eu posso declarar uma variável na classe main e usá-la em outras classes e objetos? 
Ver observação feita na Pergunta 8. Ao dizer "classe main" deve-se estar se referindo à 
"classe principal". Variáveis declaradas em uma classe devem ser usadas apenas dentro 
desta classe. Uma exceção seria ter campos públicos em uma classe. Esses campos poderiam 
ser usados em qualquer outra classe. Mas, em geral, os campos devem ser privados. 
 
17. Como ler uma string do usuário? 
Para ler um string deve-se utilizar o método next() ou o método nextLine() da classe Scanner. 
A classe Scanner possui métodos para ler vários tipos de dado. Por exemplo, nextInt() para 
ler valores inteiros e nextDouble() para ler valores do tipo double. Ver resposta da Pergunta 
3. 
 
18. Quais packages são carregados automaticamente em qualquer programa Java? 
O pacote java.lang é carregado automaticamente em todo programa Java. Este pacote 
contém diversas classes que são fundamentais para a programação Java. Por exemplo, as 
classes System, String e Math. Mas existem várias outras classes no pacote java.lang, como 
as classes referentes aos tipos de dados (Boolean, Double, Float, Integer, ...) e a classe geral 
de todos os objetos (Object). 
 
19. Justamente por ser classe e não tipo, não é possível a conversão de caractere para string a 
partir de um char? 
Sim, a conversão direta não é possível. Mas a classe String contém o método valueOf() que 
converte qualquer tipo de dado em um string. Por exemplo: double x = 3.45; String s = 
String.valueOf(x); Outro exemplo: char c = 'a'; String t = String.valueOf(c); 
 
20. A classe principal também tem um construtor associado a ela? Qual a funcionalidade de 
um construtor declarado como privado? 
Toda classe tem um construtor. Se um construtor não for definido em uma classe, o 
compilador Java irá incluir, automaticamente, um construtor padrão nesta classe. Uma 
classe pode ter vários construtores, públicos ou privados. Um construtor pode chamar outros 
construtores. Um construtor privado pode ser útil para realizar operações que não devem ser 
acessíveis aos usuários da classe. Assim, um construtor público pode chamar um construtor 
privado para realizar as operações "confidenciais" e depois realizar as operações que o 
usuário tem acesso. 
 
21. Por que existe a necessidade da criação de duas classes em um programa, como Empresa e 
Lab1, sendo que o Lab1 chama todos os dados da classe Empresa? 
Isto, na verdade, não é necessário. A classe Empresa poderia também incluir o método 
main() e seria a única classe do programa. Mas é uma boa prática de programação separar 
toda a lógica de programação em uma classe e apenas utilizar essa classe na classe 
principal.

Continue navegando

Outros materiais