java中关于创建对象,初始化和给类赋值的问题。

class A
{
String a="class A";
}
class B extends A
{
String b="class B";
String a="class c";
}
class exam
{
public static void main(String args[])
{
A a1,a2=new A();
B b1,b2=new B();

System.out.println(a1.a);
System.out.println(b1.b);
}
}
这里它说a1.a和b1.b未被初始化。a1不已经是新建A类的对象了么,a1.a就调用A里的a就好了么,为啥还要初始化。。
还有
class A
{
String a="class A";
}
class B extends A
{
String b="class B";
String a="class c";
}
class exam
{
public static void main(String args[])
{
A a1,a2=new A();
B b1,b2=new B();
a1=b2;
b1=(B)a1;
System.out.println(a1.a);
System.out.println(b1.b);
}
}
就对了。。这b2不也是新建的对象么,咋就能给别人赋值,按理他自己也还没初始化了。。

下面主要是说明一下在Java语言中,创建对象和对象赋值的问题。

1、创建对象必定会涉及到对象被初始化的问题,因为在Java语言中一个对象如果不被初始化就使用的话,是会抛出一个空指针异常,如下

String x;
x = null;
System.out.println(x.toUpperCase());

Exception in thread "main" java.lang.NullPointerException

2、如何初始化,使用new关键字初始化

String o1 = new String("zhangsan");

3、对象之间的赋值

String o2 = "zhangsan";

"zhangsan"是一个匿名的字符串对象,又被称为字符串常量,将一个字符串常量对象赋值给一个申明类的字符串对象,o2在栈中存放了“zhangsan”的引用地址,所以最有效的赋值是

String o2 = "zhangsan";//系统开销小
String o1 = new String("zhangsan");//系统开销大

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2016-09-28
A a1,a2=new A();
B b1,b2=new B();
这里的只有a2和b2已经初始化,但是a1和b1没有初始化

A a1,a2=new A();
B b1,b2=new B();
a1=b2;
b1=(B)a1;
这里是把b2初始化,然后赋值给a1,也就是a1和b2持有相同的对象,然后再把a1赋值给b1,相当于a1,a2,b1,b2都初始化了本回答被提问者采纳
相似回答