- Samsung Galaxy Z Fold7 - ezt vártuk, de…
- Telekom mobilszolgáltatások
- Apple Watch Sport - ez is csak egy okosóra
- Motorola Edge 50 Neo - az egyensúly gyengesége
- Samsung Galaxy Watch (Tizen és Wear OS) ingyenes számlapok, kupon kódok
- Samsung Galaxy S22 Ultra - na, kinél van toll?
- Mobil flották
- Leesett a kamionról több millió eurónyi Z Fold7
- Xiaomi 15 - kicsi telefon nagy energiával
- Samsung Galaxy A56 - megbízható középszerűség
Hirdetés
Talpon vagyunk, köszönjük a sok biztatást! Ha segíteni szeretnél, boldogan ajánljuk Előfizetéseinket!
Új hozzászólás Aktív témák
-
Lortech
addikt
Ezt olyan embernek kellene csinálnia szerintem, aki azért tudja, hogy mit csinál, projekt alapozást eléggé be lehet nézni, és megnehezíteni az egész csapat számára a későbbi munkát. Az ehhez szükséges tudást egész biztosan nem egy fórum hozzászólás alapján fogod megszerezni.
Létrehozhatsz két különálló maven (gradle) projektet.
A-ból elkészül az artifact (pl. jar), azt instalállod a lokális és/vagy távoli repositoryba (Nexus (+nuget akár), vagy Artifactory).
B maven projektből meghivatkozod az A-t mint függőséget.
Az elkészült maven/gradle projektet behúzod a szimpatikus IDE-be, mint maven/gradle projekt.
Vagy használhatsz multi module-t: létrehozol egy parent projektet, A és B modult, és B modulban definiálod A-ra a függőséget.
Gyors kereséssel itt egy példa utóbbira: [link]
Itt A a weather, B a webapp module. -
emvy
félisten
A Scala meg a JavaEE szerintem nem fuggenek jobban ossze, mint barmilyen mas Java-s technologia. Ha a Scala ennyire tetszik, akkor nezd meg az extrem oldalat, pl. a Scalaz-t. Ha most jonnek ki az egyetemrol, akkor tuti megprobalnam elkerulni a Springet meg a J2EE-t, ennel sokkal erdekesebb dolgok is vannak a vilagban, es penzt keresni massal is lehet.
-
raggg
senior tag
Szerintem egy erős Java tudás mellett némi Spring || EJB / Hibernate tudás elegendő. Voltam már olyan interjún, ahol komolyan belekérdeztek a frameworkökbe, de azért szerintem nem annyira jellemző (legalábbis én kevésbé tapasztaltam eddig). Ahol komoylabban belementünk, ott pedig éppen olyanról kérdeztek, amiről előtte mondtam, hogy dolgoztam vele.
Amit azért érdemes megnézni/megtanulni, hogy egy-egy konténer hogyan működik, miért úgy, vagyis a mögöttes tudást elsajátítani (erre mondjuk nagyon jó a hivatalos Oracle anyag szerintem).
Tehát röviden: ha az alapok megvannak (koncepcionálisan) akkor nem hiszem, hogy aggódnod kellene.
A maven azért elég "alap", érdemes elsajátítani. Ha rajtam múlik, én azt használok Gradle helyett is.
Scala azért ahogy én látom elég sok helyen csak kiegészítő technológia, sajnos megvannak a maga zsákutcái, de csak támogatni tudlak!
-
emvy
félisten
> Hiszen ha egy List is final, utána ugyanúgy lehetett a List-be elemeket tenni.
Jo meglatas - ami neked feltunt, az a 'constness', vagy immutabilitas koncepciojanak a (majdnem teljes) hianya a Java-ban. Az altalanos immutabilitas igazan hasznos lehetne, konkurens programozasnal (is) egy aldas, meg egyebkent is sokkal atlathatobb, bugmentesebb kodot lehet irni akkor, ha az ember ahol csak lehet, 'ertekkel' es nem 'identitassal' dolgozik.
-
Soak
veterán
Megeri megcsinalni, sokat lehet belole tanulni. Nem igaz hogy a springet sokat kene konfiguralni. Egy alap projekt alig igenyel 30 sor konfigot, ellenben nagyon sok mindent tudsz kobfigolni ha szeretnel. Szedd le az sts plugint eclipsebe es csinalj egy sprin mvc projektet templatebol. Kapsz egy mukodo alkalmazast ahol az alapok teljesen vilagosak lesznek. Szerintem a legjobb framework backendre.
-
Lacces
őstag
Esetleg itt látod a Netbeans-es fájl szerkezetet:
Képernyő képWindows-os könyvtárszerkezet:
Könyvtárszerkezet WindowsonA futtatás eredménye:
URL kezdés:
/C:/Users/bota.laszlo/Downloads/RobotXMLFeldolgozo/RobotXMLFeldolgozo/target/classes/
/C:/Users/bota.laszlo/.m2/repository/commons-io/commons-io/2.4/commons-io-2.4.jar
/C:/Users/bota.laszlo/.m2/repository/org/slf4j/slf4j-api/1.7.5/slf4j-api-1.7.5.jar
/C:/Users/bota.laszlo/.m2/repository/ch/qos/logback/logback-core/1.0.11/logback-core-1.0.11.jar
/C:/Users/bota.laszlo/.m2/repository/ch/qos/logback/logback-classic/1.0.11/logback-classic-1.0.11.jar
/C:/Users/bota.laszlo/.m2/repository/org/apache/maven/doxia/doxia-module-docbook-simple/1.3/doxia-module-docbook-simple-1.3.jar
/C:/Users/bota.laszlo/.m2/repository/org/codehaus/plexus/plexus-utils/2.0.5/plexus-utils-2.0.5.jar
/C:/Users/bota.laszlo/.m2/repository/org/apache/maven/doxia/doxia-core/1.3/doxia-core-1.3.jar
/C:/Users/bota.laszlo/.m2/repository/org/apache/maven/doxia/doxia-logging-api/1.3/doxia-logging-api-1.3.jar
/C:/Users/bota.laszlo/.m2/repository/org/codehaus/plexus/plexus-container-default/1.0-alpha-30/plexus-container-default-1.0-alpha-30.jar
/C:/Users/bota.laszlo/.m2/repository/org/codehaus/plexus/plexus-classworlds/1.2-alpha-9/plexus-classworlds-1.2-alpha-9.jar
/C:/Users/bota.laszlo/.m2/repository/xerces/xercesImpl/2.9.1/xercesImpl-2.9.1.jar
/C:/Users/bota.laszlo/.m2/repository/xml-apis/xml-apis/1.3.04/xml-apis-1.3.04.jar
/C:/Users/bota.laszlo/.m2/repository/commons-lang/commons-lang/2.4/commons-lang-2.4.jar
/C:/Users/bota.laszlo/.m2/repository/org/apache/httpcomponents/httpclient/4.0.2/httpclient-4.0.2.jar
/C:/Users/bota.laszlo/.m2/repository/commons-logging/commons-logging/1.1.1/commons-logging-1.1.1.jar
/C:/Users/bota.laszlo/.m2/repository/commons-codec/commons-codec/1.3/commons-codec-1.3.jar
/C:/Users/bota.laszlo/.m2/repository/org/apache/httpcomponents/httpcore/4.0.1/httpcore-4.0.1.jar
/C:/Users/bota.laszlo/.m2/repository/org/apache/maven/doxia/doxia-sink-api/1.3/doxia-sink-api-1.3.jar
URL vége! -
Futtasd le nekem ezt légy szíves és másold be ide a kiírt eredményt.
ClassLoader cl = ClassLoader.getSystemClassLoader();
URL[] urls = ((URLClassLoader)cl).getURLs();
for(URL url: urls){
System.out.println(url.getFile());Import, ami kell:
import java.net.URL;
import java.net.URLClassLoader; -
skoda12
aktív tag
Kb mindegyik jo, amit fentebb ajanlottak. En speciel JSF-et szeretem, mert ha ranezel egy [richfaces] vagy [primefaces] showcase-re, akkor latod, hogy nagyon bonyolult ajaxos komponenseket is berakhatsz az oldaladba 5-10 sor koddal. Hatranya viszont, hogy altalaban oriasi DOM fakat general, igy lassu lehet.
-
modder
aktív tag
Hali, szerintem simán el lehet érni jó eredményeket szimplán servlet + stringtemplate ( http://www.stringtemplate.org/ ) kombinációval. Én még nem próbáltam, de kollégám szerint nagyon jó. A frankó az, hogy nem erőlteti rá a framework a saját technológiáit, hanem azt használsz amit szeretnél. Servlet a Controller szerepben, Stringtemplate a view szerepben, Model szerepben pedig vagy saját DAO-kat írsz JDBC-vel, vagy akármit gyakorlatilag használhatsz backendnek.
Egyébként pedig a Play frameworköt nagyon dícsérik, csak az a bökkenő, hogy ahhoz Scalát érdemes használni, amit nem egy-két nap megtanulni, szerintem.
-
Lacces
őstag
Másik kérdés. (bár ez másnak is mehet)
Ha van a POM.XML-ben (maven) pluginként hozzáadva a Jetty, akkor ezt automatikusan leszedi és elindít egy Jetty-t anélkül, hogy az telepítve van a gépen? Vagy kötelező, hogy ennek ellenére feltelepítve legyen a Jetty?
Ugyanis én Jetty 9.0-t raktam fel, de a kis plugin a Jetty 7-est használja, és ez olyan érdekes, ezen elgondolkodtam.
-
skoda12
aktív tag
1. Gyors probalgatasra jo a run-app, de vigyazni kell vele, mert attol meg, hogy o tudja futtatni a projektet, egy webcontainerben meg nem biztos, hogy futni fog. mvn grails:war-ral lehet war fajlt kesziteni es azt deployolni egy tomcatre pl. Ekkor jot elo nalunk is a gubanc, hogy csomo felesleges dolgot bepakolt a war fajlba alapbol. Pl servlet apit is, ami teljesen felesleges, mert minden webcontainer classpathjan ott van es emiatt be sem toltodik a program.
Amugy fejlesztokornyezetnek eclipse java ee verzioja pl jo, csak market placerol meg fel kell tenni a grails es groovy plugineket.2. Ezt nem tudom. A view layert megirtuk gwt-ben, igy olyan sorrendben dobaltunk ra controlokat, amilyenben akartunk.
-
TBG
senior tag
Struts2 vs Spring? Nem összehasonlíthatóak
Szerintem a Spring lassan platform lesz
Ez a lényeges mondat. Annyi módosítással, hogy szerintem már az!
Miért Spring? Azért, mert nem kell hozzá applikációs szerver. Egy sima Tomcat/Jetty-vel is simán elszalad, ami egy EE alkalmazásról nem mondható el. Sőt, egy jól megírt Spring alkalmazás fut servlet konténerben és applikációs szerverben is. Mindamellett ugyanazt a funkcionalitást nyújtja, mint egy EE konténer (jó, dinamikus kontext nincs, de embert nem láttam még, aki használta volna)
Nem akarok flame-t nyitni!!
-
TBG
senior tag
Az EE egyre inkább háttérbe szorul a Springgel szemben.
A Springgel érdemes kezdeni szvsz, mert aki ismeri a Springet, az nagyon könnyen tud átnyergelni EE-re, de csak EE ismerettel a Spring a vérhugyozás kategóriája.
Itt a 3-as Springről beszélek. Az előző változatok az XML tengere....bottal nem nyúlnék hozzá. Spring is támogat JSF,JSP techonlógiákat.
A Spring is egyébként egy qrva nagy framework/tool/solution halmaz.
Van Spring MVC, Sping JS, Spring Webflow, Spring Security.....sorolhatnám napestig. Ezekből a Spring Security és az MVC már de facto szabvány.
-
Soak
veterán
Köszi, ezekkel tisztában vagyok, nem csak úgy poénból kezdtem el foglalkozni vele, hanem azért mert nem sokára juniorként munkába állok és ugyan intenzív oktatáson részt fogok venni, már most el szeretnék vele kezdeni foglalkozni, mert van rá időm. A kérdés lényege az volt, hogy felesleges időt ne pazaroljak arra amire nem kell.
TBG : Köszi ezt már megtaláltam, de egy ideje nézegetem már, hogy akkor most mi is van
. Még nem találtam meg a fogást, hogy miként kezdjem el, az SE tutoriallal lassan végzek.
-
TBG
senior tag
Az egészet nem értem egyébként.
Car car = new Car();
car.addTire(new Tyre(10));
car.addTire(new Tyre(11));Ez a 3 sor megcsinálja azt, amit itt szeretnél tenni...
List<Tyre> carTires = car.getTires();
System.out.println("Before: " + carTires.size());
car.setTires(carTires);Gondolom, azt vártad, hogy lesz egy 4 elemű listád [10,11,10,11] értékekkel? Vagy mi volt az elképzelés?
Egyébként így működött volna:public class Car {
private List<Tyre> tires = new ArrayList<Tyre>();
public void setTires(List<Tyre> t) {
this.tires.clear();
this.tires.addAll(t);
}
// Egyéb lekérdező metódusok
}
public class CarTest {
public static void main(String[] args) {
Car car = new Car();
car.addTire(new Tyre(10));
car.addTire(new Tyre(11));
List<Tyre> carTires = car.getTires();
System.out.println("Before: " + carTires.size());
Car anotherCar = new Car();
anotherCar.setTires(carTires);
System.out.println("After (1): " + car.getTires().size());
System.out.println("After (2): " + anotherCarTires.size());
} -
WonderCSabo
félisten
A Java mindenhol referenciákat használ (kivéve a primitív típusokat, de itt most nincs olyan). Feltételezem a car.getTires() fv. car.tires listát adja vissza. Mivel referenciákról van szó, ekkor a main lokális változója, a carTires illetve a car.tires mező ugyanarra az objektumra fog mutatni. Ezután átadod a car.setTires(carTires) - el a carTirest, ami törli a belső saját listát. De a carTires is a belső listára mutat, tehát ugyanazt a listát törlöd ki! Ezután hozzáadod a belső listához ugyannak a már üres listának az elemeit, nyilván továbbra is üres marad.
Ez egy ismert jelenség, és direkt kitaláltak rá olyan mintákat, amivel ezt el lehet kerülni. Az egyik ilyen megoldás a defensive copy.
-
modder
aktív tag
Nem tudom pontosan hogy akarod megoldani a megjelenítést. Régen volt JSP. ebből ugye servlet generálódott, ahol a JSP statikus részei final stringek voltak, tehát szépen benne maradt a memóriában, nem hozta őket létre újból minden requestnél. Én JSF-et használok, de egyszerű weboldalakra kiváló és nagyon kiforrott a String template.
Én arra gondoltam, hogy ha magát a template-et, mint Stringet egy Singleton osztályba beolvasod egyszer pl. fájlból, amikor szükség van rá, és utána onnan éred el, akkor a Singletonod alkalmazáson belül de, requestek között megmarad, így a beolvasott string template is megmarad a memóriában. Sőt, requestenként ugyanazt a singleton-t fogod elérni. Persze fontos, hogy ezt az osztályt tényleg csak stringek tárolására használd, és ne legyen benne semmi állapot a template stringeken kívül. Plusz a fájlból beolvasás metódusát és a getInstance metódusát nem árt egy mutex-szel védeni, elkerülendő, hogy két thread (két szimultán request) egyszerre inicializálja.
Ez amúgy csak most jutott eszembe a kérdéseddel kapcsolatban, lehet hogy valahol hibádzik a gondolatmenetem, de tekintve, hogy egy JVM-en és egy classloader hierachián belül ugyanazt az osztálypéldányt használja az alkalmazásod requestektől függetlenül, gondolom működik.
-
modder
aktív tag
-
modder
aktív tag
Most az jutott a tudomásomra, hogy minden egyes lekérésnél elindítódik külön-külön a JVM (ami egymagában 30-40 mega), ezen picit meglepődtem.
Ezt hol olvastad meglepődnék ha így lenne. Totál elveszítené a webszerver az értelmét, és gyakorlatilag CGI-ként futtatnád így az alkalmazásodat.Tessék, itt van egy összehasonlítás arról, hogy melyik webszerver mennyi memóriát használ idle állapotban http://www.jvmhost.com/articles/memory-usage-comparison-of-java-application-servers-and-applications -- 1 jetty instance átlag 50 megabyte.
Erre jön még az alkalmazásod memóriaigénye, ami nagyban függ az alkalmazásod felépítésétől, az output nagyságától. Pl. ha csak az outputot nézzük (a belső struktúrát nem), akkor átlagosan 16 bites karakter hosszal számolva 20 megabyte memóriába 1 250 000 karakter fér bele. ami átlagos karakter per oldal alapján ~ 43 wikipedia oldalnak felel meg.
Erre jöjjön rá még az alkalmazásod belső struktúrája. Azért látni, hogy ez egy eléggé elnagyolt példa, egy kis weboldal nem fog 20 megabyteot elhasználni oldallekéréseknél, max pár megabyte. Nem beszélve arról, hogy statikus adatokat (pl. html template-eket amibe csak beszúrod a generált tartalmat) megosztasz a lekérdezések között, mert bent marad a memóriában. Pl. ha egy singletonban tárolod ezeket, és nem próbálod meg beolvasni a fájlból minden egyes oldallekéérésnél.
Szóval egy relative kis weboldal max pár megabyte memóriát fog lefoglalni requestenként.Plusz korlátozhatod a memóriát JVM beállításokkal (pl. max heap size) meg hasonlók, így ha kezd kifogyi a memóriából a webszerver, a GC majd elintézi a régi objektumokat. Szerintem elég neki kb 500 megabyte memóriát adni.
Szerintem ami a legfontosabb, ha kevés memóriát szeretnél használni, hogy ahol dinamikus string összefűzés van, ott használj StringBuildert vagy StringBuffert (nem emlékszem melyik a nem threadsafe de azt). Pl. A stringet több objektum, függvény állítja elő, vagy cikluson belül generálod. Különben a String + operátor új stringet hoz létre mindig. Kiemeltem, hogy dinamikusan, mert ha csak kényelmi szempontból egy ilyen változót deklarálsz, hogy
String fejlec = "Üdvözöllek \n" + "a\n" + "weboldalamon!"; akkor a fordító automatikusan egybefűzi ezeket a stringeket, úgyhogy no para.Szó ami szó, napi 200 lekérdezésre simán elég a 2GB, de ha spórolni akarsz adj rá 500 megabyte-ot, az is bőven elég lesz.
-
"a String az egy olyan állandó, amelynek értéke futás közben megváltozhatatlan"
Valójában csak a mérete, a karaktereket módosíthatjuk benne a charAt metódussal, O(1) időben.
"a Szemétgyűjtő a Stringeket nem kezeli, nem dobja ki őket"
Ezt nem gondolhatod komolyan. Elég sok alkalmazás kapna így out of memory-t
. Valójában úgy áll a dolog, hogy a kódban definiált Stringek (String str = "abc") az úgynevezett literal pool-ban lévő elemekre fognak hivatkozni, ami a heap-től független, így a GC-től is. A futás időben keletkezett String objektumok viszont mindig a heap-re kerülnek, amiket pedig a GC eltakarít, ha már nincs rájuk hivatkozás.
Példa:
String str1 = "abc";
String str2 = "abc";
System.out.println(str1 == str2);Eredmény: true
String str1 = new String("abc");
String str2 = new String("abc");
System.out.println(str1 == str2);Eredmény: false
-
modder
aktív tag
Hali,
Glassfish egy teljeskörű java EE implementáció (bár van web profile-ja is, ami kicsit kevesebbet tud).
Springhez nem kell Java EE alapesetben, csak egy szervlet konténer, tehát a Tomcat teljesen megfelel. Elvileg egyébként egy teljesen alap Jetty is megfelel neki: -
Karma
félisten
A második esetben történik a már a legelején emlegetett autoboxing, tehát a JVM látja a primitív int 8-ast és hogy Integer objektum kellene, ezért automatikusan meghívja az Integer.valueOf() függvényt rá.
És ez a függvény, mint látszott, belső cache-t használ a kis számokra, ugyanazt a konkrét objektumot adja vissza.
-
Karma
félisten
Ez nem példakód, hanem a JRE forráskódja
-
Gyuri16
senior tag
Integer s = 8;
ilyenkor autoboxing miatt az Integer.valueOf(int) kerul meghivasra, ami cacheli a -128 tol 127ig terjedo szamokat, hogy gyorsabb legyen:private static class IntegerCache {
private IntegerCache(){}
static final Integer cache[] = new Integer[-(-128) + 127 + 1];
static {
for(int i = 0; i < cache.length; i++)
cache[i] = new Integer(i - 128);
}
}
public static Integer valueOf(int i) {
final int offset = 128;
if (i >= -128 && i <= 127) { // must cache
return IntegerCache.cache[i + offset];
}
return new Integer(i);
} -
Igen. Az első két feltételnél primitívvé konvertálja az objektumokat és úgy hasonlítja össze, a 3.-nál viszont a == operátor azt vizsgálja, hogy a két referencia ugyanarra az objektumra hivatkozik-e, ami természetesen nem lesz igaz, így mindhárom feltétel mindig teljesül.
-
Davs
tag
class A {}
class B extends A {} -> ez oroklodes
class C {
public A AObject = new A() ; -> ez kompozicio
}B objektum eseten minden public es protected dolgot (metodust es valtozot) oroklunk az A-bol. B-ben tudunk hozzatenni az A-bol orokolt dolgokhoz, de altalanosan elmondhato, hogy ami A-ban van (es public) az a B-ben is ott van, ezert lenyegeben mondhatni, hogy a "B" class "A" tipusu is. Mivel a B az A-tol orokol, az alabbi kodreszlet valid:
A Avaltozo = new B() ;Kompozicio eseten nem csinalhatsz ilyent: A Avaltozo = new C() ; -> mivel a C nem orokol az A-tol, egyszeruen a C csak tartalmaz egy A-t.
Oroklodes = "olyan, mint" -> B orokol A-tol -> B olyan, mint az A ( B az A altipusa)
Kompozicio = "van neki" -> C-ben van "A-kompozicio" -> C-nek van A-jaNemtudom, mennyire vilagos ebbol, szerintem rossz tanar lennek, de ha mar ennyit utottem a gombokat, azert elkuldom, hatha van benne valami ertheto is
(+ remelem nem tevedtem nagyot sehol se)
-
D4nte
csendes tag
5. Annyi azért legyen már tisztázva (csak azért, mert nem értem, miért pont publikus meg privát láthatóságot írtál itt), hogy egy normál osztály (nem belső) csak publikus, vagy ha nem teszel ki láthatósági jelölést, akkor csomagszintű (package) láthatóságú lehet.
A belső osztály már más kategóriába esik, az lehet public, protected, private, package (nincs kulcsszó írva) szintű is.
(Még itt érdemes megemlíteni, ha esetleg itt lehetne kavarodás, hogy az Interface egy külön eset, ott minden tag public alapból. (mindegy hogy kiírod, vagy sem))
Végül pedig az igazi kérdésedre, az előbb leírtak mellett, NEM a válasz, már fentebb is írták. Ha nincs feltüntetve, hogy milyen láthatóságú egy osztály tagja, akkor csomagszintű lesz.
3. Nem tiszta nekem, hogy most belső osztályokkal (remélem nem), vagy normállal akartad megoldani, de ilyen dolgoknál (meg a legtöbbnél szintén) egyszerűen ki kell próbálni, ha tudod.
public class Allat {
void ugat() {
System.out.println("Állatugatás");
}public static void hajtovadaszat(Allat allatPeldany) {
allatPeldany.ugat();
}public static void main(String[] args) {
Allat allat = new Allat();
Kutya kutya = new Kutya();
Farkas farkas = new Farkas();hajtovadaszat(allat);
hajtovadaszat(kutya);
hajtovadaszat(farkas);
}
}class Kutya extends Allat {
void ugat() {
System.out.println("Kutyaugatás");
}
}class Farkas extends Allat {
void ugat() {
System.out.println("Farkasugatás");
}
}kimenet:
Állatugatás
Kutyaugatás
FarkasugatásEnnél a példánál tökéletesen működik a polimorfizmus. Ne zavarjon meg, hogy a leszármazott osztályok csomagszintűek lettek, most azért igazából, mert egy fájlba tettem (de lényegtelen ennél e példánál éppen).
Próbálgasd módosítani a láthatóságokat, és nézd az eredményt, így kitapasztalhatod a dolgokat.(Itt az Allat osztály és az ugat metódusa lehetne inkább abstract, de kérdésedhez nem kapcsolódik igazából)
Csináltam egy belső osztályos verziót is, talán közelebb van ahhoz amit gondoltál.
másikverzióJava tutorials-t gyors, Thinking in java-t részletes tanuláshoz én is ajánlom, ha jól átveszed benne a dolgokat, a kérdéseid mind megválaszolódnak, plusz, ami nem világos, próbáld is ki!
-
Davs
tag
1.
- Miért fér hozzá a tartalmozó osztály?
- Itt most egymasba agyazott Classokrol van szo..Class classon belul (ez nem oroklodes!). Vegyunk pl egy sima public classot. Te a classon kivul tudsz a classbol objectet csinalni, hozzafersz a public valtozoihoz/metodusaihoz, a privathoz viszont nem! A privatot csak a class/object maga tudja hasznalni es ha ugy akarja az isten akkor kozvetlenul te is (egy public metodus a classon belul ami hozzaferest ad a privat valtozohoz). Namost ha egy class tartalmaz egy masik privat classot, akkor ahhoz is csak o fer hozza kozvetlenul.
public class A{
private class B{}
}
Leegyszerusitve vehetjuk ugy, hogy a B class az Aclass sajatja, tehat hozzaferhet.2.
http://stackoverflow.com/questions/70324/java-inner-class-and-static-nested-class
Az elso valaszban van leirva peldaval, hogy hogyan ferhetsz hozza. Ha sima inner class-bol akarsz objektumot csinalni, akkor ha jol tudom eloszor kell egy object-et csinalnod a kulso classbol es csak utana tudsz a belsobol, mert a belso csak a kulson belul "el". Static-ot meg talan tudsz siman Kulso.Belso valtozo = new Kulso.Belso() ;3. passz
Amugy azt polymorfizmusnak hivjak, amikor egy alosztalyt az ososztalyanak tekinted. Viszont igy hirtele fogalmam sincs, mi tortenik, ha privat class orokol az allattol..privat classbol egyaltalan lehet objektumot csinalni?
4. Tudtommal privat dolgokat NEM orokolnek az alosztalyok. Ha maga az ososztaly privat, akkor lehet ott dob hibat, amikor az alosztaly akar orokolni (tipp).
Protected egy olyan privat dolog, amit lehet orokolni, de kivulrol szinten nem fersz hozza.5. Amennyire tudom, egy classon belul alapbol minden privat.
-
Peter Kiss
őstag
Ha valami nincs ellátva static kulcsszóval, akkor az instance-hoz kötődik, és még most szólok, Java-ban egyáltalán nincs static ctor. Ennek az osztálynak minden eleme "package" hozzáférésű, csak rájuk van húzva a private a class miatt, ami pontosan annyira redukálja a hozzáférhetőségét, amennyire mutatja magát (ami a class-t használhatja, az használ mindent, itt semmi se látja ezt az osztályt).
-
modder
aktív tag
Heló,
nem
A "nested class-od" adattagjainak láthatósága alapértelmezetten package.
remélem tudod, hogy a static class csak belső osztályként jöhet létre (nested class), és nem azt jelenti, hogy ez egy singleton.
statikus nem a láthatóságra vonatkozik, hanem hogy az adott tag (metódus vagy mező) nem objektum példányhoz, hanem osztály példányhoz tartozik.
Kicsit több tudást igénylő példa, de ugyanazon nevű osztályból (package nevet is beleértve) szélsőséges esetben több példány is létezhet egy jvm-en belül (egy futtatás alatt), ha azok különböző classloaderekkel lettek betölve. (most nem objektum példányról beszélek, az egyértelmű, hogy egy osztálynak több példánya is lehet) -- A java classloaderek kicsit hasonlítanak a PHP-s auto-load classloaderekhez.
az osztálytagok (metódus vagy mező) alapértelmezett láthatósága a package. Így ebben az esetben is. Mivel azonban a nested classod privát, ezért kívülről egyébként sem férhetsz hozzá az osztályhoz, így az adattagokhoz sem, csak és kizárólag a tartalmazó osztályból.
Tehát az Elem osztályod tagjaihoz csak a tartalmazó osztályból férhetsz hozzá, tulajdonképpen magához az osztályhoz is.
Lehet egy nested class nem statikus is
Ha a belső osztályod nem static, akkor egyértelműen hozzá van kötve az őt tartalmazó osztály egy példányához. Példányosítani kicsit furcsa szintaxissal kell:
KulsoOsztaly.BelsoOsztaly belsoPeldany =
kulsoOsztalyPeldany.new KulsoOsztaly.BelsoOsztaly();belső osztályból a tartalmazó külső osztálypéldányra hivatkozni pedig:
KulsoOsztaly tartalmazoOsztalyPeldany = KulsoOsztaly.this;http://docs.oracle.com/javase/tutorial/java/javaOO/innerclasses.html nézd meg a példakódot
-
Lacces
őstag
Jó, mondjuk ez egy belső statikus osztály...
De nem is tudom... most elgondolkoztam. Mert statikus konstruktor nem lehet, ahhoz static{...}-ot használná, és statikus tagfüggvény csak statikus változókat kezelhet. Ott pedig a this kulcsszó szerepel, amely példányváltozóra mutat...
Hm, most belezavarodtam. -
pakriksz
őstag
megoldottam. Találtam a neten egy gyors byte sorozat kereső algoritmust. Az megkeresi a kezdőindexét, majd egy forral felülírom a byteokat, és mentés.
stringként olvasásnál pont a kódolás miatti problémák jöttek ki. mentés után a fájl 4x akkora volt, egy rakás jellel kiegészítve. Csak a szöveg maradt eredetiben. -
Frigo
őstag
Java-s webalkalmazások alapból az MVC struktúrát követik :
servlet-ek = controllerek
JSP-k = view-k
EJB-k vagy mezei Java osztályok = model-ekHa részletesebben érdekel akkor melegen ajánlom ezt a könyvet
Kezdő Java-s webfejlesztőknek tökéletes lesz. -
WonderCSabo
félisten
Előbb véletlenül osztályt írtam. Tehát a getClass() az objektum sémáját, mintáját, az osztály leírását adja vissza. Nem a this - ét, azt amelyik objektumra meg lett hívva. Pl. ezt is lehetne:
String s = "dfdf";
s.getClass();Csak az előbbi példakódban pont a this - re lett meghívva.
-
WonderCSabo
félisten
Név és kiterjesztés is kell, minden fájl esetén, minden programozási nyelvben.
A getClass() - al pedig egy osztály sémáját tudja lekérdezni (jelen esetben a this - ét), és ennek metódusaival, mezőivel, stb. tud machinálni. Itt a JAR-ban lévő resource kinyerése miatt kellett a getResourceAsStream() meghívásához.Egyébként külső fájl esetén ilyen egyszerű létrehozni egy Scanner objektumot:
Scanner sc = new Scanner(new File("a txt neve"));
-
Fooler89
őstag
String fajlnev="a txt neve";
InputStream is = getClass().getResourceAsStream("fajlnev");
Scanner szavak = new Scanner(is);InputStream megkeresi a fajlnevet és átadom a Scanner-nek a fájl útvonalát.
A fájlt meg beraktam az src-be és a netbeans be is csomagolja.Lortech-nek köszönöm a segítséget.
A kérdéseimmel próbálok a tömörségre törekedni, a másik, hogy hátha valaki javasol egy jobb megoldást.
Tanácsaidat megfogadom. -
-
WonderCSabo
félisten
Az öröklődés azt jelenti, hogy a gyerek mindent örököl az ősétől. Csak egyes dolgokat nem tud közvetlenül elérni.
A gyermek megtudja hívni az elfedett statikus adatmezőket és metódusokat?
Az elfedés pont azt jelenti, hogy az ami az ősben volt, azt nem látszik a gyerekben, mert azokat új metódusok elrejtik. Az elrejtő metódusokat tudod meghívni a gyerekben.
-
Chipi333
csendes tag
"Mert végül is ha örököl, akkor a gyermek osztály mindent másol a szülőtől?"
Igen, alapvetően mindent másol, de a private dolgokhoz közvetlenül nem fér hozzá, csak az ősben definiált protected/public metódusokon keresztül."A gyermek megtudja hívni az elfedett statikus adatmezőket és metódusokat?"
A statikus adattagok és metódusok a statikus típushoz kötődnek. Ezért van az hogy nem szokás példányon keresztül elérni őket, mert megtévesztő lehet, ugyanis a referencia statikus típusa határozza meg, hogy melyik lesz meghívva.
Pl.:
Szülő.StaticMethod(); //értelemszerúen a Szülő metódusát hívja
Gyerek.StaticMethod(); //értelemszerúen a Gyerek metódusát hívja
Szülő sz = new Gyerek();
sz.StaticMethod(); //a statikus típus(a referencia típusa), azaz a Szülő
//StaticMethodját fogja hívni és kapsz mellé egy compiler warningot is
//hogy statikus függvényt nem illik referencián keresztül hívniSzóval a gyerekből is eléred, de a szülő típuson keresztül kell rá hivatkozni.
Tömören kb. ennyiben lehet összefoglalni. De szerintem keress a témáról valami egyetemi jegyzetet és olvasd át, aztán ha valahol nem világos akkor kérdezz.
-
Chipi333
csendes tag
"Statikust is örökli? Azt gondolom nem, mert az csak az adott osztályra vonatkozik. (mint a statikus konstruktor, nem hozz létre példányt)"
Minden öröklődik. Itt kicsit összekavarodtál. A statikus valóban azt jelenti hogy az osztályhoz kötődik, és nem jön létre külön minden példányban, de ettől még a leszármazott osztálynak is meglesznek ugyanazok a statikus tagjai. A különbésg az, hogy máshogy működik a felüldefiniálás. Statikus dolgok esetén elfedésnek hívák, és teljesen máshogy viselkedik (angolul override helyett ezt hide-nak hívják).
-
Nem olyan egyszeru am a dolog mint amilyennek tunik, de ja, ezt legalabb megjegyzem, a privat az tiszta is volt, csak a statikus nem.
Amugy ja, kicsit bonyolult lett, de egy nyamvadt statikus tag sincs meg benne, aminek ertelme is lenne.Chipi333: En nem ertek hozza, de nekem az lenne a logikus, hogy mivel gyerek osztalybol kozvetlenul nem erem el a privat tagokat, csak super-el, akkor nem oroklodott, csak inicializalodott a gyerek osztaly letrejottekor, ami meg nem ugyanaz.
WonderCSabo: Tehat a metodusokat orokli, a privat tagokat nem, a metodusok is gondolom valami "rejtett" super hivassal erik el.
-
SZTE.
Az szerintem amugy sokkal jobb ha megvan hatarozva, hogy mit kell csinaljon, mit kezeljen le, stb, a tavalyi beadando olyan volt hogy, 2 feladat specifikalva, 1-1 napot elszorakoztam vele hasonlokepp amint irod, de ott legalabb fixen tudtam hogy mit csinaljak.Ilyen egyszeru dolgok nekem is eszembe jutottak, en amugy egy kvizes cuccra gondoltam, egy kviz interface, abbol kulonbozo tipusu kvizek, megoldasok private-ba, kvizek egy tombbe, peldanyositas nelkul statikus metodusokkal elkerni a nevuket, adataikat ckilusba amihez iteratort hasznalok stb, ott akadtam meg, hogy a protected tagot hogy vigyem bele ertelmesen, ugy hogy latszodjon, hogy ertem, akkor ket package kellene, na de akkor a masodikba kellene az elsobol hasznalni valamit amivel szemleltetem, hogy a protectedet nem erhetem el, na de mit, ugy hogy ne legyen tul bonyolult atnezni a gyakveznek, mert ugye ezt is leirtak.
Na mindegy, hatha jon meg valaki valami jo otlettel, ha nem, akkor holnap nekiallok s valahogy osszekalapalom a szuper all-in-one progit.
-
modder
aktív tag
http://bytes.com/topic/asp-net/answers/764307-bll-dal-how-they-different
Ezt magamnak is bukmárkoltam
-
modder
aktív tag
Ezek alapján az információk alapján nehéz eldönteni, hogyneked milyen tervezési mintákra van szükséged, az meg a másik, hogy olyan sok tapasztalatom nekem sincsen, hogy séróból vágjak 10-20 mintát
Ahogy látom, szeretnéd jól átgondoltan elkezdeni a projektedet, ami mindenképpen jó. Ehhez tudok adni pár tanácsot, ezek elcsépeltnek tűnhetnek, de érdemes betartani őket, hogy ne idő közben jöjj rá, hogy valami szar vagy nem elég rugalmas
Specifikáció: Mindenképpen próbáld meg jól specifikálni azt, amit szeretnél az oldalon: Milyen adatokat akarsz megjeleníteni, hogy akarod megjeleníteni, a felhasználók milyen interakciókra képesek az oldalon (use-case-ek), hogyan akarod őket elszeparálni egymástól. Milyen oldalak lesznek egyáltalán. Ez az alapja az egésznek, ha ebben nem vagy biztos, akkor gondolkodj még rajta.
Modell/Adatbázis: A speci függvényében találd ki a modelledet. Vagy adatbázisból indulj, vagy osztályokból. Én adatbázis modellből indulnék, mert tudom, hogy úgy biztosan hatékony és normalizált lesz az adatbázis (már hanem valami elosztott/no-sql megoldást teszel mögé). Ez még csak az adatok és az adatok közötti interakció, ebben nincsen benne a felhasználói input meg böngészés.
Modell 2 /BLL: Az adatbázis alapján megtervezed a modelledet, osztályokat, amik képesek mindenfélét elvégezni az adatbázisban, amire szüksége lehet a szoftverednek: új diagram, diagram lekérdezése, kérdések, tárátáttá... Itt már érezni fogod, hogy mik azok a pontok, amiket lehet, hogy egyszerűbben is meg lehetne valósítani valami design patternnel, és akkor felmész wikipédiára, és véginézed az összeset
Na, ha ezekkel megvagy, és úgy látod, kiválóan meg tudsz valósítani mindent modell szinten, amit szeretnél, akkor már "gyerekjáték" lesz megcsinálni a controllert és a view-kat, amik az adatokat megjelenítik. Ne felejtsd el, hogy a Java erősen objektumorientált nyelv, ezért nagyon is van értelme osztályokban gondolkodni.
Egy szó, mint száz: Tervezés, tervezés, tervezés!
Persze lehet, hogy fognak jönni azok, akik mondják, hogy manapság az agilis módszertanokat használják a gyors szoftverfejlesztés miatt, és nem kell ennyi időt szánni a tervezésre... erre csak azt tudom mondani, hogy: DE!
-
modder
aktív tag
az MVC az architektúra, nem tervezési minta. tervezési minta nagyon sokféle van, és sokfélét lehet használni MVC-n belül is, hogy egyszerűsítsd, hordozhatóbbá tedd a kódodat.
Én nem tudok hirtelen mást architektúrát MVC-n kívül, szerintem ez a legelterjedtebb.
De hogy valami érdemi információt is mondjak, én még ketté tudnám osztani az MVC model rétegét:Model:
DAL - Data Access Layer
BLL - Business Logic Layer
Controller
ViewA DAL fogja tartalmazni az alap objektumaidat a modelledben, általában ezt valósítják meg a külfönféle ORM-ek. (ügyfél, autó, számla, kutyafüle...) Más értelmezésben, ahogy a neve is mutatja: ez a réteg kommunikál közvetlenül az adatbázissal: create, update, read, delete
A BLL pedig komplexebb feladatok megoldása a DAL-béli objektumokon, amiknek nincsen köze még a view-hoz vagy a program flow-hoz, amit a controller biztosít.
Például: Ha egy banki szoftvert csinálsz, és regisztrálsz egy új felhasználót, akkor BLL-ben cisnálod meg a regisztrál függvényt, ami a DAL rétegben létrehoz egy felhasználót és egy kezdő számlát is. -
Davs
tag
De, tutira tul van bonyolitva..igazabol osszesitve kell egy 81 nagysagu tarolo (9*9), aminek minden eleme lehet 0, vagy egy tomb es ennek a tombnek a merete lehet 1-tol 9ig es lehessen barhonnan torolni belole
Mondjuk most, hogy igy megfogalmazta, lehet eleg lenne egy tarolo, ami vector<int>-eket tarolna siman. C++-ban egyszeruen lehetett .push_back()-al hozzaadni, es .erase()-szel tetszoleges elemet torolni belole..talan itt is mukodik ez
utananezek...most mar csak akkor az a kerdes, hogy azt a 81db vector<int>-et miben taroljam
Amugy ha lattok valami esszerubb leirast a sudoku problema megkozeliteserol, akkor nyitott vagyok mindenre
-
modder
aktív tag
Igen, ha Java, akkor inkább Java EE-re kell gondolni, ami mindenféle apit és szolgáltatást nyújt middleware rendszerek létrehozására, illetve webprogramozásra.
Szóval Javaval kapcsolatban elsősorban nem felhasználói programokra kell gondolni, hanem háttér rendszerekre.
Bár egyébként nem tudom, hogy miért nem használják gyakrabban felhasználói programokhoz. Én mostanában Eclipse RCP-ben fejlesztgettem SWT-vel, és nagyon használható, natív hatású felületeket lehet lérehozni vele, de tény, hogy az MS WPF-től elmarad sokban. Amúgy pl. a Vuze torrent kliens teljes egészében Javaban íródott, és SWT-t használ.
-
modder
aktív tag
Új hozzászólás Aktív témák
A topicot kiemeltem. Valaki nem akar egy nyitó hsz-t írni?:))
- Már játszható a Titan Quest II korai változata PC-n
- WLAN, WiFi, vezeték nélküli hálózat
- sziku69: Fűzzük össze a szavakat :)
- Samsung Galaxy Z Fold7 - ezt vártuk, de…
- Windows Insider Program
- Jelszókezelők
- Milyen routert?
- Xbox Series X|S
- LEGO klub
- Luck Dragon: Asszociációs játék. :)
- További aktív témák...
- iKing.Hu Samsung Galaxy S25 Plus Navy 12/256 GB Használt, karcmentes állapotban 3 hónap garanciával!
- iKing.Hu - Apple iPhone 15 Plus Black Használt, karcmentes 256 GB tárhely 3 hónap garancia!
- iKing.Hu - Motorola Razr 40 Ultra Glacier Blue 8 GB RAM / 256 GB tárhely Használt, karcmentes
- iKing.Hu - Motorola Razr 50 Ultra Midnight Blue Használt, karcmentes állapotban 12 GB RAM / 512 GB
- iKing.Hu - Xiaomi 14 Ultra Ultra White Használt, karcmentes állapot, Kamerás csúcsmobil
- LG 55C4 - 48" OLED evo - 4K 144Hz - 0.1ms - NVIDIA G-Sync - FreeSync - HDMI 2.1 - A9 Gen7 CPU
- AKCIÓ! Lenovo IS8XM LGA 1150 DDR3 alaplap garanciával hibátlan működéssel
- Akciós Windows 10 pro + Office 2019 professional plus csomag AZONNALI SZÁLLÍTÁS
- Apple iPhone 13 Kártyafüggetlen 1 év Garanciával
- iKing.hu -Samsung Galaxy S25 Ultra Titanium Black Használt, karcmentes állapotban 12 GB RAM / 512 GB
Állásajánlatok
Cég: FOTC
Város: Budapest