Jak uruchomić dwie funkcje w tym samym czasie ?
np w JavaScript da się zrobić tak:
timeout("funkcja",1000);
Skorzystać z wątku.
Xix napisał(a):
Jak uruchomić dwie funkcje w tym samym czasie ?
np w JavaScript da się zrobić tak:
timeout("funkcja",1000);
JavaScript jest jednowatkowy, programista nie zrobi 2 rzeczy w tym samym czasie. Ten kod startuje timera i po uplywie sekundy funkcja zostanie wywolana w tym samym watku co reszta kodu, moze nawet dzielic ten watek z kodem do pobierania obrazkow, obslugi styli itp. i zablokuje na czas wykonania tej funkcji reszta kodu. Przyklad z d**y.
W JavaScript nie masz wielowątkowości jako takiej zatem i rozwiązania są inne. Najbliższe temu co pokazałeś w JS jest:
new Timer().schedule(new TimerTask() {
@Override
public void run() {
System.out.println("Po sekundzie");
}
}, 1000L);
Xix napisał(a):
No i w Java tego tak się po prostu nie da ?
Da i to na wiele sposobow. Np:
new Timer().schedule(new TimerTask() { @Override public void run() { System.out.println("dupa"); } }, 1000);
(nie wiem czy dziala, mozliwe ze sie pomylilem w nawiasach itp.)
To jest jedyny sposób ( piszecie że nie więc dajcie jeszcze kilka na wszelki wypadek)? Może być. Ale jak sprawić żeby to się wykonało tylko raz i od razu bez tego "1000" (no bo 0 to chyba nie ). Nie ma w tym nic co mówi który raz się kod wykonuje (no bo tak to bym to if-em załatfił )
Jeszcze kilka? http://tutorials.jenkov.com/java-util-concurrent/executorservice.html Tego jest naprawdę dużo :)
Nie da sie zrobic tak, zeby byla pewnosc ze cos sie wykona od razu, rownolegle. To zalezy od wielu rzeczy: OS, implementacji Javy, jaki scheuduler dany OS uzywa itp. Np. jesli zrobisz tak:
System.out.println("line a");
new Thread(new Runnable() { @Override public void run() { System.out.println("line b"); } }).start();
System.out.println("line c");
to jedyne co jest pewne jest to, ze "line a" bedzie wypisane przed "line c", oraz ze "line b" bedzie wypisane po "line a". Kolejnosci "line b" i "line c" w stosunku do siebie nie jestes w stanie okreslic bez dodatkowej synchronizacji. Ale poki co to tematy dla ciebie zbyt zaawansowane.
Dobra, dzięki. A co do tematów zaawansowanych to sobje kupię książkę chyba. Możecie mi doradzić jaką. No bo podstawy umiem czyli pentle, klasy, objekty itp.
Książka: http://helion.pl/ksiazki/java-podstawy-wydanie-ix-cay-s-horstmann-gary-cornell,javpd9.htm
Poza tym jest bardzo dobre Java Tutorials, które zawsze opisuje świeżą wersję Javy: https://docs.oracle.com/javase/tutorial/
ucz się podstawowych elementów składni języka: przyjmijmy, że będzie to Java, jakieś fory/while/switch jak to działa, później możesz troche "ósemki" tj lambda, method reference
później oop: obiekty, klasy, klasy anonimowe, klasy abstrkacyjne, interfejsy, dla ósemki też: funkcje, FunctionalInterface itp
jednym dwoma słowemami "pobawić się" językiem :P
Xix napisał(a):
No a co to są te podstawy. No bo pętle objekty klasy itp. to są podstawy z podstaw tak ? To czego mam się uczyć ? Samych nowych klas czy dalej czegoś "technicznego" ?
Przerób całą tą książkę co ci podałem "Java. Podstawy. Wydanie IX Autorzy: Cay S. Horstmann, Gary Cornell" i będziesz znał podstawy. Jak coś znasz to i tak poczytaj od deski do deski. Jedyną rzeczą, którą możesz pominąć są 10.3 Aplety, bo aplety są mocno blokowane w nowych wersjach Javy i chyba miałbyś problem z ich przetestowaniem.
Ja wiem co to switch itp. Nie rozumiem:
klasy abstrkacyjne
kalsy anonimowe
FunctionalInterface
Comparable
Runnable
lambda
method reference
StringBuildery ( chyba nigdy tego nie widziałem )
Ale tak źle ze mną nie jest że bym nie znał:
Timer
obróbka stringów (jeśli chodzi o substring itp. to znam już od dawna bo na YouTube są świetne kursy C++)
klasy
obiekty
interfejsy
Wiele znam ale może to nie jest jeszcze ułożone bo C++ trochę się różni. Wiem jak się tworzy okna w javax.swing
Zaczne się jeszcze uczyć C#. Ma tyle uproszczeń że nie wiem czy nie jest lepszy niż Java.
I czy konstruktor zawsze się wywołuje kiedy tworzę objekt czy trzeba zrobić tak: klasa objekt = new klasa();
? Wiem że to podstawy ale nigdy tego nie sprawdzałem a często programów nie pisze.
Xix napisał(a):
Zaczne się jeszcze uczyć C#. Ma tyle uproszczeń że nie wiem czy nie jest lepszy niż Java.
Lepszy niz Java? Zdecydowanie tak (moim zdaniem). Prostszy? Latwiejszy do nauki? Zdecydowanie nie - ma znacznie wiecej pojec, wiecej mozliwosci, skladnia bardziej skomplikowana bo i sam jezyk wspiera wiecej. async, yield, propertiesy z prawdziwego zdarzenia, partial classes, static classes, delegaty, eventy - mozna wyliczac bez liku.
Niewiele jeszcze umiesz. A do C++ nie ma sensu robić zbyt silnych analogii. Zwykle różne platformy mają inne filozofie, więc zbyt mocne wyszukiwanie analogii doprowadzi do zamieszania w głowie.
W Javie by stworzyć obiekt trzeba użyć słówka new
praktycznie zawsze. Czasem jest to jednak ukryte gdzieś w metodzie lub obiekt może zostać wstrzyknięty (jeśli używasz wstrzykiwania zależności). Zawsze jednak obiekt jest tworzony za pomocą new
albo, rzadko i głównie we frameworkach, za pomocą refleksji (Class.newInstance lub podobne).
(ubolewam bo prawie nie zauwazylam nowego watku autorstwa pana @Xix).
co do pewnosci wywolania konstruktora w c# to mozesz sie troche przeliczyc, przy deserializacji konstruktor nie jest wolany wiec jesli twoja klasa wspiera serializacje to miej sie na bacznosci.
@katelx nie bardzo rozumiem. Serializujesz obiekt, który już jest utworzony i ma jakiś stan (tak jest i w c# i w javie). W takiej sytuacji po co miałby się uruchamiać jeszcze raz?