Java sux 2

6 отговора 0 прегледа
#1

Java sux 2

Имаме следната конструкция:

Class A {
public static B b = null;
}

class C {
public void some_f() {
Init_b();
А.b.doSomething(); // null pointer exception
}

public void Init_b() {
B new_b = new B();
A.b = new_b;
}
}

Оти се получава тъй?

Редактирано от Pekoнcтpykтop на

Отговор
в отговор на Pekoнcтpykтop #2

Re: Java sux 2

Това дето си го дал не се компилира, така че ми е леко странно как си получил Нулпойнтър.
На Ц е ясно, че всеки маже както знае, но на Джава методи именувани some_f() и Init_b() просто изглеждат грозно .
Самият код е доста странен, но не гърми.

package com.test;

public class Test {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
new C().some_f();
System.out.println("Success");
}

}

class A {
public static B b = null;
}

class B {
public void doSomething() {

}
}

class C {
public void some_f() {
Init_b();
A.b.doSomething(); // null pointer exception
}

public void Init_b() {
B new_b = new B();
A.b = new_b;
}
}

Редактирано от The lT Crowd на

Отговор
в отговор на Pekoнcтpykтop #3

Re: Java sux 2

да не би ексепшъна да изхвърчава вътре от функцията, и ти да се заблуждаваш че мембера е уж нула?




NE SUTOR ULTRA CREPIDAM
Отговор
в отговор на Pekoнcтpykтop #4

Re: Java sux 2

Ми би трябвало да нямаш null pointer exception.

Единствената ситуация, при която може да се случи това е ако garbage collector-a ти затрие B класа. Това обаче не знам как точно може да се случи при положение, че държиш референция към него в А класа и още повече е static променлива...Ама де да знам...то JVM-та има повече и от рибата в океана:-)

"A class or interface may be unloaded if and only if its defining class loader may be reclaimed by the garbage collector"

static
{
B new_b = new B();
A.b = new_b;
}// решава проблема - ако въобще наистина има проблем

Отговор
в отговор на Pekoнcтpykтop #5

Re: Java sux 2

My bad. Не трябва да се гледа код след като си обядвал, особено ако си ударил и една биричка.

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

Re: Java sux 2

Aarone, пак си недочел нещо. Нито ява, нито .НЕТ, нито езиците като концепция разбираш. Престани с глупавите обяснения.

Единствения начин да се случи халюцинацията на рекунструктора е присвояването да стане в един класлоудър а вземането от друг класлоудър за същия клас, понеже статичните променливи се реферират от зареден клас.

И този същия принцип го има в почти всички езици с виртуална машина спрямо начина на зареждане на код.

Това дето си го написал решава само проблема на психиатрите да ти поставят диагноза.

Отговор
в отговор на SOVlET SMARTASS #7

Re: Java sux 2

Ей мишок...мишко...Шта цункам да знайш:-)

Отговор