Baixe o app para aproveitar ainda mais
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.
Compartilhar