(a pergunta do título) Eu usei BufferedReader, InputStreamReader e IOException num programa e percebi que essas três clases precisam ser importadas. Eu também usei alguns métodos para manipular String (length, charAt), mas essa classe (java.lang.String) não precisa ser importada. Por que?
Para recuperar uma string digitada pelo usuário só tem o método BufferedReader ou há outro jeito?
Quando vocês vão fazer um programa e precisam fazer determinada coisa e não sabem como, vocês vão àquela coleção de classes Java? A coleção que eu me refiro é: http://java.sun.com/j2se/1.5.0/docs/api/index.html?java/util/Collection.html
Aí você vai lá e pesquisa e aí vê qual é o método que faz o que você tá precisando?
Tem como atualizar o valor de uma variável? Depois de criar ela, é só escrever:
[quote=tork]Além dessa pergunta do título eu tenho mais três:
[/quote]
Não só é opcional como é na verdade confuso. Todas as classes do pacote java.lang já são implicitamente importadas.
[quote]
(a pergunta do título) Eu usei BufferedReader, InputStreamReader e IOException num programa e percebi que essas três clases precisam ser importadas. Eu também usei alguns métodos para manipular String (length, charAt), mas essa classe (java.lang.String) não precisa ser importada. Por que? [/quote]
Essas classes são do pacote java.io, portanto devem ser importadas.
Classes do pacote java.lang não precisam ser importadas.
Se for em interface gráfica há vários jeitos. Se for via console, é mais fácil realmente usar BufferedReader.
Procurar no Javadoc (hua hua hua)? Eu prefiro procurar no Java Tutorial, que apesar do nome mostra várias coisas avançadas. De qualquer maneira, eu também leio o Javadoc e procuro no Google.
Quando eu importo uma classe e não uso ela isso afeta o desempenho do programa? Por exemplo, em vez de eu importar só as classes BufferedReader, InputStreamReader e IOException, eu importo ‘java.io.*’. Tem alguma diferença em termos de recurso de memória?
Quando eu importo uma classe e não uso ela isso afeta o desempenho do programa? Por exemplo, em vez de eu importar só as classes BufferedReader, InputStreamReader e IOException, eu importo 'java.io.’. Tem alguma diferença em termos de recurso de memória? [/quote]
Não, porque o código gerado (.class) importa apenas as classes que foram efetivamente usadas.
Entretanto, é melhor usar um recurso da sua IDE (Eclipse? NetBeans? JBuilder? etc.) que importa todas as classes explicitamente, para você não se perder.
(Uma coisa interessante que já percebi é que importar as classes explicitamente dá muito menos problemas quando você vai compilar um programa que foi escrito para uma versão anterior do Java para uma versão posterior. Eu já tive problemas usando import blablabla..)
Eu uso o Eclipse e o recurso que você fala que é automaticamente ele dá erro se não tem o import, aí vc vai ver o erro e ele dá a opção de declarar a importação né? É bem bom isso!
Ah, ponto interessante. Inclusive pode causar problemas quando você aqualiza algum library que seu código está usando.
Por exemplo, você está usando uma classe chamada Session do pacote foo (ou seja, foo.Session) fazendo import não explicita para dois pacotes, foo e bar.
Dái, na nova versão do bar, eles adicionam uma classe chamada Session no package bar (ou seja, bar.Session). Logo isso resulta num erro de ambiguidade, quando você tenta compilar.
Haveria sim. Mas eu estava pensando num caso onde você só estaria usando a classe Session do pacote foo e outras classes do pacote bar.
Se você precisa usar as ambos as classes Session (em pacotes foo e bar) numa classe sua, você tem que escrever o nome completa (com o nome do pacote incluído) cada vez que você refere áquela classe. Por exemplo:
foo.Session session1 = new foo.Session();
bar.Session session2 = new bar.Session();
...
Agora, eu acabei de fazer uma coisa que eu não sabia se ia dar certo. Eu movi as pastas do Java (jdk e jre) de lugar. Estavam em Arquivos de programas e eu passei pra um nível acima. Eu mudei as variáveis de ambiente para a nova localização. O javac funcionou mas a execução não.
Alguém sabe o que mais eu devo mudar para fazer funcionar?
[quote=tork]
Mas então, voltando ao Scanner, se eu usá-lo, eu não preciso usar o parseint para converter a String para int para realizar operações matemáticas?[/quote]
Não precisa, não. Ele tem um método nextInt que retorna um tipo int prontamente para você e não é preciso converter nada.
Scanner sc = new Scanner(System.in);
int i = sc.nextInt();
Agora, eu acabei de fazer uma coisa que eu não sabia se ia dar certo. Eu movi as pastas do Java (jdk e jre) de lugar. Estavam em Arquivos de programas e eu passei pra um nível acima. Eu mudei as variáveis de ambiente para a nova localização. O javac funcionou mas a execução não.
Alguém sabe o que mais eu devo mudar para fazer funcionar?[/quote]
Eu nunca tentei mover as pastas. Qual é o erro que dá quando você tenta executar?
Agora, eu acabei de fazer uma coisa que eu não sabia se ia dar certo. Eu movi as pastas do Java (jdk e jre) de lugar. Estavam em Arquivos de programas e eu passei pra um nível acima. Eu mudei as variáveis de ambiente para a nova localização. O javac funcionou mas a execução não.
Alguém sabe o que mais eu devo mudar para fazer funcionar?[/quote]
Eu sou mais radical e usaria o método “Suporte Avançado Microsoft”*: desinstalaria e instalaria de novo, passando o diretório correto.
Se você quer usar o Java no browser, por exemplo, existe um monte de entradas no registry que referenciam essa localização e sei lá o que mexer.
Se você for usar o suporte pago da Sun eles também vão falar isso. Acha que vale a pena pagar os US$ 99,00 para a Sun, nesse caso?
Sobre a classe Scanner
para vc pegar um valor “int” utiliza o nextInt();
para uma string eh o next(); //aqui ta o problema
Exemplo
import java.util.Scanner;
class LerTeclado
{
String nome;
int idade;
double salario;
public static viod main(String[] args)
{
Scanner s = new Scanner(System.in);
LerTeclado dados = new LerTeclado();
System.out.println("Digite o nome");
dados.nome = s.next();
System.out.println("Digite a idade");
dados.idade = s.nextInt();
System.out.println("Digite o salario");
dados.salario = s.nextDouble();
}
}