Import java.lang.String é opcional?

Além dessa pergunta do título eu tenho mais três:

  1. (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?

  2. Para recuperar uma string digitada pelo usuário só tem o método BufferedReader ou há outro jeito?

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

  4. Tem como atualizar o valor de uma variável? Depois de criar ela, é só escrever:

String a = "abc";
a = "def";

Ou não?

É isso, valeu pessoal!

Tork

[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]

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

Claro que tem. É isso mesmo que você faz.

Valeu pelas respostas thingol!

Esse Java Tutorial que você falou é o tutorial de Java da Sun, esse aqui: http://java.sun.com/docs/books/tutorial/index.html ?

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=tork]Valeu pelas respostas thingol!

Esse Java Tutorial que você falou é o tutorial de Java da Sun, esse aqui: http://java.sun.com/docs/books/tutorial/index.html ?
[/quote]
É isso mesmo. Bom menino!

[quote]

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

“Bom menino” hahahahaha

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!

Valeu aí pela ajuda, cara!

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.

import foo.*;
import bar.*;
...
Session.doSomething();

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.

Se for via console, é mais fácil realmente usar BufferedReader.
Tem certeza thingol ?

Prefiro utilizar a java.util.Scanner é muito mais simples.

Ah, é mesmo, se for algo que requer entrada de números inteiros etc. é melhor usar a java.util.Scanner mesmo. Estou com a cabeça no século passado :stuck_out_tongue:

Vou ver como funciona o Scanner. Valeu pela dica! =)

Não sei se eu entendi o que o Sami Koivu falou. Isso significa que se eu explicitasse como no código abaixo, não haveria problemas de ambiguidade?

import foo.Session;
import bar.Session;

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?

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();
    ...

Entendi, valeu aí cara!

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();

Mais informações: http://java.sun.com/j2se/1.5.0/docs/api/java/util/Scanner.html

[quote=tork]Entendi, valeu aí cara!

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?

[quote=tork]Entendi, valeu aí cara!

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?

O erro é o seguinte:

Ou seja, ele está buscando a JVM no diretório antigo. Eu queria saber como dizer pra ele o diretório novo.

Editado: Eu vi o post do thingol depois que eu postei. Eu vou voltar ao diretório antigo e depois eu reinstalo pro novo.

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();
	}
}

se tive alguma coisa errada me avisem…
:smiley:

Valeu pelas respostas, me ajudaram bastante! =)

Obrigado,
Tork