/ Forside / Teknologi / Udvikling / Java / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Java
#NavnPoint
molokyle 3688
Klaudi 855
strarup 740
Forvirret 660
gøgeungen 500
Teil 373
Stouenberg 360
vnc 360
pmbruun 341
10  mccracken 320
Abstrakt indre klasse
Fra : Mads Pedersen


Dato : 28-06-01 17:31

Hej allesammen!

Lige et spørgsmål her i sommervarmen:
Kan man lave en abstrakt indre klasse i en abstrakt klasse? Det er så
meningen, at den abstrakte klasses abstrakte indre klasse også skal
overskrives i en subklasse. Hehe, noget af en smøre!


På forhånd tak og med venlig hilsen,
Mads Pedersen
mads@mads-p.dk




 
 
Ulrik Magnusson (28-06-2001)
Kommentar
Fra : Ulrik Magnusson


Dato : 28-06-01 17:42



Mads Pedersen wrote:

> Kan man lave en abstrakt indre klasse i en abstrakt klasse? Det er så
> meningen, at den abstrakte klasses abstrakte indre klasse også skal
> overskrives i en subklasse. Hehe, noget af en smøre!

Jeg kan ikke lige se, hvad du skal bruge det til, og det bliver nok lidt
rodet,
men jo, det kan man godt:

abstract class A
{
protected abstract class AI
{}
}

class B extends A
{
private abstract class BI extends AI
{}
}

Ulrik Magnusson


Jonas Kongslund (28-06-2001)
Kommentar
Fra : Jonas Kongslund


Dato : 28-06-01 18:06

Ulrik Magnusson wrote:
> Jeg kan ikke lige se, hvad du skal bruge det til, og det bliver nok lidt
> rodet, men jo, det kan man godt:

Jeg vil lige bidrage med en anden kuriøsitet. Flg. kode er lovlig:

class A {
class B extends A {
}
}

Hvem kan komme med en fornuftig ide til, hvad man kan bruge dette til?

--
Jonas Kongslund, http://kongslund.dk

Ulrik Magnusson (28-06-2001)
Kommentar
Fra : Ulrik Magnusson


Dato : 28-06-01 18:13



Jonas Kongslund wrote:

> Jeg vil lige bidrage med en anden kuriøsitet. Flg. kode er lovlig:
>
> class A {
> class B extends A {
> }
> }
>
> Hvem kan komme med en fornuftig ide til, hvad man kan bruge dette til?

Et godt spørgsmål er måske, hvad følgende skriver ud:

class A
{
A()
{
System.out.println("A()");
new B();
}
class B extends A
{
B()
{
System.out.println("B()");
}
}

public static void main( String[] args )
{
new A();
}
}

Svaret lægger jeg i reply til denne for ikke at ødelægge quiz'en

Ulrik Magnusson


Ulrik Magnusson (28-06-2001)
Kommentar
Fra : Ulrik Magnusson


Dato : 28-06-01 18:18



Ulrik Magnusson wrote:

> Et godt spørgsmål er måske, hvad følgende skriver ud:
>
> class A
> {
> A()
> {
> System.out.println("A()");
> new B();
> }
> class B extends A
> {
> B()
> {
> System.out.println("B()");
> }
> }
>
> public static void main( String[] args )
> {
> new A();
> }
> }

Der skrives "A()" ud indtil fortolkeren crasher:
.
.
.
A()
A()
A()
A()
#
# An EXCEPTION_STACK_OVERFLOW exception has been detected in native code
outsid
the VM.
# Program counter=0xbffa367e
#
Press any key to continue . . .


AV AV AV! Det kan altså godt lade sig gøre at skrive meget, meget
grim kode i Java.

Ulrik Magnusson



Niels Teglsbo (29-06-2001)
Kommentar
Fra : Niels Teglsbo


Dato : 29-06-01 02:13

Ulrik Magnusson <ulrikm@yahoo.com> wrote:

> > Et godt spørgsmål er måske, hvad følgende skriver ud:
> >
> > class A
> > {
> > A()
> > {
> > System.out.println("A()");
> > new B();
> > }
> > class B extends A
> > {
> > B()
> > {

Her udføres default-konstruktøren A() og dermed rykker programmet
direkte til Nirvana.

> > System.out.println("B()");
> > }
> > }
> >
> > public static void main( String[] args )
> > {
> > new A();
> > }
> > }


> # An EXCEPTION_STACK_OVERFLOW exception has been detected in native code
> outsid
> the VM.
> # Program counter=0xbffa367e
> #
> Press any key to continue . . .

Er der ikke noget med, at VM ikke må crashe lige meget hvor elendig
bytekoden er?

--
Niels, The Offspring Mailinglist www.image.dk/~teglsbo

Jonas Kongslund (29-06-2001)
Kommentar
Fra : Jonas Kongslund


Dato : 29-06-01 03:57

Niels Teglsbo wrote:
> Er der ikke noget med, at VM ikke må crashe lige meget hvor elendig
> bytekoden er?

VM'en er godt klar over at der er noget galt og stopper derfor
udførelsen med en sigende fejlbesked. Det vil ikke give megen mening at
den forsætter da stakken ikke kan blive større.

--
Jonas Kongslund, http://kongslund.dk

Ulrik Magnusson (29-06-2001)
Kommentar
Fra : Ulrik Magnusson


Dato : 29-06-01 10:16


Niels Teglsbo wrote:

> > # An EXCEPTION_STACK_OVERFLOW exception has been detected in native code
> > outsid
> > the VM.
> > # Program counter=0xbffa367e
> > #
> > Press any key to continue . . .
>
> Er der ikke noget med, at VM ikke må crashe lige meget hvor elendig
> bytekoden er?

Jeg vil nu også mene at der skulle komme en StackOverflowError,
så det er en smule spooky.

Ulrik Magnusson


Ulrik Magnusson (29-06-2001)
Kommentar
Fra : Ulrik Magnusson


Dato : 29-06-01 10:33



Ulrik Magnusson wrote:

> Niels Teglsbo wrote:
> > > # An EXCEPTION_STACK_OVERFLOW exception has been detected in native code
> > > outsid
> > > the VM.
> > > # Program counter=0xbffa367e
> > > #
> > > Press any key to continue . . .
> >
> > Er der ikke noget med, at VM ikke må crashe lige meget hvor elendig
> > bytekoden er?
> Jeg vil nu også mene at der skulle komme en StackOverflowError,
> så det er en smule spooky.

nu prøvede jeg så at fange StackOverflowError, og stik imod al forventning
gik det godt:

class A
{
A()
{
new B();
}
class B extends A
{
B()
{}
}
public static void main( String[] args )
{
try
{
new A();
}
catch( StackOverflowError e )
{
e.printStackTrace();
}
}
}

kørsel giver:

java.lang.StackOverflowError
at A.<init>(A.java:7)
at A$B.<init>(A.java:11)
at A.<init>(A.java:7)
at A$B.<init>(A.java:11)
at A.<init>(A.java:7)
etc

Der _bliver_ altså smidt en StackOverflowError, men den kommer
kun til syne, hvis man fanger den - forklaring udbedes.

Ulrik Magnusson


Niels Teglsbo (01-07-2001)
Kommentar
Fra : Niels Teglsbo


Dato : 01-07-01 22:23

Ulrik Magnusson <ulrikm@yahoo.com> wrote:

> nu prøvede jeg så at fange StackOverflowError, og stik imod al forventning
> gik det godt:
>
> class A
> {
> A()
> {

Hvis man indsætter System.out.println("A()"); her igen går det stadigvæk
galt.

> new B();
> }

Det er altså ikke fordi du fanger undtagelsen, men fordi du har fjernet
den linie det går godt.

Men hvorfor dør den så af System.out.println? Er det bare en bug i VM?

--
Niels, The Offspring Mailinglist www.image.dk/~teglsbo

Ulrik Magnusson (02-07-2001)
Kommentar
Fra : Ulrik Magnusson


Dato : 02-07-01 01:02

Niels Teglsbo wrote:

> Ulrik Magnusson <ulrikm@yahoo.com> wrote:
> > nu prøvede jeg så at fange StackOverflowError, og stik imod al forventning
> > gik det godt:
> >
> > class A
> > {
> > A()
> > {
> Hvis man indsætter System.out.println("A()"); her igen går det stadigvæk
> galt.
> > new B();
> > }
> Det er altså ikke fordi du fanger undtagelsen, men fordi du har fjernet
> den linie det går godt.

LOL! Ja, det har du da såre ret i - der kommer en StackOverflowError
uanset - med mindre man bruger System.out.println. Sorry.

> Men hvorfor dør den så af System.out.println? Er det bare en bug i VM?

Man kunne jo godt få den skumle mistanke..

Ulrik Magnusson




Niels Teglsbo (02-07-2001)
Kommentar
Fra : Niels Teglsbo


Dato : 02-07-01 02:09

Ulrik Magnusson <ulrikm@yahoo.com> wrote:

> > Men hvorfor dør den så af System.out.println? Er det bare en bug i VM?
> Man kunne jo godt få den skumle mistanke..

Gad vide hvordan den opfører sig med andre VM'er.

Jeg bruger Java 2 1.3.0_01 under Windows som VM og jeg oversatte med
Jikes 1.13.

--
Niels, The Offspring Mailinglist www.image.dk/~teglsbo

Ulrik Magnusson (02-07-2001)
Kommentar
Fra : Ulrik Magnusson


Dato : 02-07-01 08:05

Niels Teglsbo wrote:

> Jeg bruger Java 2 1.3.0_01 under Windows som VM og jeg oversatte med
> Jikes 1.13.

Jeg oversatte med javac i jdk 1.2.2 og crashede med
* java.exe i samme,
* hotspot version 1.3.0_01 samt
* jview version 5.00.3167

- alle under windows.

Ulrik Magnusson


Niels Teglsbo (02-07-2001)
Kommentar
Fra : Niels Teglsbo


Dato : 02-07-01 22:24

Ulrik Magnusson <ulrikm@yahoo.com> wrote:

> > Jeg bruger Java 2 1.3.0_01 under Windows som VM og jeg oversatte med
> > Jikes 1.13.
> Jeg oversatte med javac i jdk 1.2.2 og crashede med
> * java.exe i samme,
> * hotspot version 1.3.0_01 samt
> * jview version 5.00.3167
> - alle under windows.

Har nogen en Java, hvor den ikke crasher på?

--
Niels, The Offspring Mailinglist www.image.dk/~teglsbo

Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408929
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste