> 信息中心 >

静态方法中实例化的对象问题

来源:互联网 编辑:王阿强

有网友碰到过这样的问题:静态方法中实例化的对象问题,问题详细内容为:

namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
try
{
User user =null;
user.ToHelloWorld ();
if (user == null)
{
Console.Write("world");
Console.Read();
}
else
{
Console.Write(user.UserName);
Console.Read();
}

} catch { Console.Write("hello world"); Console.Read(); } } } public class User { public string UserId { get; set; } public string UserName { get; set; } } public static class UserExtention { public static void ToHelloWorld(this User user) { if (user == null) { user = new User() { UserName = "hello" }; } } }

}

这段代码的输出结果为WORLD。调试发现在执行完 user.ToHelloWorld ();后User还是为NULL。请问大神们这是为什么?

C# ,我搜你通过互联网收集了相关的一些解决方案,希望对有过相同或者相似问题的网友提供帮助,具体如下:

解决方案1:
User user =null; 和 静态类下的扩展 是2个不同的对象 收获园豆:5
解决方案2:
User user =null;
user.ToHelloWorld (); 一个为null的user对象。对于null对象,你是无法操作其属性的。 初始化对象的时候不建议初始化为null。 User user =null; 改为  User user = new User { UserId="XXX",UserName="XXX"};
解决方案3:
静态类的扩展方法是一个语法糖,
user.ToHelloWorld ()其实就是UserExtention.ToHelloWorld (user);
如果了解参数的传递,你就知道方法里的User user只是一个副本。
除非用ref修饰参数,不过用this修改的参数不能用ref修饰

为什么不能在静态方法中调用实例对象

答:实例对象 是在new 出来后 才存在的。 静态 是一开始最先加载的。 加载 静态时。实例对象在内存中还不存在。 所以不行。

为什么静态方法不用被实例化

答:静态变量 在java也叫类变量从名字可以看出它是属于某个类的而不是类的实例。它的关键字是static存储在静态存储区,当程序执行,类的代码被加载到内存,类的静态变量就分配了内存空间,他是属于类的也就是没个实例对象都是对于以个静态变量,静态...

JAVA静态函数实例化问题。

答:问题1:只有第一次的时候会调用实例化,因为你有if (instance == null) 的判断,而instance又是一个静态变量。或者其他地方有释放的时候,再运行过这个函数也会再实例化一次。 问题2:用static声明的方法是静态方法,在调用该方法时,不会将对象...

静态方法和实例化方法的区别

答:静态方法的调用,是类名后直接加静态方法即可。实例方法必须将类实例化后,用实例调用该实例方法。 静态方法,只能调用类中的其他静态属性和静态方法,不能调用类中的非静态属性和非静态方法。 实例方法,可以调用静态属性和静态方法,也可以调...

java 为什么不能在类中实例化对象,而一定要在方法...

答:把变量设为静态 因为main方法是静态的,而你的实例化对象不是静态的,没法直接引用。

PHP手册说静态属性不能通过一个类已实例化的对象来...

答:我想手册上说的是用这种方式来访问: print $foo->$my_static 他这里说的静态方法访问是指:: 翻译有歧义的时候你可以看看英文版。

Java中可以直接调用类中静态方法,为什么不用实例...

答:好吧,我来试试看,看答案能不能够让你满意。 先通俗的分析下,我们把类看作是一个房子。房子里面有家具,桌椅板凳之类的,房子里面还有人。 房子里面所有的人都应该是共有一套家具的。也就是说,这些家具是唯一的,如果某个家具坏了,那么大家...

java中静态方法为什么不用实例化

答:静态方法,静态类都是直接就在程序运行的时候就加载了。实例化是我们在需要使用某个方法的时候才去实例化类,再调用方法

main方法是静态方法,为什么能直接实例化对象

答:静态方法是类具有的,调用的时候不需要new对象,只需要“类名.方法名”就可以了。静态方法一个类只保留一份。静态方法在内存里存放在栈中。 普通方法,在new对象的时候才被分配内存,存放在堆中。 栈和堆是内存的两个区域。 举例: 类A有静态方法m...

静态方法中不能直接访问同一类中的非静态成员,而...

答:public class Ex { int i =123; public static void main(String args[]) { int temp = 0; //temp = i; //System.out.println(temp); Ex e = new Ex(); temp = e.i; System.out.println(temp); } } 注释掉的就是不能直接访问的例子

Java中可以直接调用类中静态方法,不用实例化么,详解!原理

而每new一个类的对象,系统就会重新在 堆内存中开辟一个新空间来存放该类的实例对... 静态方法只中不能调用非静态方法。因为被static修饰的方法会首先被Classloader对象...

link中静态方法不需要实例化对象,所以效率要比实例对象要高,这...

静态方法不能访问非静态的成员,这是一个弊端,而且就算有性能上的差别,也可以忽略不计。

静态方法,不要实例化对象怎么使用方法?

你类的名字.方法名. 但是静态方法虽然简单, 调用不需要实例化, 但是不要乱用,,因为很消耗内存

main方法是静态方法,为什么能直接实例化对象

静态方法是类具有的,调用的时候不需要new对象,只需要"类名.方法名"就可以了。静态方法一个类只保留一份。静态方法在内存里存放在栈中。 普通方法,在new对象的时候才被...

Java中可以直接调用类中静态方法,不用实例化么,详解!原理

而每new一个类的对象,系统就会重新在 堆内存中开辟一个新空间来存放该类的实例对象... 静态方法只中不能调用非静态方法。因为被static修饰的方法会首先被Classloader对象...

JAVA中实例化是为了方法可以给一个对象用,那为什么静态的方...

类A有静态方法mA,方法cA。 分别new A的对象 A1 和 A2 这时候内存中只存在一个方法mA,存在两个方法 cA,这两个方法一个是A1对象的一个是A2对象的。 调用mA方法 ...

c#静态方法中为什么可以调用非静态的构造函数?比如实例化对...

为什么不可以调用?静态方法不过是一段程序而已,所有的程序的入口都必须是静态的,不然无法运行,静态的程序不能调实例化方法,那跟C还有什么区别。 讲白了方法什么的其...

循环调用静态方法 和 先实例化一个对象 在循环调用对象的方法...

你是想实现个什么东东?

php 实例化对象为什么可以访问静态属性

展开全部 实例化的对象不能访问静态属性,但是没有说不能用实例化的对象方法访问静态属性。 意思是不能通过($对象名->静态变量)这种方式访问 可以通过$foo::$my_static...

java中静态类能否实例化

静态成员时需要实例化它); 而在一个类内部定义另一个类,如果该内部类不是静态的,需要实例化它,就得先有一个外部类的对象, 如:public class A{ public class B{} } 实例化B...


请注意,本站信息均收集自互联网,相关信息仅供参考,医疗等重要信息请以正规途径为最终意见,本站不承担任何责任!

www.wosoni.com false 互联网 http://www.wosoni.com/blogcnk/mm/ccdeik.html report 5125 解决方案1:User user =null; 和 静态类下的扩展 是2个不同的对象收获园豆:5解决方案2:User user =null; user.ToHelloWorld ();一个为null的user对象。对于null对象,你是无法操作其属性的。初始化对象的时候不建议初始化为null。User user =null; 改为  User user = new User { UserId="XXX",UserName="XXX"};解决方案3:静

热门图片