静态成员

static 关键字和 final 关键字

白昼怎懂夜的黑 提交于 2020-02-24 14:03:32
内容来自《java 编程思想》。 1、static 关键字 “static 方法就是没有 this 的方法。在 static 方法内部不能调用非静态方法,反过来是可以的。而且可以在没有创建任何对象的前提下,仅仅通过类本身来调用 static 方法。这实际上正是 static 方法的主要用途”。static 关键字的基本作用,一句话来描述就是: 方便在没有创建对象的情况下来进行调用(方法/变量) 。 (1) static 方法 static 方法称作静态方法,由于静态方法不依赖于任何对象就可以进行访问,因此对于静态方法来说,是没有 this 的。并且由于这个特性,在静态方法中不能访问类的非静态成员变量和非静态成员方法,因为非静态成员方法/变量都是必须依赖具体的对象才能够被调用。但是在非静态成员方法中是可以访问静态成员方法/变量的。因此,如果说想在不创建对象的情况下调用某个方法,就可以将这个方法设置为 static。我们最常见的 static 方法就是 main 方法,因为程序在执行 main 方法的时候没有创建任何对象,因此只有通过类名来访问。比如: public class Test { public void f ( ) { } public static void g ( ) { } public static void main ( String [ ] args ) {

static关键字

泪湿孤枕 提交于 2020-02-24 00:10:20
http://hi.baidu.com/helfen/blog/item/d6d208dba1d1146ed0164e29.html // C++ static 类的静态成员函数 #include <iostream.h> class ok { int a; static int s;//声明静态数据成员 public: ok(int a); static void show();//声明静态成员函数 }; int ok::s=0;//定义并初始化静态数据成员 ok::ok(int a) { this->a=a; s+=a; //非静态成员函数可以访问静态数据成员 } void ok::show() //静态成员函数的实现 { //cout<<a<<endl; //错误代码,a是非静态数据成员 cout<<"s="<<s<<endl; } void main() { ok cat(2); cat.show(); ok dog(3); dog.show(); ok::show(); } /*------------------------------------------------------------ ○静态成员之间可以相互访问,如静态成员函数访问静态数据成员和静态成员函数; ○静态成员函数没有this指针。无法访问属于类对象的非静态数据成员和非静态成员函数,

《JAVA编程思想》 · 笔记

女生的网名这么多〃 提交于 2020-02-23 19:14:49
1 一个类中的成员方法中,定义一个变量,则该变量不会被初始化。 如:“ int a;” 中的a不会被初始化成a=0; 2 .对于类:class a { void m(double a){} } ,可以运行语句:(new a()).m(5); 其中参数5会被认为是int类型,但在类中找不到合适的方法,于是会自动转化为double 类型。 3 .不可用返回值来区分方法(即无法实现多态性) 4 .一个类的成员方法被private所修饰,此时,该方法会被“隐藏”。在继承该类时,无法重载该方法,若试图用public来创建同名的方法,此时其实是创建了一个新的方法,而没有重载。 5 .一个类的初始化: 先加载静态成员变量,后加加载非静态成员变量; 先加载成员变量,后加载成员方法。 6 .【加载顺序】B类继承A类: A类的静态成员变量 B类的静态成员变量 A类的非静态成员变量 A类的构造方法 B类的非静态成员变量 B类的构造器 来源: CSDN 作者: 喵帕斯酱 链接: https://blog.csdn.net/qq_42442111/article/details/104459414

C++静态成员

↘锁芯ラ 提交于 2020-02-22 19:19:20
类中的静态成员真是个让人爱恨交加的特性。我决定好好总结一下静态类成员的知识点,以便自己在以后面试中,在此类问题上不在被动。 静态类成员包括静态数据成员和静态函数成员两部分。 一 静态数据成员: 类体中的数据成员的声明前加上static关键字,该数据成员就成为了该类的静态数据成员。和其他数据成员一样,静态数据成员也遵守public/protected/private访问规则。同时,静态数据成员还具有以下特点: 1.静态数据成员的定义。 静态数据成员实际上是类域中的全局变量。所以,静态数据成员的定义(初始化)不应该被放在头文件中。 其定义方式与全局变量相同。举例如下: xxx.h文件 class base{ private: static const int _i;//声明,标准c++支持有序类型在类体中初始化,但vc6不支持。 }; xxx.cpp文件 const int base::_i=10;//定义(初始化)时不受private和protected访问限制. 注:不要试图在头文件中定义(初始化)静态数据成员。在大多数的情况下,这样做会引起重复定义这样的错误。即使加上#ifndef #define #endif或者#pragma once也不行。 2.静态数据成员被 类 的所有对象所共享,包括该类派生类的对象。即派生类对象与基类对象共享基类的静态数据成员。举例如下: class

静态成员变量和成员函数

[亡魂溺海] 提交于 2020-02-22 19:09:50
  若将成员变量声明为static,则为静态成员变量,与一般的成员变量不同,无论建立多少对象,都只有一个静态成员变量的拷贝,静态成员变量属于一个类,所有对象 共享 。静态变量在编译阶段就分配了空间,对象还没创建时就已经分配了空间,放到 全局静态区 。 静态成员变量   注意事项 :(1)最好是类内声明,类外初始化(以免类名访问静态成员访问不到);(2)无论公有,私有,静态成员都可以在类外定义,但私有成员仍有访问权限;(3)非静态成员类外不能初始化;(4)静态成员数据是共享的。 1 class Person{ 2 public: 3 static int m_age;//静态成员变量,会共享数据,对象保有的是最后一次修改的值 4 //最好类内声明,类外初始化 5 6 //静态成员建议在类外进行初始化,但在类内也可以初始化,只是通过类名访问静态成员的属性时,访问不到 7 //所以一般不这么做 8 public: 9 Person(){ 10 m_age = 10; 11 } 12 13 private: 14 int other; 15 static int m_other; 16 }; 17 int Person::m_age = 0; 18 int Person::other = 10; //非静态成员不能在类外部定义 19 int Person::m_other = 20; /

c++学习笔记之类和对象(三、static静态成员变量和静态成员函数)

此生再无相见时 提交于 2020-02-22 19:08:53
一、static静态成员变量 对象的内存中包含了成员变量,不同的对象占用不同的内存,这使得不同对象的成员变量相互独立,它们的值不受其他对象的影响。是有时候我们希望在多个对象之间共享数据,对象 a 改变了某份数据后对象 b 可以检测到。共享数据的典型使用场景是计数。 在C++ 中,我们可以使用静态成员变量来实现多个对象共享数据的目标。 静态成员变量是一种特殊的成员变量,它被关键字 static 修饰。 static 成员变量属于类,不属于某个具体的对象,即使创建多个对象,也只为其分配一份内存,所有对象使用的都是这份内存中的数据。当某个对象修改了 静态成员变量 ,也会影响到其他对象。 #include <iostream> using namespace std; class Student{ public: Student(char *name, int age, float score); void show(); private: static int m_total; //静态成员变量 private: char *m_name; int m_age; float m_score; }; //初始化静态成员变量 int Student::m_total = 0; Student::Student(char *name, int age, float score): m_name

C++静态成员函数小结

天涯浪子 提交于 2020-02-22 19:07:18
原文地址: http://hi.baidu.com/quanhaili/blog/item/5a40ba86b37e1b22c65cc38f.html 静态类成员包括静态数据成员和静态函数成员两部分。   一 静态数据成员:   类体中的数据成员的声明前加上static关键字,该数据成员就成为了该类的静态数据成员。和其他数据成员一样,静态数据成员也遵守public/protected/private访问规则。同时,静态数据成员还具有以下特点:   1.静态数据成员的定义。   静态数据成员实际上是类域中的全局变量。所以,静态数据成员的定义(初始化)不应该被放在头文件中。   其定义方式与全局变量相同。举例如下:   xxx.h文件   class base{   private:     static const int _i;//声明,标准c++支持有序类型在类体中初始化,但vc6不支持。   };   xxx.cpp文件   const int base::_i=10;//定义(初始化)时不受private和protected访问限制.   注:不要试图在头文件中定义(初始化)静态数据成员。在大多数的情况下,这样做会引起重复定义这样的错误。即使加上#ifndef #define #endif或者#pragma once也不行。 2.静态数据成员被 类 的所有对象所共享

C++静态成员函数小结

…衆ロ難τιáo~ 提交于 2020-02-22 19:03:43
一 静态数据成员: 类体中的数据成员的声明前加上static关键字,该数据成员就成为了该类的静态数据成员。和其他数据成员一样,静态数据成员也遵守public/protected/private访问规则。同时,静态数据成员还具有以下特点: 1.静态数据成员的定义。 静态数据成员实际上是类域中的全局变量。所以,静态数据成员的定义(初始化)不应该被放在头文件中。 其定义方式与全局变量相同。举例如下: xxx.h文件 class base{ private: static const int _i;//声明,标准c++支持有序类型在类体中初始化,但vc6不支持。 }; xxx.cpp文件 const int base::_i=10;//定义(初始化)时不受private和protected访问限制. 注:不要试图在头文件中定义(初始化)静态数据成员。在大多数的情况下,这样做会引起重复定义这样的错误。即使加上#ifndef #define #endif或者#pragma once也不行。 2.静态数据成员被 类 的所有对象所共享,包括该类派生类的对象。即派生类对象与基类对象共享基类的静态数据成员。举例如下: class base{ public : static int _num;//声明 }; int base::_num=0;//静态数据成员的真正定义 class derived

单实例中对静态成员函数及变量的回顾

冷暖自知 提交于 2020-02-22 18:31:45
程序最终都将在内存中执行,变量只有在内存中占有一席之地时才有被访问的可能,除此之外,还要有相应的权限。 静态成员函数和非静态成员函数的一个重大区别是,静态成员函数不接受隐含的this指针,它是属于类的,是公有的,因此,静态成员是类的所有对象中共享的成员,而不是某个对象的成员;非静态成员函数带有隐含的this指针,它是属于对象的。 类的静态成员(变量和方法)属于类本身,在类加载的时候就会分配内存,存储在静态存储区,可以通过类名直接去访问;非静态成员(变量和方法)属于类的对象,所以只有在类的对象产生(创建类的实例)时才会分配内存,存储在栈区,可通过类的对象(实例)去访问。 在一个类的静态成员中去访问其非静态成员之所以会出错是因为在类的非静态成员要等对象实例化之后才会存在,此时可能会访问一个内存中不存在的东西,因此会出错; 此外,即使此时对象已经实例化,非静态成员已经存在,静态成员函数依然不能访问非静态成员,这就是权限问题,如果一定要访问,可通过对象参数进行传递。 由上可知:使用静态数据成员可以节省内存,因为它是所有对象所公有的,因此,对多个对象来说,静态数据成员只存储一处,供所有对象共用。静态数据成员的值对每个对象都是一样,但它的值是可以更新的。只要对静态数据成员的值更新一次,保证所有对象存取 更新后的相同的值,这样可以提高时间效率。 静态数据成员的使用方法和注意事项如下: 1

C++类中静态变量和静态方法使用介绍

早过忘川 提交于 2020-02-22 18:31:16
静态成员的提出是为了解决数据共享的问题。实现共享有许多方法,如:设置全局性的变量或对象是一种方法。但是,全局变量或对象是有局限性的。这一章里,我们主要讲述类的静态成员来实现数据的共享。   静态数据成员   在类中,静态成员可以实现多个对象之间的数据共享,并且使用静态数据成员还不会破坏隐藏的原则,即保证了安全性。因此,静态成员是类的所有对象中共享的成员,而不是某个对象的成员。   使用静态数据成员可以节省内存,因为它是所有对象所公有的,因此,对多个对象来说,静态数据成员只存储一处,供所有对象共用。静态数据成员的值对每个对象都是一样,但它的值是可以更新的。只要对静态数据成员的值更新一次,保证所有对象存取更新后的相同的值,这样可以提高时间效率。   静态数据成员的使用方法和注意事项如下:   1、静态数据成员在定义或说明时前面加关键字static。//静态变量的定义   2、静态成员初始化与一般数据成员初始化不同。静态数据成员初始化的格式如下:     <数据类型><类名>::<静态数据成员名>=<值> //静态变量的初始化   这表明: (1) 初始化在类体外进行,而前面不加static,(这点需要注意)以免与一般静态变量或对象相混淆。   (2) 初始化时不加该成员的访问权限控制符private,public等。   (3) 初始化时使用作用域运算符来标明它所属类,因此