ana nokta, gibi emin olmak için bir hale getirecek Kaynaklar, uygulama kodu gerektirmeden kapalıdır. Yine de düşünülmesi gereken bazı daha ince noktalar var.
Eğer istisna-maskeleme olarak adlandırılan bir potansiyel tuzak deneyin-ile-kaynaklar var kullanmayın. Bir try bloğundaki kod bir istisna atar ve son olarak da yakın metot da bir istisna atar, try bloğu tarafından atılan istisna kaybolur ve nihayetinde atılan istisna nihayet yayılır. Bu genellikle talihsiz bir durumdur, çünkü yakın zamanda atılan istisna, yararsız olanı bilgilendirici olan bir şeydir. Kaynaklarınızı kapatmak için kaynakları kullanmaya çalışmak, herhangi bir istisna maskelemesinin gerçekleşmesini engeller.
deneyin-ile-kaynaklar onlar yakın yönteminden atılan istisnalar dışında ne yapacağına karar zorunda geliştirildi zaman önemli istisna bilgileri, kaybetmek olmaz emin istisna-maskeleme yaparak bir parçası olarak. Ile
deneyin-ile-kaynaklar, try bloğu bir istisna atar ve yakın yöntem, aynı zamanda daha sonra the exception from the close block gets tacked on to the original exception bir istisna, atarsa:
... iki bağımsız istisnalar atılmış olabilir durumlar vardır Kardeş kod blokları, özellikle bir try-with-sources ifadesinin try bloğunda ve kaynağı kapatan derleyicinin oluşturduğu son blokta. Bu durumlarda, atılan istisnalardan yalnızca biri çoğaltılabilir. Kaynaklarla yapılan denemede, bu tür iki özel durum olduğunda, try bloğundan kaynaklanan istisnalar çoğaltılır ve sonuncu bloğun istisnası, try bloğunun istisnası tarafından bastırılan istisnalar listesine eklenir. Bir istisna olarak yığını gevşetir, çoklu bastırılmış istisnalar biriktirebilir.
Öte yandan
kodunuzu normalde tamamlar ancak kullandığınız kaynak kapanırken bir istisna atar, (try bloğundaki kod şey attı eğer bastırılmış olacaktı) bu istisna atılan. Dolayısıyla, bir ResultSet veya PreparedStatement'ın kaynaklarla denenmesiyle kapatıldığı bazı JDBC kodlarınız varsa, bir JDBC nesnesi kapatıldığında bazı altyapı aksaklıklarından kaynaklanan bir istisna atılabilir ve aksi halde başarıyla tamamlanan bir işlemi geri alabilir.
olmadan denemek-kaynaklarla yakın yöntem istisna uygulama kodu kalmıştır atılan olmadığını.Bir atılmış edilirse try bloğu bir istisna, diğer istisna maske olacak nihayet bloktan istisna atar iken nihayet bloke ederler. Ancak geliştirici, atılan ve onu yaymayan istisnayı yakalama seçeneğine sahiptir.
fark deneyin-wth-kaynak() stream.close aramaya gerek kalmamasıdır. Sonunda, kapatılan bir yan tümcesi varsa, otomatik olarak çağrılır. Kapatılabilir veya AutoCloseable implmenting Sadece nesneler deneyin-ile-resouce fıkrada kullanılabilir. – sturcotte06
Sen) ('stream.close aramaya gerek (veya muhtemelen olmamalıdır) yoktur; deneyin' 'in {..}' bölüm. Bu deneyin-ile-kaynaklar sizin için idare edecek finally' bölümünde 'yapılmalıdır (BTW deneyin-ile-kaynaklar birden fazla kaynak işleyebilir). – Pshemo