webForumDet fria alternativet

java.lang.NoClassDefFoundError

3 svar · 452 visningar · startad av nordan

nordanMedlem sedan juni 2000949 inlägg
#1

Hej!
Skulle pröva på att skriva lite java kod men fastna på en gång.
Jag har testat och skrivigt detta:
<font size="1" face="Verdana, Arial, Helvetica, sans-serif">Kod:<font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#666600">
class test{
public static void main(String[] args) {
System.out.println("Hello World!");
}
}

och det funkar utmärkt med att kompilera koden. Men när jag skriver java test.class så får jag detta medelande :q

Exception in thread "main" java.lang.NoClassDefFoundError: test/class

Är det någon som vet hur man kan få till detta så att det funkar att köra koden :q

------------------
/nordan

niclas.jMedlem sedan juni 2000120 inlägg
#2

hej...jag är ingen hejare på java. men skriv bara java test när du ska köra koden.. alltså inte java test.class

//niclas

------------------
ingenting är omöjligt det tar bara lite längre tid..

GrymtMedlem sedan dec. 20011 685 inlägg
#3

ska det inte vara public class test{
i början eller behövs inte det?

Är inte så het.

------------------
Not yet... but soon.

LimeMedlem sedan sep. 2001961 inlägg
#4

Nu börjar vi bli lite avancerade.

Det där har med åtkomstdeklaratorer att göra. Åtkomstdeklaratorerna i java är public, privat, protected och package.

De olika åtkomstdeklarationerna ger åtkomst till andra enligt följande lilla schema:

Spec       &#0124;class&#0124;subclass&#0124;package&#0124;world
-----------+-----+--------+-------+-----
private    &#0124;  x  &#0124;        &#0124;       &#0124;     
protected  &#0124;  x  &#0124;    x*  &#0124;   x   &#0124;
public     &#0124;  x  &#0124;    x   &#0124;   x   &#0124;  x
package    &#0124;  x  &#0124;        &#0124;   x   &#0124;

Private: Detta är den "strängaste". Den ger bara klassen själv tillåtelse att använda metoder eller variabler.

Om vi skapar två klasser Alpha och Beta så ser du att Beta inte kan komma åt variablerna i Alpha.

class Alpha {
  private int iamprivate;
  
  private void privateMethod() {
    System.out.println("privateMethod");
  }
} // Alpha

class Beta {
   void accessMethod() {
     Alpha a = new Alpha();
     a.iamprivate = 10;      // illegal
     a.privateMethod();      // illegal
    }
} // Beta

Protected: Denna modifiator gör att alla klasser i samma paket eller subklasser av denna klassen får åtkomst till variabeln eller metoden, förutom själva klassen då.

Denna är dock lite knepig.

Om vi modifierar våra klasser från Private:

package Greek;

         public class Alpha {
             protected int iamprotected;
             protected void protectedMethod() {
                 System.out.println("protectedMethod");
             }
         }

package Greek;

         class Gamma {
             void accessMethod() {
                 Alpha a = new Alpha();
                 a.iamprotected = 10;    // legal
                 a.protectedMethod();    // legal
             }
         }

Så lång är ingen underligt. Dom ligger i samma paket och kan därför komma åt varandras saker.

Vi gör en ny klass, Delta:

package Latin;

         import Greek.*;

         class Delta extends Alpha {
             void accessMethod(Alpha a, Delta d) {
                 a.iamprotected = 10;    // illegal
                 d.iamprotected = 10;    // legal
                 a.protectedMethod();    // illegal
                 d.protectedMethod();    // legal
             }
         }

Denna ligger i ett annat paket. Den kommer åt Alphas saker eftersom den är en subklass men inte Betas eftersom den ligger i ett annat paket.

Public: Denna betyder att vem som helst får anropa metoden eller modifiera variabeln direkt genom att t.ex. skriva klassInstans.variabel = "modifierad".
Här är nästan allt tillåtet...

Package: Den här är lite som protected, men med skillnaden att även om det är en subklass, så måste klassen finnas i samma paket för att kunna få åtkomst.

Detta är vad som gäller för metoder och variabler...

Klassdeklaration:
=================

Insåg halvvägs att det inte alls var det ovanstående du frågade efter men tänkte att det kunde vara nyttigt i allafall.

Vi tittar lite på klassdeklarationer istället.

Den ser ut såhär:


[public&#0124;abstract&#0124;final] class <ClassName> [extends <SuperClass>] [implements] <Interface 1> <Interface 2> ... <Interface n> {
Classbody
}

Om man deklarerar en klass public kan vem som helst skapa en instans av den.

Om man deklarerar den abstract kan ingen skapa en instans av den. Den är till för att ärvas ifrån, antingen som interface eller som superklass.

Om man gör en final menar man att ingen får ärva från denna klass. Man kan göra public final men aldrig abstract final...

Om man inte skriver public menar man att klassen bara kan användas av klasser som ligger i samma paket som den deklarerade klassen.

Det mesta av materialet är hämtat (och nerkortat) från det utbildningsmaterial vi använder på Eneas "Grundkurs i Java". Denna baserar sig i sin tur på http://java.sun.com/docs/books/tutorial/java/TOC.html som är mycket bra läsning.

/Lime

------------------
Praeterea conseo microsoftenem esse delendam.
- modernt latinskt ordspråk

[Redigerat av Lime den 06 sep 2001]

130 ms totalt · 3 externa anrop · v20260731065814-full.0e50b1ef
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
126 ms — hämta tråd, inlägg och bilagor (db)