Junior — Middle
Եթե try-with-resources բլոկում մեկ կոմպոնենտի փակման ժամանակ արտահայտություն առաջանա, արդյոք մնացած ռեսուրսները ավտոմատ կերպով փակվելու են?
sobes.tech AI
Պատասխան AI-ից
Java- ի try-with-resources կառուցվածքում, բոլոր ռեսուրսները, որոնք հայտարարված են փակագծերում, ավտոմատ կերպով փակվում են հակառակ հերթականությամբ, նույնիսկ եթե փակման ժամանակ արտահայտություն առաջանա:
Եթե ռեսուրսի փակման ժամանակ արտահայտություն առաջանա, JVM-ը կշարունակի մնացած ռեսուրսները փակելու փորձը: Առաջինից հետո ռեսուրսների փակման ժամանակ առաջացած արտահայտությունները կավելացվեն որպես suppressed exceptions առաջին արտահայտությանը:
Օրինակ՝
try (Resource res1 = new Resource("res1");
Resource res2 = new Resource("res2")) {
// ռեսուրսների հետ աշխատանք
}
// Բլոկից դուրս գալու ժամանակ, երկու ռեսուրսներն էլ փակվում են,
// նույնիսկ եթե res1- ի փակման ժամանակ արտահայտություն առաջանա,
// res2- ն էլ փակվում է:
Այսպիսով, ապահովվում է բոլոր ռեսուրսների հուսալի ազատում և կանխվում է լիկվիդները։