静态方法 订阅
C++中,若类的方法前加了static关键字,则该方法称为静态方法,反之为实例方法。静态方法为类所有,可以通过对象来使用,也可以通过类来使用。但一般提倡通过类名来使用,因为静态方法只要定义了类,不必建立类的实例就可使用。静态方法只能调用静态变量。 展开全文
C++中,若类的方法前加了static关键字,则该方法称为静态方法,反之为实例方法。静态方法为类所有,可以通过对象来使用,也可以通过类来使用。但一般提倡通过类名来使用,因为静态方法只要定义了类,不必建立类的实例就可使用。静态方法只能调用静态变量。
信息
外文名
A static method
定    义
若类的方法前加了static关键
中文名
静态方法
注意事项
与“非静态方法”区别
静态方法定义
若类的方法前加了static关键字,则该方法称为静态方法,反之为非静态方法。
收起全文
精华内容
下载资源
问答
  • 静态方法
    千次阅读
    2021-03-05 22:58:12

    首先static的成员是在类加载的时候初始化的,JVM的CLASSLOADER的加载,首次主动使用加载,而非static的成员是在建立对象的时候,即new 操做的时候才初始化的;函数

    前后顺序是先加载,才能初始化,那么加载的时候初始化static的成员,此时非static的成员尚未被加载必然不能使用,而非static的成员是在类加载以后,经过new操做符建立对象的时候初始化,此时static 已经分配内存空间,因此能够访问!this

    简单点说:静态成员属于类,不须要生成对象就存在了.而非静态须要生成对象才产生.因此静态成员不能直接访问非静态.  spa

    下面说说静态的特色:code

    1.随着类的加载而加载对象

    也就是,说静态会随着类的消失而消失,说明静态的生命周期最长

    2.优先于对象的存在

    明确一点:静态是先存在的对象是后存在的

    3.被全部对象共享

    4.能够直接被类名多调用

    实例变量和类变量的区别

    1.存放位置

    类变量随着类的加载存在于方法区中,实例变量随着对象的创建存在于堆内存里

    2.生命周期

    类变量生命周期最长,随着“类”的加载而加载,随着类的消失而消失,实例变量随着“对象”的消失而消失

    静态的使用注意事项:

    1.静态方法只能访问静态成员(包括成员变量和成员方法)

    非静态方法能够访问静态也能够访问非静态

    2.静态方法中不能够定义this,super关键字

    由于静态优先于对象存在,因此静态方法中不能够出现this,super关键字

    3.主函数是静态的。

    blog

    静态的利弊

    利:对对象的共享数据进行单独空间的存储,节省空间,没有必要每个对象中都存储一份

    能够直接被类名所调用

    弊:生命周期过长,访问出现局限性(只能访问静态)生命周期

    更多相关内容
  • C# 之 静态方法和非静态方法对比

    千次阅读 2019-03-29 22:15:55
    C# 静态方法和非静态方法简析, C# 静态方法和非静态方法的区别, C# 静态方法和非静态方法的内存占用误解

    C#静态成员

    静态成员属于类所有,为各个类的实例所公用,无论类创建了几多实例,类的静态成员在内存中只占同一块区域。

    1. 、静态成员属于类所有,非静态成员属于类的实例所有。
    2. 、每创建一个类的实例,都市在内存中为非静(动)态成员新分派一块存储;

    静态数据成员区别于动态数据成员,静态变量并不是稳定的,只是静态变量在声明的时候不管有没有赋值,都会凭据它的类型分派对应的内存空间,他的可访问性和作用区间与动态变量是一样的


    非静态类可以包含静态方法、字段、属性或事件。 即使未创建类的任何实例,也可对类调用静态成员。 静态成员始终按类名(而不是实例名称)进行访问。 静态成员只有一个副本存在(与创建的类的实例数有关)。 静态方法和属性无法在其包含类型中访问非静态字段和事件,它们无法访问任何对象的实例变量,除非在方法参数中显式传递它。
    更典型的做法是声明具有一些静态成员的非静态类(而不是将整个类都声明为静态)。 静态字段的两个常见用途是保留已实例化的对象数的计数,或是存储必须在所有实例间共享的值。
    静态方法可以进行重载,但不能进行替代,因为它们属于类,而不属于类的任何实例。
    虽然字段不能声明为 static const,不过 const 字段在其行为方面本质上是静态的。 它属于类型,而不属于类型的实例。 因此,可以使用用于静态字段的相同 ClassName.MemberName 表示法来访问常量字段。 无需进行对象实例化。



    通常我们调用方法的三种形式:

    	class Program
        {
            static void Main(string[] args)
            {
                //第一种方式, 声明实例,调用实例方法   
                ClassName someClass = new ClassName();
                ClassName.Method();
                //第二种方式,通过一个静态的实例,去调用实例方法   
                ClassName.instance.Method();
                //第三种方式,直接调用静态方法   
                ClassName.Method();
    	}
    }
    

    有时候我们对静态方法和实例化方法会有一些误解。

    下文参考链接:https://blog.csdn.net/BIAOBIAOqi/article/details/6732117

    1、大家都以为 “ 静态方法常驻内存,实例方法不是,所以静态方法效率高但占内存。”

    要知道一个.NET类型的静态方法是属于这个.NET类型的。而这个.NET类型是一个.NET 程序集的一部分。这个.NET程序集是被一个AppDomain装入到内存里面来的。这个AppDomain是可以从内存卸载的。一个有.NET CLR的进程里面可以有多于一个的AppDomain,第一个AppDomain之后的AppDomain都可以动态创建和卸载。这些AppDomain中的.NET程序集,既可以有静态方法,也可以有实例方法。不管是静态方法还是实例方法,都是随其程序集所在的AppDomain一起创建和卸载。第一个AppDomain在整个程序运行结束时也会最后被卸载。其中所含的.NET程序集自然也卸载

    静态方法不存在常驻内存一说,在加载时机和占用内存上,静态方法和实例方法是一样的,在类型第一次被使用时加载。调用的速度基本上没有差别。

    2、大家都以为 “ 静态方法在堆上分配内存,实例方法在堆栈上”

    事实上所有的方法都不可能在堆或者堆栈上分配内存,方法作为代码是被加载到特殊的代码内存区域,这个内存区域是不可写的。

    方法占不占用更多内存,和它是不是static没什么关系。
    因为字段是用来存储每个实例对象的信息的,所以字段会占有内存,并且因为每个实例对象的状态都不一致(至少不能认为它们是一致的),所以每个实例对象的所有字段都会在内存中有一分拷贝,也因为这样你才能用它们来区分你现在操作的是哪个对象。
    但方法不一样,不论有多少个实例对象,它的方法的代码都是一样的,所以只要有一份代码就够了。因此无论是static还是non-static的方法,都只存在一份代码,也就是只占用一份内存空间。
    同样的代码,为什么运行起来表现却不一样?这就依赖于方法所用的数据了。主要有两种数据来源,一种就是通过方法的参数传进来,另一种就是使用class的成员变量的值……

    3、大家都以为 “实例方法需要先创建实例才可以调用,比较麻烦,静态方法不用,比较简单”

    事实上如果一个方法与他所在类的实例对象无关,那么它就应该是静态的,而不应该把它写成实例方法。所以所有的实例方法都与实例有关,既然与实例有关,那么创建实例就是必然的步骤,没有麻烦简单一说。

    当然你完全可以把所有的实例方法都写成静态的,将实例作为参数传入即可,一般情况下可能不会出什么问题。

    从面向对象的角度上来说,在抉择使用实例化方法或静态方法时,应该根据是否该方法和实例化对象具有逻辑上的相关性,如果是就应该使用实例化对象 反之使用静态方法。这只是从面向对象角度上来说的。

    如果从线程安全、性能、兼容性上来看 也是选用实例化方法为宜。



    我们为什么要把方法区分为:静态方法和实例化方法 ?

    如果我们继续深入研究的话,就要脱离技术谈理论了。早期的结构化编程,几乎所有的方法都是“静态方法”,引入实例化方法概念是面向对象概念出现以后的事情了,区分静态方法和实例化方法不能单单从性能上去理解,创建c++,java,c#这样面向对象语言的大师引入实例化方法一定不是要解决什么性能、内存的问题,而是为了让开发更加模式化、面向对象化。这样说的话,静态方法和实例化方式的区分是为了解决模式的问题。

    展开全文
  • 是不是是有点拗口哈,在刚开始的开发中,经常会碰到"无法访问非静态方法",如下:Test.javapublic Test{public void notStatic(){System.out.println("我访问了非静态方法");}public static void main(String[] args){...

    是不是是有点拗口哈,在刚开始的开发中,经常会碰到"无法访问非静态方法",如下:

    Test.java

    public Test{

    public void notStatic(){

    System.out.println("我访问了非静态方法");

    }

    public static void main(String[] args){

    notStatic();//错误,无法访问

    }

    }

    解决办法有二:

    一 、设置其为静态方法

    //加入 static

    public static void notStatic(){

    System.out.println("我访问了非静态方法");

    }

    二、new 对象 引用方法

    并不是什么时候都可以设置其为静态方法,比如安卓开发中findViewById只能在非静态方法中调用,那怎么办呢.很简单,new对象引用。

    Test.java

    public Test{

    public void notStatic(){

    System.out.println("我访问了非静态方法");

    }

    public static void main(String[] args){

    //notStatic();//错误,无法访问

    Test test = new Test();

    test.notStatic(); //引用

    }

    }

    关于 static

    此部分文章原文链接:JAVA菜鸟入门篇 - static关键字 (十三)

    static方法

    static方法一般称作静态方法,由于静态方法不依赖于任何对象就可以进行访问,因此对于静态方法来说,是没有this的,因为它不依附于任何对象,既然都没有对象,就谈不上this了。并且由于这个特性,在静态方法中不能访问类的非静态成员变量和非静态成员方法,因为非静态成员方法/变量都是必须依赖具体的对象才能够被调用。

    但是要注意的是,虽然在静态方法中不能访问非静态成员方法和非静态成员变量,但是在非静态成员方法中是可以访问静态成员方法/变量的。

    展开全文
  • java中 静态方法和非静态方法的调用

    千次阅读 2021-03-07 21:38:43
    静态方法里面不能调用非静态方法packagecom.zqz.image; publicclassHellowWord{ publicvoidsay(Stringword){//非静态方法,需要new一个对象后,使用new出来的对象调用, System.out.println(word); } ...

    静态方法里面不能调用非静态方法

    package com.zqz.image; public class HellowWord { public void say(String word){// 非静态方法,需要new 一个对象后,使用new 出来的对象调用, System.out.println(word); } public static void say1(String word){ //静态方法,调用HellowWord.say1("hello") System.out.println(word); } public static void main(String[] args){ String word ="hello";     HellowWord.say1(word);       //直接调用静态方法    如果是静态方法,直接类名.方法名(参数) 就可以 HellowWord hw = new HellowWord();    //调用非静态方法 hw.say(word);                             //  如果调用另外一个类的非静态方法,需要先实例化这个类,就是 new一个,然后在用new 出来的这个实例去调用 } } package com.zqz.image; public class HellowWord { public static void main(String[] args){ String word ="hello"; //直接调用静态方法 HellowWord.say1(word); //调用非静态方法 HellowWord hw = new HellowWord(); hw.say(word); } public void say(String word){// 非静态方法,需要new 一个对象后,使用new 出来的对象调用, System.out.println("非静态方法执行:"+word); } public static void say1(String word){ //静态方法,调用方法“类名.方法名(参数)”  HellowWord.say("hello") System.out.println("静态方法执行:"+word); } }

    展开全文
  • 静态方法中调用非静态方法

    千次阅读 2021-06-15 14:42:51
    静态static方法中不能直接调用非静态non-static方法,但可以通过将一个对象的引用传入静态方法内,进而再调用该对象的非静态(non-static)方法。其实,在主函数(static方法)中,我们经常需要创建某个类的实例,再...
  • C++ 静态属性和静态方法

    千次阅读 2020-09-16 16:45:59
    静态成员是所有对象共享的,所以不能在静态方法里面访问非静态元素但非静态方法可以访问类的静态成员及非静态成员 静态数据成员 1.静态数据成员的声明 静态数据成员实际上是类域中的全局变量(类中的静态成员数据和...
  • 静态方法

    千次阅读 2018-03-08 10:30:45
    Java中的静态方法中,在方法声明时前面要加static 修饰符静态方法中只能调用静态成员或者方法,不能调用非静态方法或者非静态成员(如果静态方法想调用非静态方法或者非静态成员需要先实例化即先new一个),而非静态...
  • Java静态方法和实例方法

    千次阅读 2021-02-12 12:38:41
    一:静态方法其实在我们第一天学习java的时候就使用了静态方法,主方法的就是一个静态方法静态方法和静态属性一样使用static修饰。DEMO:定义静态方法发现了可以使用“类名.方法名()”的方式访问静态方法,但是不能...
  • Python静态方法

    千次阅读 2022-02-16 11:25:09
    Python静态方法 什么是静态方法?静态方法是干什么的?在Python里面静态方法和我们平时写的函数def是一样的。唯一不同之处就是它可以存在于类中,不同实例化类也可以调用。话不多说,通过例题看一下。 例题思路: 在...
  • Java中静态方法的调用格式

    千次阅读 2022-04-04 15:55:06
    Java中不带返回值的静态方法调用           格式:                   &...
  • python基础之类方法和静态方法

    千次阅读 2022-03-20 23:51:14
    一、类方法(classmethod) 类方法是从属于“类对象”的方法。类方法通过装饰器@classmethod来定义,格式如下 @classmethod def 类方法名(cls [,形参列表]) : 方法体 注意: @classmethod必须位于方法上面一行...
  • 静态方法与非静态方法区别

    千次阅读 2021-01-10 11:55:42
    一、静态方法 静态方法又称类方法,是加staic关键字修饰的方法,在类定义的时候就被分配和装载入内存中。 静态方法属于类所有,类实例化前即可使用,同时不能使用super和this关键字。 静态方法只能调用静态方法以及...
  • python中静态方法和类方法的区别

    千次阅读 2021-03-17 19:30:07
    1.静态方法就是一个普通的方法,与类和对象无关2.类方法就是JAVA里面的类方法,属于类,被各个对象共享class OptSample(object):count = 0def __init__(self,origin_data):self.origin_data = origin_data@...
  • Java 静态方法与非静态方法的调用

    千次阅读 2019-05-28 17:35:41
    调用静态方法 一般格式如下 类名.方法() //应为静态方法属于类本身,在同一个类中可以直接 调用 方法() 调用非静态方法 格式 对象名.方法() 一个小demo 方便理解 package me; public class Book { public void...
  • 静态方法,通过装饰器@staticmethod进行修饰。 实例方法,属于方法类型的函数。 为什么要分为三种不同的方法呢?他们之间有什么区别和差异呢?首先这三种方法的可以获取类的属性和变量范围不同,具体区别如下: ...
  • Java-静态方法为什么不能调用非静态方法

    千次阅读 多人点赞 2020-10-25 14:41:30
    Java-静态方法为什么不能调用非静态方法引言java中静态方法为什么不可以调用非静态方法?** static关键字的修饰成员变量,成员方法和对象无关。总结:下面说说静态的特点:实例变量和类变量的区别静态的使用注意事项...
  • 使用Mockito mock静态方法

    千次阅读 2022-05-17 18:15:25
    在Java单元测试中,使用Mockito.mockStatic对静态方法进行打桩
  • Kotlin:静态方法

    千次阅读 2021-05-04 07:05:07
    静态方法在其他高级语言(如C++,Java)中也叫类方法。静态方法在调用时无需创建实例,通过类名.方法名的方式调用。 在java中调用静态方法的只需在声明前面加关键字static即可。而kotlin中却比较复杂,下面看看几种...
  • 静态方法特点

    千次阅读 2020-03-03 18:02:48
    静态方法可以访问类中的任何成员,静态方法只能访问类中的静态成员; 因为静态方法在类实例化前就可以使用,而类中的非静态变量必须在实例化之后才能分配内存; static内部只能出现static变量和其他static方法!...
  • C# 静态方法&非静态方法调用总结

    千次阅读 2020-10-11 17:40:57
    C# 静态方法&非静态方法总结 总结的C# 静态方法&非静态方法总结,有不正确的请指正 操作 静态方法静态方法 同个类中调用 方法名()前面不用加类名或对象名 实例化类后调用即new一次 不同类中...
  • 静态方法和非静态方法区别?

    万次阅读 多人点赞 2019-08-24 23:42:26
    静态方法static(类方法)和 非静态方法(实例方法)的区别: 方法我们主要分为三种: 1.构造方法 2.非静态方法(普通方法/实例方法) 3.静态方法(类方法) 对于1(补充一下):构造方法分为无参构造方法 和 有参...
  • 静态方法(static)和非静态方法

    千次阅读 多人点赞 2020-12-13 11:02:47
    使用静态方法后,对方法的调用直接 类名.方法名 public class Student { public static void say(){ System.out.println("学生回答了!"); } } public class Demo01 { public static void main(String[] args) ...
  • Java类静态方法的mock实现

    千次阅读 2022-02-02 23:49:03
    mock常见静态方法 待测试类: package com.taobao.vip.shop.biz.sqyk.manager; import com.taobao.vip.shop.biz.sqyk.util.TairUtil; /** * Created by yitian.zyt on 2021/6/30 */ @Slf4j @Component public...
  • 在python中调用静态方法

    千次阅读 2021-03-05 20:30:36
    在第二个示例中,类本身作为方法的第一个参数传递(与实例是第一个参数的常规方法相反,或者不接收任何其他参数的静态方法)。 现在回答你的实际问题。我认为你没有找到你的方法,因为你把类Person放在一个模块Person....
  • Java中的Static静态方法

    千次阅读 2022-01-23 15:54:09
    与静态变量相似,用static修饰符修饰的方法属于类的静态方法,又称为类方法。静态方法的实质是属于整个类的方法,而不加static修饰的方法是属于某个具体对象的方法。 一个方法生声明为static有以下几重含义: 非...
  • Java子父类中静态方法

    千次阅读 2021-02-28 14:12:34
    Java中的静态方法只能继承,不能重写!!官方文档是这样写的:Class methodsIf a subclass defines a class method with the same signature as a class method in the superclass, the method in the subclasshides...
  • 茅侃侃静态方法(实际上所有方法)以及静态变量都存储在PermGen部分,因为它们是反射数据的一部分(类相关数据,而不是与实例相关的)。需要澄清的最新情况:注意,只有变量及其技术值(原语或引用)存储在PermGen空间中。...
  • java的静态方法

    千次阅读 2021-06-18 11:33:46
    Java中方法分为静态方法和普通方法 所谓静态方法,就是方法前面加上static关键字,调用静态方法时一般用类名.方法名,当然也可以用对象名.方法名; 一般Java中工具类里面的工具方法都用static修饰,作为静态方法; ...
  • 静态方法(static method) 先从一道笔试题说起 关于Java中的静态方法,下列说法哪些是正确的() A:静态方法是一个属于类而不属于对象(实例)的方法。(√) 静态方法可以在没有创建对象实例的情况下调用,其是...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,163,809
精华内容 865,523
关键字:

静态方法