静态方法与普通方法区别

静态的内存空间是固定的,相对来说更省资源。创实例的创一个实例就要开辟一个新内存,耗费资源
静态方法属于类所有,类实例化前即可使用;
非静态方法可以访问类中的任何成员,静态方法只能访问类中的静态成员;
因为静态方法在类实例化前就可以使用,而类中的非静态变量必须在实例化之后才能分配内存;
static内部只能出现static变量和其他static方法!而且static方法中还不能使用this等关键字,因为它是属于整个类;
静态方法效率上要比实例化高,静态方法的缺点是不自动进行销毁,而实例化的则可以做销毁;
静态方法和静态变量创建后始终使用同一块内存,而使用实例的方式会创建多个内存。
主要区别:静态方法在创建对象前就可以使用了,非静态方法必须通过new出来的对象调用。
静态方法可以通过 类名::方法名直接调用。普通方法需要创建一个实例,也就是new一个对象,然后通过 对象名->方法名的方式来调用
静态类只能包含静态成员,否则会抛出编译错误;然而非静态类既可以包含非静态成员也可以包含静态成员
静态类是不能实例化,之所以不能实例化,是因为静态类会导致C#编译器将该类同时标记为abstract和sealed,并且编译器不会在类型中
生成一个实例的构造函数,从而导致静态类不能实例化;非静态类可以,并且静态成员的访问只能通过类来进行访问,因为静态成员是属于类的。
  • 30
    点赞
  • 93
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
在Java中,synchronized关键字用于控制多个线程对共享资源的并发访问。synchronized既可用于实例方法,也可用于静态方法。但是,对于静态方法和实例方法,synchronized在效果上是有区别的。 实例方法: 当一个线程调用对象的实例方法时,它会获得该实例的锁,这意味着其他线程无法在同时调用该实例的同一个同步方法。但是,不同实例的同步方法可以同时运行,因为它们拥有不同的锁。这是因为每个实例都有一个隐式的锁对象,线程必须持有该锁对象才能进入同步代码块。例如: ``` public synchronized void method() { //code } ``` 修饰实例方法时,在多线程并发时相当于对类实例加了一个锁,只要线程获得了该实例的锁,就可以执行synchronized方法体中的代码了。 静态方法静态方法使用synchronized修饰时,该方法相当于只有一个实例(类实例)并被该实例所锁定。多线程并发时,只要线程获得了类对象(class)的锁,就可以执行synchronized方法体中的代码了。例如: ``` public static synchronized void method() { //code } ``` 修饰静态方法时,在多线程并发时相当于对类实例加了一个锁,只有一个线程能执行类中的同步方法(synchronized修饰的方法),而无法执行其他线程的同步方法。 综上所述,synchronized用于静态方法普通方法是有区别的。在多线程并发时,synchronized修饰的实例方法是以对象为锁,而synchronized修饰的静态方法是以类为锁。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值