/ 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
Underlig dynamisk binding...
Fra : Jesper Lillesø


Dato : 10-07-01 15:07

Hej

Jeg har oplevet en lidt underlig ting ved Java (på linux). Se mit eksempel i
bunden.

Hvorfor er det lige at mit member "t" forbliver null i m2?

--------------

bash$ java -version
java version "1.3.0"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.3.0)
Java HotSpot(TM) Client VM (build 1.3.0, mixed mode)
bash$ javac dk/logiva/test/Strange.java
bash$ java -cp . dk.logiva.test.Strange
m1: t is not null
m2: t is null
Hmmm
bash$
--------------------
bash$ java -classic -version
java version "1.3.0"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.3.0)
Classic VM (build 1.3.0, green threads, nojit)
bash$ javac -classic dk/logiva/test/Strange.java
bash$ java -classic -cp . dk.logiva.test.Strange
m1: t is not null
m2: t is null
Hmmm
bash$
------ source ------
package dk.logiva.test;

import java.lang.String;
import java.util.Hashtable;

public class Strange {
public static void main(String[] args) throws Exception {
B o = new B();
System.out.println(o.m2());
}
}

class B extends A {
Hashtable t = null;

B() {
super();
}

void m1() {
t = new Hashtable();
t.put("Hello", "World");
if(t == null) {
System.out.println("m1: t is null");
} else {
System.out.println("m1: t is not null");
}
}

String m2() {
if(t == null) {
System.out.println("m2: t is null");
} else {
System.out.println("m2: t is not null");
}
return "Hmmm";
}
}

 
 
Morten Primdahl (10-07-2001)
Kommentar
Fra : Morten Primdahl


Dato : 10-07-01 15:58

"Jesper Lillesø" wrote:
>
> Hej
>
> Jeg har oplevet en lidt underlig ting ved Java (på linux). Se mit eksempel i
> bunden.

Dit eksempel er vist ikke kommet helt med. Hvad er A?
I dit eksempel bliver B.m1 aldrig kaldt, men du får output
m1: t is not null

Morten

--
Morten Primdahl Caput A/S Tel +45 70 12 24 42
morten@caput.com Nygade 6 Fax +45 70 11 24 42
http://www.caput.com/ DK-1164 Kbh K

Jesper Lillesø (10-07-2001)
Kommentar
Fra : Jesper Lillesø


Dato : 10-07-01 16:09

Morten Primdahl <morten@caput.com> wrote in
<3B4B17FE.B2732CD5@caput.com>:

>"Jesper Lillesø" wrote:
>>
>> Hej
>>
>> Jeg har oplevet en lidt underlig ting ved Java (på linux). Se mit
>> eksempel i bunden.
>
>Dit eksempel er vist ikke kommet helt med. Hvad er A?
>I dit eksempel bliver B.m1 aldrig kaldt, men du får output
>m1: t is not null

Ups...

Her er det:

bash$ java -version
java version "1.3.0"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.3.0)
Java HotSpot(TM) Client VM (build 1.3.0, mixed mode)
bash$ javac dk/logiva/test/Strange.java
bash$ java -cp . dk.logiva.test.Strange
m1: t is not null
m2: t is null
Hmmm
bash$
--------------------
bash$ java -classic -version
java version "1.3.0"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.3.0)
Classic VM (build 1.3.0, green threads, nojit)
bash$ javac -classic dk/logiva/test/Strange.java
bash$ java -classic -cp . dk.logiva.test.Strange
m1: t is not null
m2: t is null
Hmmm
bash$
------ source ------
package dk.logiva.test;

import java.lang.String;
import java.util.Hashtable;

public class Strange {
public static void main(String[] args) throws Exception {
B o = new B();
System.out.println(o.m2());
}
}

abstract class A {
A() {
m1();
}

abstract void m1();
}


class B extends A {
Hashtable t = null;

B() {
super();
}

void m1() {
t = new Hashtable();
t.put("Hello", "World");
if(t == null) {
System.out.println("m1: t is null");
} else {
System.out.println("m1: t is not null");
}
}

String m2() {
if(t == null) {
System.out.println("m2: t is null");
} else {
System.out.println("m2: t is not null");
}
return "Hmmm";
}
}

Ole Nielsby (10-07-2001)
Kommentar
Fra : Ole Nielsby


Dato : 10-07-01 17:29


Jesper Lillesø <frogskins@lycosmail.com> skrev:

> Hej
>
> Jeg har oplevet en lidt underlig ting ved Java (på linux). Se mit eksempel
i
> bunden.
>
> Hvorfor er det lige at mit member "t" forbliver null i m2?
>
> ------ output --------
> m1: t is not null
> m2: t is null
> Hmmm
> ------ source ------
> package dk.logiva.test;
>
> import java.lang.String;
> import java.util.Hashtable;
>
> public class Strange {
> public static void main(String[] args) throws Exception {
> B o = new B();
> System.out.println(o.m2());
> }
> }
>
> class B extends A {
> Hashtable t = null;

Dette oversættes til en erklæring: Hashtable t;
-samt en assignment i constructoren: t = null;

> B() {

Denne assignment indsættes ikke her...

> super();

men her. Superklassen initialiseres altid først.

> }

Du tricker superklassen til at bruge subklassen inden
den er initialiseret.

ON/***fjern sneglen fra min svaradresse***


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

Månedens bedste
Årets bedste
Sidste års bedste