静态方法和非静态方法的区别

首先,两者本质上的区别是:静态方法是在类中使用staitc修饰的方法,在类定义的时候已经被装载和分配。而非静态方法是不加static关键字的方法,在类定义时没有占用内存,只有在类被实例化成对象时,对象调用该方法才被分配内存。

其次,静态方法中只能调用静态成员或者方法,不能调用非静态方法或者非静态成员,而非静态方法既可以调用静态成员或者方法又可以调用其他的非静态成员或者方法。

例子1:静态方法的Main方法访问类中的非静态成员方法。

class Test{

public int sum(int a,int b){//非静态方法

return a+b;

}

public static void main(String[] args){

int result=sum(1,2);//静态方法调用非静态方法

System.out.println("result="+result);

}

}

结论:以上程序在编译时,会提示静态方法不能引用非静态方法的错误信息。(如下图所示)

解决方法:

一、静态方法只能访问静态方法和静态成员。

class Test{

public static int sum(int a,int b){//加入static关键字,变成静态方法

return a+b;

}

public static void main(String[] args){

int result=sum(1,2);//静态方法调用静态方法

System.out.println("result="+result);

}

}

二、非静态方法要被实例化才能被静态方法调用。

class Test{

public int sum(int a,int b){

return a+b;

}

public static void main(String[] args){

Test test=new Test();//实例化类

int result=test.sum(1,2);//调用非静态方法

System.out.println("result="+result);

}

}

原文地址:https://www.cnblogs.com/xiewenyu/p/11495123.html

时间: 2024-10-08 22:55:19

静态方法和非静态方法的区别的相关文章

静态方法与非静态方法的区别

转自:http://joe5456536.blog.163.com/blog/static/8537477320117136658629/ http://www.cnblogs.com/devinzhang/archive/2012/04/27/2473570.html 我知道静态变量的使用要很小心,因为它在每个对象中是共享的.但是对于静态方法我的认识只局限于下面: ● 生命周期(Lifecycle): 静态方法(Static Method)与静态成员变量一样,属于类本身,在类装载的时候被装载到

C#中静态方法和非静态方法的区别

静态方法和非静态方法的区别: 1.静态方法不需要类实例化就可以调用,反之非静态方法需要实例化后才能调用: 2.静态方法只能访问静态成员和方法,非静态方法都可以访问: 3.静态方法不能标记为override,导致派生类不能重写,但是可以访问: 4.静态成员是在第一次使用时进行初始化.非静态的成员是在创建对象的时候,从内存分配上来说静态是连续的,非静态在内存的存储上是离散的,因此静态方法和非静态方法,在调用速度上,静态方法速度一定会快点,因为非静态方法需要实例化,分配内存,但静态方法不用,但是这种速

转 C#中静态方法与非静态方法区别比较

C#静态方法与非静态方法的区别不仅仅是概念上的,那么他们有什么具体的区别呢?让我们通过本文向你做一下解析. C#的类中可以包含两种方法:C#静态方法与非静态方法.那么他们的定义有什么不同呢?他们在使用上会有什么不同呢? 让我们来看看最直观的差别:使用了static 修饰符的方法为静态方法,反之则是非静态方法. 下面我们分四个方面来看看C#静态方法与非静态方法的差异: 比较一.C#静态成员①静态成员属于类所有,非静态成员属于类的实例所有.②每创建一个类的实例,都会在内存中为非静态成员新分配一块存储

c#静态方法和非静态方法区别

c#静态方法和非静态方法区别 C#的类中可以包含两种方法:C#静态方法与非静态方法.那么他们的定义有什么不同呢?他们在使用上会有什么不同呢?让我们来看看最直观的差别:使用了static 修饰符的方法为静态方法,反之则是非静态方法. 比较一.C#静态成员: 静态成员属于类所有,非静态成员属于类的实例所有. 每创建一个类的实例,都会在内存中为非静态成员新分配一块存储:静态成员属于类所有,为各个类的实例所公用,无论类创建了多少实例,类的静态成员在内存中只占同一块区域. 比较二.C#静态方法 C#静态方

静态方法与非静态方法

C#的类中可以包含两种方法:C#静态方法与非静态方法.让我们来看看最直观的差别:使用了static 修饰符的方法为静态方法,反之则是非静态方法.下面我们分四个方面来看看C#静态方法与非静态方法的差异:C#静态方法与非静态方法比较一.C#静态成员:①静态成员属于类所有,非静态成员属于类的实例所有.②每创建一个类的实例,都会在内存中为非静态成员新分配一块存储:静态成员属于类所有,为各个类的实例所公用,无论类创建了多少实例,类的静态成员在内存中只占同一块区域.C#静态方法与非静态方法比较二.C#静态方

静态方法vs非静态方法

静态方法vs非静态方法 我的理解:静态方法和非静态方法设计之初的目的就是前者是针对类,也就是某一种 对象集体所拥有的,而非静态方法是针对某一个对象的.在引用静态方法时,可以使用 对象名加前缀,也可以使用类名加前缀. 编程人员需要关注的几点 静态方法                       非静态方法                 调用过程 类名.方法名() 对象名.方法名() 生命周期 整个程序的运行周期 对象的生命周期 内存驻留 常驻内存 不常驻内存 使用频率 谨慎使用 推荐 编程人员不

Java中堆、栈,静态方法和非静态方法的速度问题

       一.堆和栈的速度性能分析 堆和栈是JVM内存模型中的2个重要组成部分,自己很早以前也总结过堆和栈的区别,基本都是从存储内容,存储空间大小,存储速度这几个方面来理解的,但是关于堆和栈的存储速度,只知道堆存储速度慢,栈存储速度快,至于为什么堆比栈的存取速度慢,并没有特别深入的研究,从网上也找了很多资料,但很多理由并不太认同,这里也列举一些,并结合自己的理解来分析,如果不正确欢迎指正. 1.从分配的角度分析 java中栈的大小和生命周期在编译期间就确定了的(可以参考之前写的一篇JVM内存

C#静态方法与非静态方法比较

c#静态方法与非静态方法比较: 一.静态方法:使用static修改的方法就是静态方法,否则就是非静态方法. 二.差异比较: 第一:C#静态成员:(1)静态成员属于类所有,非静态成员属于类的实例所有. (2)每创建一个类的实例,都会在内存中为非静态成员新分配一块存储. 总结:静态成员属于类所有,为各个类的实例所公用,无论类创建了多少实例,类的静态成员在内存中只占同一块区域.   第二:C#静态方法:     (1)C#静态方法属于类所有,类实例化前即可使用. (2)非静态方法可以访问类中的任何成员

c#静态方法和非静态方法详细介绍

C#的类中可以包含两种方法:静态方法和非静态方法. 使用了static 修饰符的方法为静态方法,反之则是非静态方法. 静态方法是一种 特殊的成员方法,它不属于类的某一个具体的实例,而是属于类本身. 所以对静态方法不需要 首先创建一个类的实例,而是采用类名.静态方法的格式 . 1.static方法是类中的一个成员方法,属于整个类,即不用创建任何对象也可以直接调用! static内部只能出现static变量和其他static方法!而且static方法中还不能使用this....等关键字..因为它是