Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Problem sa try izrazom u JDK SE 1.7

[es] :: Java :: Problem sa try izrazom u JDK SE 1.7

[ Pregleda: 1814 | Odgovora: 6 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Stijak
Beograd

Član broj: 97934
Poruke: 300
*.adsl.alicedsl.de.

Sajt: www.stijak.com


+37 Profil

icon Problem sa try izrazom u JDK SE 1.725.10.2011. u 15:07 - pre 151 meseci
Rešavao sam neki početnički problem iz oracle java turorijala - drugi problem na http://download.oracle.com/jav...ential/io/QandE/questions.html

Prvi problem na koji sam naišao je da mi eclipse (Helios - instalirao sam stariju verziju zbog dodatka za android) nije prepoznavao try with resource statement kao što je u rešenju na http://download.oracle.com/jav...ssential/io/QandE/FindInt.java tj. prijavljivao expected { found (... Pretpostavio sam da je to zato što je Eclipse malo stariji ne razume Try with resources koji je valda novi u 1.7, pa sam na silu pokrenuo - izabrao proceed u Eclipse i java mi je prijavila istu grešku...

1. Prvo pitanje - Šta je pogrešno sa try with resources na http://download.oracle.com/jav...ssential/io/QandE/FindInt.java ? Devinitivno imam java JDK 1.7 instaliranu i podešenu u Eclipse jer sam bez problema radio već sa nekim klasama java.nio paketa koji je novi u javi 1.7...

Posle toga sam odlučio da odustanem od try with resources i riješim na stari način - preko finally bloka - kao u kopiranom kodu (ime klase ne odgovara problemu jer nisam htio praviti novi projekat samo za ovaj zadačić) - i sad mi u finally bloku prijavljuje grešku da mi je promjenljiva fc nedefinisana (a definisana je u try bloku)? Ne razimijem? Zar nije poenta finally bloka da počisti poslije try bloka i onda mi je logično da sve što je definisano u try - pa makar tu bilo i lokalno da je definisano i u finally?


2. Šta je problem sa mojom nedefinisanom fc promjenljivom u finally bloku? Ako ne mogu koristiti lokalne promjenljive iz try bloka - kako onda drugačije da zatvorim fc preko finally bloka?


Napomena - uspio sam pokrenuti program kada sam ovaj blok iz finally pomjerio u try (nisam mogao kopirati ni u catch blok jer mi je prijavljivao isti problem)...

Code:
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.nio.*;
import java.nio.channels.SeekableByteChannel;
import java.nio.file.*;

class CountLetters {

    private Path file;
    CountLetters (Path file)
    {
        this.file = file;
    }
    public int seek() throws IOException
    {
        int lookingFor = -1;
        try
        {
                SeekableByteChannel fc = Files.newByteChannel(file);
                ByteBuffer buf = ByteBuffer.allocate(8);

                //Get the offset into the file.
                fc.read(buf);
                long offset = buf.getLong(0);

                //Seek to the offset location.
                fc.position(offset);
                buf.rewind();

                //Read the 'secret' value.
                fc.read(buf);
                lookingFor = buf.getInt(0);
        }
        catch (IOException x)
        {
        System.err.println(x);
        }
        finally
        {
            if (fc != null)
                fc.close();
        }
        return lookingFor;
    }
    
    public static void main(String[] args) throws IOException
    {
        Path file = Paths.get("datafile");
        int lookingFor = new CountLetters(file).seek();
        System.out.println("The value is " + lookingFor);
    }

}
 
Odgovor na temu

ArsicS

Član broj: 140959
Poruke: 99
*.static.isp.telekom.rs.



+6 Profil

icon Re: Problem sa try izrazom u JDK SE 1.726.10.2011. u 07:50 - pre 151 meseci
Pogledaj u Window->Preferences->Java->Compiler, mislim da na Heliosu ne možeš da postaviš Compiler level 1.7
 
Odgovor na temu

Java Beograd
Novi Beograd

Član broj: 11890
Poruke: 9446
89.216.32.*



+10246 Profil

icon Re: Problem sa try izrazom u JDK SE 1.726.10.2011. u 08:01 - pre 151 meseci
Citat:
Šta je problem sa mojom nedefinisanom fc promjenljivom u finally bloku? Ako ne mogu koristiti lokalne promjenljive iz try bloka - kako onda drugačije da zatvorim fc preko finally bloka?
Deklariši promenljivu pre try bloka, tako da joj scope bude na nivou funkcije, a ne bloka.
OTPOR blokadi ulica, OTPOR blokiranom Beogradu, OTPOR blokiranoj Srbiji
 
Odgovor na temu

Stijak
Beograd

Član broj: 97934
Poruke: 300
*.adsl.alicedsl.de.

Sajt: www.stijak.com


+37 Profil

icon Re: Problem sa try izrazom u JDK SE 1.726.10.2011. u 11:02 - pre 151 meseci
Citat:
Pogledaj u Window->Preferences->Java->Compiler, mislim da na Heliosu ne možeš da postaviš Compiler level 1.7


Ne može - a treba mi helious zbog androida (google koji može stići tolike stvari ne može stići updatovati android na novi eclipse...), ali nema veze - vratiću se na netbeans za javu (ili ako mi se bude dalo da instališem novi eclipse za javu)...

Hvala vam obojici na odgovorima... @java - to sam izbjegavao jer mi je samo definisanje bio ovaj red koji je mogao izazvati IOException - nije mi palo na pamet da je pre toga mogu definisati instancu te klase vrijednosti null - što sam sada i uradio i funkcioniše... I dalje mi nije jasno zašto su arhitekte java jezika odabrale da try i final ne djele scope - ali dobro...
 
Odgovor na temu

:o)

Član broj: 38609
Poruke: 201
212.200.145.*



+2 Profil

icon Re: Problem sa try izrazom u JDK SE 1.726.10.2011. u 11:17 - pre 151 meseci
Ovako sam ja to shvatio:
Scope u try bloku je problematičan zbog mogućnosti da se desi exception, kada se blok izvršavanja naredbi prekida i prelazi se na exception blok. Blok finally se svakako izvršava, bez obzira da li se exception desio ili ne. Iz ovoga se može zaključiti da, ako pokušaš da definišeš objekat u try bloku, njegovo kreiranje nije sasvim sigurno (zbog moguće pojave exception-a).
Machina improba! Vel mihi ede potum vel mihi redde nummos meos!
 
Odgovor na temu

Java Beograd
Novi Beograd

Član broj: 11890
Poruke: 9446
89.216.32.*



+10246 Profil

icon Re: Problem sa try izrazom u JDK SE 1.728.10.2011. u 08:21 - pre 151 meseci
Citat:
Stijak: I dalje mi nije jasno zašto su arhitekte java jezika odabrale da try i final ne djele scope - ali dobro...
Je ne vidim ni jedan razlog da dele scope ? Čemu to ? Šta ako baš želim da imam dve promenljive koje se isto zovu svaka u svom delu ?
OTPOR blokadi ulica, OTPOR blokiranom Beogradu, OTPOR blokiranoj Srbiji
 
Odgovor na temu

Stijak
Beograd

Član broj: 97934
Poruke: 300
*.adsl.alicedsl.de.

Sajt: www.stijak.com


+37 Profil

icon Re: Problem sa try izrazom u JDK SE 1.728.10.2011. u 12:44 - pre 151 meseci
Kao što sam rekao jedina poenta finally bloka je da čisti za try blokom... Ali :o) je fino objasnio zašto je moje očekivanje bilo pogrešno :)
 
Odgovor na temu

[es] :: Java :: Problem sa try izrazom u JDK SE 1.7

[ Pregleda: 1814 | Odgovora: 6 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.