Dúvida de um iniciante em JAVA ! IDE de desenvolvimento [RESOLVIDO]

Boa tarde, minha dúvida é a seguinte:
Utilizo a IDE eclipse. Estou fazendo exercícios de java só que esta ocorrendo um aviso neste código abaixo.

import java.util.Scanner;

public class aula08 
{
	public static void main(String[] args) 
	{
		System.out.println("Infomme a idade do seu cachorro: ");
		Scanner in = new Scanner(System.in);
		
		int idadeCachorro = in.nextInt();
		idadeCachorro = idadeCachorro*7;
		
		System.out.println("Idade do cachorro: " + idadeCachorro + " Anos.");
	}
}

Por que o AVISO( ! ) na linha onde esta escrito: Scanner in = new Scanner(System.in);?? Se clico no AVISO ( ! ) ele me mostra a opção para alterar o código, exemplo colocar uma private static Scanner in;, e alterar a linha Scanner in = new Scanner(System.in); para in = new Scanner(System.in);

Igual esse exemplo:

import java.util.Scanner;

public class aula08 
{
	private static Scanner in;

	public static void main(String[] args) 
	{
		System.out.println("Infomme a idade do seu cachorro: ");
		in = new Scanner(System.in);
		
		int idadeCachorro = in.nextInt();
		idadeCachorro = idadeCachorro*7;
		
		System.out.println("Idade do cachorro: " + idadeCachorro + " Anos.");
	}
}

Assim o aviso some, mais gostaria e saber o porque disso !!

O problema é que você não fecha o objeto “in” que você criou depois que não utiliza mais, ao final do código utilize o método .close() e o aviso sumirá e vai evitar a perda de recursos. in.close();

Então, @Rafael_Santos_Teixei, eu também ia responder isso, mas ainda resta a dúvida: Por que quando ele transforma a variável local in em um membro estático o aviso também some sem a necessidade de chamar o close?

1 curtida

Por quer quando você deixa uma classe estática significa dizer que o objeto nunca sai do escopo portando não precisa ser fechado.

2 curtidas

Certo, então tenho que tornar a classe estática como propõem o IDE ou finalizar o objeto escrevendo in.close(). Ta meio vago ainda mais já deu pra ter uma leve noção. @Rafael_Santos_Teixei você comentou que: vai evitar a perda de recursos. Quais recursos?

È uma boa declara uma variavel private pra usa o scanner mas, ela nao precisa(necessariamente ser statica).

Caso voce usse dessa maneira:

Scanner in = new Scanner(System.in);

Basta clica na lampada amarela:
Add @SuppressWarnings(“resource”)

@TEC.ER sim é o que eu estou fazendo, dando o click no aviso, só que quando dou o click ele altera ela para static e o aviso some como aparece nos códigos postados acima. Só que a duvida é o por que dele fazer isso?