Scanner i try-with-resources

0

Mam taki kod, który DZIAŁA

import java.util.Scanner;

public class TEST {
	
	public static void main(String[] args) {
		
		System.out.println("WPROWADZ INT");
		Scanner scanner = new Scanner(System.in);
		int xxx;
		xxx = scanner.nextInt();
		scanner.close();
		System.out.println(xxx);
	
	}
	
}

Ale w linii z "new Scanner" NetBeans daje ostrzeżenie-podpowiedź "Convert to try-with-resources". Jak w to kliknę, to robi się tak:

import java.util.Scanner;

public class TEST {
	
	public static void main(String[] args) {
		
		System.out.println("WPROWADZ INT");
		int xxx;
		try (Scanner scanner = new Scanner(System.in)) {
			xxx = scanner.nextInt();
		}
		System.out.println(xxx);
	
	}
	
}

Wtedy program TEŻ DZIAŁA, ale nie rozumiem co było źle, po co ta zmiana i co to za samo try bez catch i co to jest to try-with-resources. I dlaczego skasowało scanner.close()? Wszystko zrobiło się inaczej niż w tutorialach.

1

Nic nie było źle. W JDK7 wprowadzono konstrukcję try-with-resources (automatyczne zarządzanie zasobami) który automatycznie zamyka nieużywane zasoby zainicjowane jako parametr. Zwalnia to programistę z obowiązku ręcznego zamykania zasobu i chroni przed nieumyślnym pozostawieniem go otwartym, co jest wybitnie niepożądane. Tę konstrukcję można stosować do klas implementujących interfejs AutoClosable.

1 użytkowników online, w tym zalogowanych: 0, gości: 1