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

作者&投稿:剑美 (若有异议请与网页底部的电邮联系)
Java实例说明 静态方法和非静态方法的区别~

静态方法和非静态方法的区别总结如下: 一、静态方法属于类所有,类实例化前即可使用; 二、非静态方法可以访问类中的任何成员,静态方法只能访问类中的静态成员; 三、因为静态方法在类实例化前就可以使用,而类中的非静态变量必须在实例化之后才能分配内存; 四、static内部只能出现static变量和其他static方法!而且static方法中还不能使用this等关键字,因为它是属于整个类; 5、静态方法效率上要比实例化高,静态方法的缺点是不自动进行销毁,而实例化的则可以做销毁; 陆、静态方法和静态变量创建后始终使用同一块内存,而使用实例的方式会创建多个内存。 主要区别:静态方法在创建对象前就可以使用了,非静态方法必须通过new出来的对象调用。 如: public class Per{ public static String getType(){ return "人类"; } public String getName(){ return "张三"; } } 上面这个类中的getType方法,在没有new对象前这就可以这样用: String type=Per.getType();//type="人类"; 而getName方法则不能这样使用,编译都不会通过 getName必须这样: Per p=new Per(); String name=p.getName();//name="张三"; 当然,getType方法也可能通过对象调用: String type=p.getType();//type="人类"

静态方法在创建对象前就可以使用了,非静态方法必须通过new出来的对象调用。
如:
public class Per{
public static String getType(){
return "人类";
}
public String getName(){
return "张三";
}
}
上面这个类中的getType方法,在没有new对象前这就可以这样用:
String type=Per.getType();//type="人类";
而getName方法则不能这样使用,编译都不会通过
getName必须这样:
Per p=new Per();
String name=p.getName();//name="张三";
当然,getType方法也可能通过对象调用:
String type=p.getType();//type="人类";

综上所述:
静态方法是在创建实例之前就存在了,而非静态方法是在创建对象之后才有的。

首先,两者本质上的区别是:静态方法是在类中使用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);
}
}

一、静态方法和非静态方法的区别(调用对象、引用变量不同)
对于2:静态方法,是使用static关键字修饰的方法,又叫类方法。属于类的,不属于对象,在实例化对象之前就可以通过类名.方法名调用静态方法。(静态属性,静态方法都是属于类的,可以直接通过类名调用)。
A.在静态方法中,可以调用静态方法。
B.在静态方法中,不能调用非静态方法。
C.在静态方法中,可以引用类变量(即,static修饰的变量)。
D.在静态方法中,不能引用成员变量(即,没有static修饰的变量)。
E.在静态方法中,不能使用super和this关键字

对于3:非静态方法,是不含有static关键字修饰的普通方法,又称为实例方法,成员方法。属于对象的,不属于类的。(成员属性,成员方法是属于对象的,必须通过new关键字创建对象后,再通过对象调用)。
A.在普通方法中,可以调用普通方法。
B.在普通方法中,可以调用静态方法
C.在普通方法中,可以引用类变量和成员变量
D.在普通方法中,可以使用super和this关键字

二、静态方法和非静态方法的区别(调用方法不同)
静态方法可以直接调用,类名调用和对象调用。(类名.方法名 / 对象名.方法名)
但是非静态方法只能通过对象调用。(对象名.方法名)

三、静态方法和非静态方法的区别(生命周期不同)
静态方法的生命周期跟相应的类一样长,静态方法和静态变量会随着类的定义而被分配和装载入内存中。一直到线程结束,静态属性和方法才会被销毁。(也就是静态方法属于类)
非静态方法的生命周期和类的实例化对象一样长,只有当类实例化了一个对象,非静态方法才会被创建,而当这个对象被销毁时,非静态方法也马上被销毁。(也就是非静态方法属于对象)

总结:类方法可以直接通过类名调用,实例方法必需先实例化类,再初始化对象,然后通过类的实例对象才能调用


偶是一名java初学者,请问一下,如何理解静态方法和动态方法,并且如何...
方法中 用static修饰的方法 称为静态方法 java的工作机制简单说 我们所编写的代码 计算机是必能识别的 要通过java虚拟机的变异 转换成机器码 然后交给计算机分配内存 执行。 静态方法在编译以后 会在内存中 划出空间来存放此实例 所以 不需要实例化该类 就可以调用静态方法。动态方法,指的是 动态创建...

JAVA 里什么是静态方法,什么是动态方法?
public static void main(String[] args){ Simple.go();} } 调用一个静态方法就是“类名.方法名”,静态方法的使用很简单如上所示。一般来说,静态方法经常为应用程序中的其它类提供一些实用工具所用,在Java的类库中大量的静态方法正是出于此目的而定义的。静态变量 静态变量与静态方法类似。所有此类...

在财务分析中,动态分析和静态分析有什么区别
现金平衡原则是指在财务管理中,贯彻的是收付实现制,而非权责发生制,客观上要求在财务管理过程中做到现金收入(流入)与现金支出(流出)在数量上、时间上达到动态平衡,即现金流转平衡。保持现金收支平衡的基本方法是现金预算控制。现金预算可以说是筹资计划、投资计划、分配计划的综合平衡,因而现金预算是进行...

什么时候要用静态方法
总之,从OOA\/OOD的角度考虑,一切不需要实例化就可以有确定行为方式的函数都应该设计成静态的 静态方法与非静态方法最明显的区别就是如果某个方法是公共静态的,那么可以直接通过类名.方法名的方法来调用,而公共实例方法则需要事先实例化对象,然后才能调用。这些各种说法,基本上都是正确的。

Java语言中静态多态性可以在非静态成员方法上实现吗?
相对而言,非static的成员都是程序开始运行以后 晚一点再动态创建的。 所以程序加载顺序就是 先生成各种静态的变量和方法 再根据代码创建其他的 所以如果你静态的方法去访问非静态的成员。那程序加载这个静态方法去访问的成员根本没创建。这就错了。静态方法不可以调非静态全局变量,从内存的角度看,就是当...

Java语言中的方法属于类中的成员 为什么网上说不对呢
只有静态方法才是类的成员,非静态方法都是对象的成员 静态方法是可以通过 类名.方法名(参数)的形式来调用,不需要创建对象 而非静态方法必须使用 对象.方法名(参数)的形式来调用

C#中静态方法是什么意思?静态成员呢?还有静态类?
给你举个例子就明白了!!!静态方法用于表示类所具有的行为,而非其对象所具体的行为。例如: 学生分班这项任务,就是全体学生集体的事情,并并不是只是某个学生的事。静态方法通过在定义中使用static 关键字来声明,static关键字放在修饰符和方法返回的类型之前,格式: 【方法修饰】 static 返回值...

java中静态变量和非静态变量是怎么区分的?
2.静态全局变量 全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。全局变量本身就是静态存储方式, 静态全局变量当然也是静态存储方式。 这两者在存储方式上并无不同。这两者的区别虽在于非静态全局变量的作用域是整个源程序, 当一个源程序由多个源文件组成时,非静态的全局变量在各个...

java怎么在静态方法中使用动态方法
java在静态方法中使用动态方法的方法是new对象出来,然后用.的方式调用方法:举例如下:定义Outer.java:public class Outer { private static int size;public void dostuff() { size++;System.out.println("hello,I am called");} } 然后在另外的测试类Main中,调用:public class Main { public ...

java中static关键字的意义
3. static关键字的注意事项 A : 在静态方法中没有this关键字,如何理解呢 ?静态是随着类的加载而加载,this是随着对象的创建而存在。静态比对象先存在。B : 静态只能访问静态。静态方法只能访问静态的成员变量。静态方法只能访问静态的成员方法。非静态方法可以访问静态和非晶态的成员变量。非静态方法...

镇远县17811091529: java静态方法与非静态方法有什么区别 -
中融赫迪: 静态方法和非静态方法的区别总结如下: 1、静态方法属于类所有,类实例化前即可使用; 2、非静态方法可以访问类中的任何成员,静态方法只能访问类中的静态成员; 3、因为静态方法在类实例化前就可以使用,而类中的非静态变量必须在...

镇远县17811091529: 静态方法和非静态方法的区别
中融赫迪: 静态方法属于类所有,类实例化前即可使用.非静态方法可以访问类中的任何成员,静态方法只能访问类中的静态成员.静态方法在类实例化前就可以使用,而类中的非静态变量必须在实例化之后才能分配内存.静态方法效率上要比实例化高,静态方法的缺点是不自动进行销毁,而实例化的则可以做销毁.静态方法在创建对象前就可以使用了,非静态方法必须通过new出来的对象调用.

镇远县17811091529: C#中【静态方法】和【非静态方法】的区别?! -
中融赫迪: 静态方法:1.可以直接用,不用new也就是实例化,通过类名加个点就可以用了2.静态方法里只可以用静态的东西3.静态方法的生命周期长,也就是说,定义一个静态变量,你往里面存东西可以一直存在4.定义的静态方法在内存中有固定的位置,所以一个程序最好不要有太多的静态方法 非静态方法:参考静态方法(取反) 不明白再留言吧#_#

镇远县17811091529: 请问C#类的静态方法和非静态方法分别是什么?有什么区别? -
中融赫迪: 类中方法签名有static为静态方法,没有则为非静态方法. 如 静态:public static void Get(){} 非静态:public void Get(){}区别: 1 静态方法属于类,非静态属于类的实例 如: 类.Get() new 类().Get()2 静态方法一般用于工具类,方法与类中的字段没有什么联系,依赖关系,而非静态则相反.3 加载时间也不同,具体我则不记得了

镇远县17811091529: java静态方法与非静态方法有什么区别 -
中融赫迪: 静态方法可以直接用类名点出来方法,而普通方法需要创建类的对象后才能调用!静态的方法和变量会调用时在内存生成一个唯一的标示,你可以理解成在物理内存中给静态一个位子,这样的话在调用的时候可以直接找到,而且会节省内存,...

镇远县17811091529: 什么是Java语言中所说的非静态方法,它和静态方法有何区别? -
中融赫迪: 非静态方法是相对于静态方法来说的.静态方法使用static关键字来标示,非静态方法没有此关键字.他们之间最大的区别在于它们生命周期的不同,静态方法属于全局方法,当静态方法第一次被访问的时候,就将常驻内存直到整个系统被销毁...

镇远县17811091529: 静态方法与非静态方法使用起来有什么区别 -
中融赫迪: 静态方法用起来比较安静一点,不会吵人,适合夜间使用!非静态方法用起来有点像拖拉机那样..整个电脑都会抖动..轰隆隆的..很烦躁!开个玩笑...进入正题:一般使用在工具类中,如java的Api就提供很多这样的静态类以及方法!特点就是,声明周期太长..浪费空间...多数情况下都不使用静态方法!除了静态以外就是非静态了....和静态相反!

镇远县17811091529: java中的静态方法和非静态方法有什么区别? -
中融赫迪: 静态方法中不用this是无法引用除自己方法体中定义的成员和参数以外的非静态变量或者方法的. 静态方法是不允许被子类重写的,但是子类可以覆盖父类的静态方法. 子类也不可将父类中的非静态方法重写为静态方法. main方法也是静态方法,在main方法中访问类中的成员变量和方法,需要在方法体中创建类的对象

镇远县17811091529: #中的静态方法与非静态方法的区别是什么? -
中融赫迪: 实例方法比静态方法多传递一个隐含的指针参数,该指针指向该方法所从属的已被实例化的对象.这一区别的外在表现为实例方法内可使用this关键字代表所从属的实例对象,而静态方法不可使用this因为静态方法不针对任何实例对象.实例对象...

镇远县17811091529: 静态与非静态的区别 -
中融赫迪: 静态页面就是一些死的数据,不是通过后台的管理来改变数据. 静态页面优势是:访问速度较快(很明显).缺点是不易修改,也就是页面里面的内容如果要更新,必须去修改源代码.如果改动太大,可能要考虑重新做了. 一般适用于小型企...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网