java中的动态方法是需要实例化才能调用的。那为什么,变量也能调用方法。
例如String a;没有初始化也能调用方法,String a=null;与String a=new String();有什么区别。求教
追问:那String a="abc"和String a= new String("abc");有什么区别
例如String a;没有初始化也能调用方法,String a=null;与String a=new String();有什么区别。求教
追问:那String a="abc"和String a= new String("abc");有什么区别
其他:1--首先string也是一个类,是JAVA中已经事先定义好的,这样就方便我们开发者直接使用(你知道了这点我想你大概应该清楚了)
2--每当我们创建一个对象的时候会在栈内存(或堆内存中开辟空间)
3--string a时,我们就在栈内存中开辟了一个空间,空间的名字就叫a,此时不会在栈内存中开辟空间。
4--string a=null和string a是一样的,当我们用的时候由于没有初始化,所以都不能用的,因为没有a没有指向任何地址,引用
5--string a=new string()有点不一样,不但在内存中开辟了一个空间,空间名为a,还在堆内存总开辟了一段空间,里面存的是你给a赋的值,并会将此空间的地址给a空间,那么a空间中存储的是堆中那个空间的地址。这时a已经有所指向了。
注:你要理解string也是一种类
希望我的回答对你有用 如果是把String a定义成“成员变量”,就是说在方法外部定义的,jvm会自动给这个变量初始化成a=null;a=null是已经实例化了的。当用null的a去调用String中的方法时会报空指针异常,如System.out.println(a.length());//报nullpointexception异常
而把String a定义在方法体内,如main方法中定义了String a2;然后不给a2赋值初始化,马上写
System.out.println(a2.length());//此时,不是报空指针异常,而是编译都不通过(即不符合语法要求),因为此时a2没有初始化化,不能调用方法!a则是已经初始化了的,null值也是一个初始值。
至于null跟 new String()的区别,很好理解的:
a=null; 是说:a还没成形,内存中还没有这个对象;
a=new String(); 是说,a已经成了一个对象,在内存中分配了一个空间给a,只是此时这个空间上时一张白纸,还没有放东西到这快空间上;
简言之:(String比喻成一个碗)
a=null; 还没有这个碗;
a=new String(); 有这个碗,但碗里没有饭菜
a=new String("abcd"); 有这个碗,而且碗里有饭菜。
不知这么说你明不明白。。。仅供参考。 1、类在类加载的时候他的静态方法和静态属性会被初始化,就是说就算这个类没有新建对象,他的静态方法和静态属性也是存在的。
2、Object a=null;声明了一个Object类型的引用(相当于一个指针),但是它没有指向任何对象。
3、new Object();这一句会在内存中根据Object类构建出一个Object类的对象,然后将这个对象的内存地址返回。就是说Object a=new Object();这个式子的意思是:赋值号右边的式子返回了一个Object对象的内存地址,然后通过赋值号赋给了a。
4、当声明Object a=null;时,a就算没有指向对象,但是Object这个类已经被加载的话,他的静态变量和方法就已被初始化了,所以可以调用。
5、关于String a=“abc”; 和String a=new String(“abc”);的区别:因为字符串对象是一个非常非常常用的对象,所以jvm会开辟一片公共内存来保存字符串。String a="abc";这一句会直接在公共区创建字符串“abc”,然后让a指向公共区的“abc”。String a=new String("abc");也会在公共数据区新建一个"abc",但是还会另外开辟一片空间保存一个"abc"字符串,然后将这个另外开辟的空间的地址返回给a,即创建了两个"abc"。另外需要注意的是,当String a="abc"; String b=“abc”;时,因为"abc"在公共区在第一句String a="abc";已经创建过,所以在第二句 String b=“abc”;时,不会创建新的"abc",而是将“abc”地址直接返回,所以在a==b这个判断式,会返回true。
上一个:我想写一个java网页版的即使通讯工具类似QQ求高手指导
下一个:struts2标签中labelposition属性如何使用