[Java newbie] Greshki pri kompilirane

5 отговора 153 прегледа
#1

[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. Обаче нещо синдрома "жени и текника", взе че се прояви и вече нямам идеи, освен да питам тук :(

поздрави,
Мира

Отговор
в отговор на Yoro #2

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.

Отговор
в отговор на Yoro #3

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

Отговор
в отговор на lexo #4

Re: [Java newbie] Greshki pri kompilirane

Ясно!
Започва да ми се избистря!

Въпрос:
Доколко да "злоупотребява" човек с ползването на класове?

Поздрави,
Мира

PS: Благодаря за link-a! Книгата си я свалих и започнах да я чета :)

Отговор
в отговор на Yoro #5

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.

Отговор
в отговор на lexo #6

Re: objects vs. procedure

:) Благодаря за съвета! Това и смятам да направя, само да ми се отвори малко временце. Че в момента е малко кът и се чудя за кое по-напред.

Има ли някоя българска книга, която може да се препоръча?
Януари ще си ходя до България и да знам дали да се оглеждам за нещо интересно или да го оставя на чуждоезикова литература (немска, английска: няма значение).

Благодаря предварително.

Поздрави,
Мира

Отговор