[Java newbie] Greshki pri kompilirane
5 отговора
153 прегледа
[Java newbie] Greshki pri kompilirane
Здравейте!
Написах една програмка, която работи. Сега обаче искам да я преработя и да ползвам класове. Само че тук идват и проблемите. Source-а на класовете е в същият файл, в който и главният клас. При опит за компилация излизат следните грешки:
1. non-static variable this cannot be referenced from a static content
Означава ли това, че всички класове трябва да са static? Какво ще рече това? Как мога да ползвам не-static класове? Като запиша всеки клас в отделен файл? Мога ли да сложа всички не-static класове в един файл, а главният клас да е в друг файл? Как тогава ще зане главният клас къде са му необходимите класове?
2. JavaZad1.java:195: cannot resolve symbol
symbol : class NachMasiwClass
location: class JavaZad1
NachMasiwClass nachMasiw = new NachMasiwClass(argsI,ogr.randLimit);
Какво ще рече това? Как мога да оправя тази грешка? Имената са правилни и голяма/малка буква съответстват.
Моля, някой да ме насочи, просто вече незнам какво да правя. Търсих из документациията и из страницата (форуми и т.н.) на java.sun.com. Обаче нещо синдрома "жени и текника", взе че се прояви и вече нямам идеи, освен да питам тук :(
поздрави,
Мира
Написах една програмка, която работи. Сега обаче искам да я преработя и да ползвам класове. Само че тук идват и проблемите. Source-а на класовете е в същият файл, в който и главният клас. При опит за компилация излизат следните грешки:
1. non-static variable this cannot be referenced from a static content
Означава ли това, че всички класове трябва да са static? Какво ще рече това? Как мога да ползвам не-static класове? Като запиша всеки клас в отделен файл? Мога ли да сложа всички не-static класове в един файл, а главният клас да е в друг файл? Как тогава ще зане главният клас къде са му необходимите класове?
2. JavaZad1.java:195: cannot resolve symbol
symbol : class NachMasiwClass
location: class JavaZad1
NachMasiwClass nachMasiw = new NachMasiwClass(argsI,ogr.randLimit);
Какво ще рече това? Как мога да оправя тази грешка? Имената са правилни и голяма/малка буква съответстват.
Моля, някой да ме насочи, просто вече незнам какво да правя. Търсих из документациията и из страницата (форуми и т.н.) на java.sun.com. Обаче нещо синдрома "жени и текника", взе че се прояви и вече нямам идеи, освен да питам тук :(
поздрави,
Мира
Re: [Java newbie] Greshki pri kompilirane
Trudno e da se kazhe tochno kakyv problem imash bez da se vidi teksta na programata. Iavno se opitvash da syzdadesh obekt ot ne statichno definiran class v statichen kontekst.
Reshenieto za tova v koj fail da definirash daden klas se bazira na tova koj shte go polzva, dali iskash da e dostypen za potrebitelite na dadenia paket ili za drugite klasove ot syshtia paket, kakvi danni sa nuzhni na samia klas, ot kakvo e zavisim i t.n.
Opredeleno triabva da poglednesh niakoj knizhka kato tazi:
[линк]
Prekaleno mnogo neshta sa ti neiasni za da mozhe da se obiasniat v edin kratyk posting.
Reshenieto za tova v koj fail da definirash daden klas se bazira na tova koj shte go polzva, dali iskash da e dostypen za potrebitelite na dadenia paket ili za drugite klasove ot syshtia paket, kakvi danni sa nuzhni na samia klas, ot kakvo e zavisim i t.n.
Opredeleno triabva da poglednesh niakoj knizhka kato tazi:
[линк]
Prekaleno mnogo neshta sa ti neiasni za da mozhe da se obiasniat v edin kratyk posting.
Re: [Java newbie] Greshki pri kompilirane
ako pishesh na java, klasicheskia : ) podhod e vseki class da e v otdelen file, koito da se kazva kakto se kazva class-a, t.e. class
public class GenuineError {
//...
}
triabva da se namira vav file
GenuineError.java
kato pri tova vnimavash za spazvane na glavni/malki bukvi, zashtoto compilatora i toi vnimava za tia raboti.
vsichkite .java file-ove triabva da sa v direktoria, vkluchena v sistemnata promenliva CLASSPATH. ako sa v edna i sashta direktoria, v CLASSPATH-a triabva da imash tochka, t.e.
CLASSPATH=c:\java\;.
(vijdash li tochkata kato otdelna deklaracia na pat v classpath-a? tova imam predvid), za da moje 'compilatora' da se orientira da tarsi drugite file-ove v sashtata dir.
non-static fields... mii nadiavam se da go obiasnia taka, che da me razberesh, no ne garantiram : )
grshkata se poiaviava, kogato polzvash non-static promenlivi (fields) ili metodi v statichen metod, v tvoia sluchai, nai-veroiatno v main method-a. non-static fieldovete imat smisal samo kato chast ot obekt, a ne prosto kato promenlivi. za razlika ot tiah static fieldovete imat smisal (razbirai vajat) za class-a po princip.
razlikata se vijda, pri polojenie che imash mnogo obekti ot edin class, koito ima dve promenlivi (field-ove) - ednata static, drugata ne.
public class GenuineError {
public static int errorsCount = 0;
public int errorType = -1;
public GenuineError (int errorType) {
this.errorType = errorType;
errorCounter ++;
}
}
ako si napravish 10 obekta ot tozi class chrez konstruktora GenuineError(int errorType), vseki ot sazdadenite obekti shte ima takav errorType, kakavto mu zadadesh, t.e. mogat da ima razlichni errorType-ove - tova e non-static field, no pri incrementiraneto na errorCounter-a, se incrementira edna promenliva za vsichki obekti ot class-a - ako sazdadesh 18 obekta, poleto errorsCounter za vsichkite shte ima stoinost 18 - tova e static field. vsashnost, statichnoto pole errorsCounter shte bade fizicheski edno i sashto za vsichkite obekti. do nego mojesh da se obarnesh i chrez samia class:
GenuineError error1 = new GenuineError(1);
GenuineError error12 = new GenuineError(12);
GenuineError error32 = new GenuineError(32);
// STATIC FIELD
System.out.println(error1.errorsCounter);
// izpisva 3
System.out.println(GenuineError.errorsCounter);
// otnovo izpisva 3, stava duma za sashtata promenliva
// NON-STATIC FIELD
System.out.println(error1.errorTyp);
// izpisva 1
System.out.println(error12.errorTyp);
// izpisva 12
System.out.println(GenuineError.errorTyp);
// ne se kompilira, izvejda greshkata, za koiato pitash
ako ne ti e iasno kakva e razlikata m/u class i object, ili ne razbirash izcialo za kakvo govoria, moje bi triabva da prochetesh parvo malko literatura, zashtoto tova sa osnovni neshta, neshto kato neobhodim minimum
public class GenuineError {
//...
}
triabva da se namira vav file
GenuineError.java
kato pri tova vnimavash za spazvane na glavni/malki bukvi, zashtoto compilatora i toi vnimava za tia raboti.
vsichkite .java file-ove triabva da sa v direktoria, vkluchena v sistemnata promenliva CLASSPATH. ako sa v edna i sashta direktoria, v CLASSPATH-a triabva da imash tochka, t.e.
CLASSPATH=c:\java\;.
(vijdash li tochkata kato otdelna deklaracia na pat v classpath-a? tova imam predvid), za da moje 'compilatora' da se orientira da tarsi drugite file-ove v sashtata dir.
non-static fields... mii nadiavam se da go obiasnia taka, che da me razberesh, no ne garantiram : )
grshkata se poiaviava, kogato polzvash non-static promenlivi (fields) ili metodi v statichen metod, v tvoia sluchai, nai-veroiatno v main method-a. non-static fieldovete imat smisal samo kato chast ot obekt, a ne prosto kato promenlivi. za razlika ot tiah static fieldovete imat smisal (razbirai vajat) za class-a po princip.
razlikata se vijda, pri polojenie che imash mnogo obekti ot edin class, koito ima dve promenlivi (field-ove) - ednata static, drugata ne.
public class GenuineError {
public static int errorsCount = 0;
public int errorType = -1;
public GenuineError (int errorType) {
this.errorType = errorType;
errorCounter ++;
}
}
ako si napravish 10 obekta ot tozi class chrez konstruktora GenuineError(int errorType), vseki ot sazdadenite obekti shte ima takav errorType, kakavto mu zadadesh, t.e. mogat da ima razlichni errorType-ove - tova e non-static field, no pri incrementiraneto na errorCounter-a, se incrementira edna promenliva za vsichki obekti ot class-a - ako sazdadesh 18 obekta, poleto errorsCounter za vsichkite shte ima stoinost 18 - tova e static field. vsashnost, statichnoto pole errorsCounter shte bade fizicheski edno i sashto za vsichkite obekti. do nego mojesh da se obarnesh i chrez samia class:
GenuineError error1 = new GenuineError(1);
GenuineError error12 = new GenuineError(12);
GenuineError error32 = new GenuineError(32);
// STATIC FIELD
System.out.println(error1.errorsCounter);
// izpisva 3
System.out.println(GenuineError.errorsCounter);
// otnovo izpisva 3, stava duma za sashtata promenliva
// NON-STATIC FIELD
System.out.println(error1.errorTyp);
// izpisva 1
System.out.println(error12.errorTyp);
// izpisva 12
System.out.println(GenuineError.errorTyp);
// ne se kompilira, izvejda greshkata, za koiato pitash
ako ne ti e iasno kakva e razlikata m/u class i object, ili ne razbirash izcialo za kakvo govoria, moje bi triabva da prochetesh parvo malko literatura, zashtoto tova sa osnovni neshta, neshto kato neobhodim minimum
Re: [Java newbie] Greshki pri kompilirane
Ясно!
Започва да ми се избистря!
Въпрос:
Доколко да "злоупотребява" човек с ползването на класове?
Поздрави,
Мира
PS: Благодаря за link-a! Книгата си я свалих и започнах да я чета :)
Започва да ми се избистря!
Въпрос:
Доколко да "злоупотребява" човек с ползването на класове?
Поздрави,
Мира
PS: Благодаря за link-a! Книгата си я свалих и започнах да я чета :)
objects vs. procedure
ima mnogo podhodi, eto ti edin za nachalo:
opisvash procesa na raka, sled tova si podchertavash sashtestvitelnite v text-a, tova sa ti obektite, a glagolite sa ti metodite. ako dotuk se spravish i ti ostavat priznaci na sashtestvitelnite (prilagatelni), tova sa ti interface-ite. class-a nai-chesto predstavliava abstrakcia na realna grupa obekti, a ne prosto savkupnost ot funkcionalnost. za nachalo gledai da niamash ogromni class-ove, ne se zaigravai mnogo s naslediavaneto (favour the composition), i da niamash method-i mnogo nad 20 reda.
i ako iskash da si dobra : ) pishi code i cheti knigi.
opisvash procesa na raka, sled tova si podchertavash sashtestvitelnite v text-a, tova sa ti obektite, a glagolite sa ti metodite. ako dotuk se spravish i ti ostavat priznaci na sashtestvitelnite (prilagatelni), tova sa ti interface-ite. class-a nai-chesto predstavliava abstrakcia na realna grupa obekti, a ne prosto savkupnost ot funkcionalnost. za nachalo gledai da niamash ogromni class-ove, ne se zaigravai mnogo s naslediavaneto (favour the composition), i da niamash method-i mnogo nad 20 reda.
i ako iskash da si dobra : ) pishi code i cheti knigi.
Re: objects vs. procedure
:) Благодаря за съвета! Това и смятам да направя, само да ми се отвори малко временце. Че в момента е малко кът и се чудя за кое по-напред.
Има ли някоя българска книга, която може да се препоръча?
Януари ще си ходя до България и да знам дали да се оглеждам за нещо интересно или да го оставя на чуждоезикова литература (немска, английска: няма значение).
Благодаря предварително.
Поздрави,
Мира
Има ли някоя българска книга, която може да се препоръча?
Януари ще си ходя до България и да знам дали да се оглеждам за нещо интересно или да го оставя на чуждоезикова литература (немска, английска: няма значение).
Благодаря предварително.
Поздрави,
Мира