静态成员

[转载]java中import作用详解

可紊 提交于 2019-12-06 10:07:13
[转载]java中import作用详解 来源: https://blog.csdn.net/qq_25665807/article/details/74747868 这篇博客讲的真的很清楚,这个作者很厉害 import与package机制相关,这里先从package入手,再讲述import以及static import的作用。 package C/C++ 的 #include会把所包含的内容在编译时添加到程序文件中,而java的import则不同。 这里我们先了解一下Java 的 package 到底有何用处。 package名称就像是我们的姓,而class名称就像是我们的名字 。package和package的附属关系用”.”来连接,这就像是复姓。比如说 java.lang.String就是复姓 java.lang,名字為 String 的类别;java.io.InputStream 则是复姓 java.io,名字為 InputStream的类别。 Java 会使用 package 这种机制的原因也非常明显,就像我们取姓名一样 ,光是一间学校的同一届同学中,就有可能会出现不少同名的同学,如果不取姓的话,那学校在处理学生资料,或是同学彼此之间的称呼,就会发生很大的困扰。相同的,全世界的 Java 类数量,恐怕比日本人还多,如果类别不使用package名称,那在用到相同名称的不同类时

类的静态成员

人走茶凉 提交于 2019-12-06 05:12:16
声明类的静态成员   通过将类的成员前面加上static关键字,使得类成员成为其静态成员,静态成员可以是private也可以是public的。 静态成员可以是常量,引用,指针,类类型等。   类的静态成员存在于任何对象之外,对象中不包含任何与静态成员相关的数据。类似的类的静态成员函数,他们 不包含this指针,因此静态成员函数不能声明为const的,我们不能在静态成员的函数体内显式或者引式的调用this指 针。 定义静态成员   首先是静态成员函数,我们可以在类的内部定义静态成员函数。但是如果在类的外部定义静态成员函数的话,则 static不能重复,其只能出现在类内的声明当中。   类的静态数据成员不属于任何一个对象,因此其不是在创建对象的时候被定义的,因此静态数据成员不能由类的 构造函数来进行初始化。一般而言我们不在类的内部初始化静态成员,相反的在类的外部定义和初始化静态成员。一 个静态数据成员只能够定义一次。   通常类的静态成员不在类的内部进行初始化,但是整型的静态常量数据成员可以在类内进行初始化,即static const int 类型的静态常量数据成员可以在类内初始化。 静态成员所能适用的具体场景:   1 静态数据成员可以是不完全的类型,比如说在定义一个类的过程当中,静态成员可以声明成其所属的类型,而非静态 成员只能声明成所属类的指针或应用。   2

C++ static静态成员

我只是一个虾纸丫 提交于 2019-12-06 00:59:47
01 基本概念 静态成员:在定义前面加了static关键词的成员。 class A { public: A(int a, int b):m_a(a),m_b(b) { num += m_a + m_b; } ~A(){ } void Fun(); // 普通成员函数 static void PrintNum() // 静态成员函数 { // 在静态成员函数中,不能访问非静态成员变量,也不能调用非静态成员函数 std::cout << num << std::endl; } private: int m_a; // 普通成员变量 int m_b; // 普通成员变量 static int num; // 静态成员变量 }; // 静态成员必须在定义类的文件中对静态成员变量进行初始化,否则会编译出错。 int A::num = 0; int main() { A a1(1,1); A::PrintNum(); // 访问静态函数 A a2(1,1); A::PrintNum(); // 访问静态函数 return 0; } 输出结果 2 4 普通成员变量每个对象有各自的一份,而静态成员变量一共就一份, 为所有对象共享。 这里需要注意的是 sizeof 运算符不会计算静态成员变量的大小,如下栗子: class CTest { int n; static int s; }; 则

PHP 的 self 关键字用法

…衆ロ難τιáo~ 提交于 2019-12-05 18:03:56
之前有人询问 self 关键字的用法,答案是比较明显的:静态成员函数内不能用 this 调用非成员函数,但可以用 self 调用静态成员函数/变量/常量;其他成员函数可以用 self 调用静态成员函数以及非静态成员函数。随着讨论的深入,发现 self 并没有那么简单。鉴于此,本文先对几个关键字做对比和区分,再总结 self 的用法。 与 parent 、 static 以及 this 的区别 要想将彻底搞懂 self ,要与 parent 、 static 以及 this 区分开。以下分别做对比。 parent self 与 parent 的区分比较容易: parent 引用父类/基类被隐盖的方法(或变量), self 则引用自身方法(或变量)。例如构造函数中调用父类构造函数: class Base { public function __construct() { echo "Base contructor!", PHP_EOL; } } class Child { public function __construct() { parent::__construct(); echo "Child contructor!", PHP_EOL; } } new Child; // 输出: // Base contructor! // Child contructor! static

9.Dart中的类 静态成员 操作符 类的继承

心已入冬 提交于 2019-12-05 11:50:48
1.类中的静态成员 静态方法 1)使用static 关键字来实现类级别的变量和函数 2)静态方法不能访问非静态成员,非静态方法可以访问静态成员 class Person { //非静态属性、方法 // String name = '张三'; // void show() { // print(name); // } //非静态属性、方法 static String name = '张三'; static void show() { print(name); } } main(){ // var p= new Person(); // print(p.name); // p.show(); print(Person.name); Person.show(); } class Person { static String name = '张三'; int age=20; static void show() { print(name); } void printInfo(){ /*非静态方法可以访问静态成员以及非静态成员*/ // print(name); //访问静态属性 // print(this.age); //访问非静态属性 show(); //调用静态方法 } static void printUserInfo(){//静态方法 print(name); //静态属性

类和对象(下)C++

拟墨画扇 提交于 2019-12-05 03:22:32
1. 再谈构造函数 构造函数调用之后,对象中已经有了一个初始值,但是不能将其称作为类对象成员的初始化,构造 函数体中的语句只能将其称作为赋初值,而不能称作初始化。因为初始化只能初始化一次,而构造函数体内 可以多次赋值。 class Date { public: //这样的构造函数中是赋初始值,不是初始化 //Date(int year,int month,int day) //{ // _year = year; // _month = month; // _day = day; //} Date(int year, int month, int day) :_year(year) //初始化列表 用:后面个参数赋值用,隔开,最后一个参数后不加分隔符 , _month(month) , _day(day) {} private: int _year; int _month; int _day; }; int main() { Date d1(2016, 6, 6); return 0; } 注意: 1. 每个成员变量在初始化列表中只能出现一次(初始化只能初始化一次) 。 2. 类中包含以下成员,必须放在初始化列表位置进行初始化: 引用成员变量 const成员变量 类类型成员(该类没有默认构造函数 3. 尽量使用初始化列表初始化,因为不管你是否使用初始化列表,对于自定义类型成员变量

静态与非静态成员变量区别?

心不动则不痛 提交于 2019-12-04 18:56:21
生命周期不同:非静态成员变量随着对象的创建而存在;静态成员变量随着类的加载而存在 调用方式不同:非静态成员变量用 对象名.变量名 调用;静态成员变量用 类名.变量名,JDK1.7以后也能用对象名.变量名调用 别名不同:非静态成员变量也称为实例变量;静态变量称为类变量 数据存储位置不同:成员变量数据存储在堆内存的对象中,对象的特有数据;静态变量数据存储在方法区(共享数据区)的静态区,对象的共享数据 Java 自学指南 Java 面试题汇总PC端浏览【点这里】 Java知识图谱 Java 面试题汇总小程序浏览,扫二维码 所有资源 资源汇总于公众号 来源: https://www.cnblogs.com/ConstXiong/p/11878768.html

第26课 静态成员函数

老子叫甜甜 提交于 2019-12-04 16:34:28
未完成的需求 统计在程序运行期间某个类的对象数目 保证程序的安全性(不能使用全局变量) 随时可以获取当前对象的数目(failure) 假设程序中没有Test对象,你就无法获取当前对象的数目。因为在上一个程序中是使用对象去调用成员函数的,此时如果没有对象,如何去调用呢? 解决方案1: #include <stdio.h> class Test { public: static int cCount; public: Test() { cCount++; } ~Test() { --cCount; } int getCount() { return cCount; } }; int Test::cCount = 0; int main() { printf("count = %d\n", Test::cCount); Test::cCount = 1000; printf("count = %d\n", Test::cCount); return 0; } 上述程序,虽然可以统计出对象的数目(即使是在没有定义对象的情况下),但是从Test::cCount = 1000可以看出,非常不安全,还是不满足要求。那如何来解决呢? 我们需要什么? 不依赖对象就可以访问静态成员变量 必须保证静态成员变量的安全性 方便快捷的获取静态成员变量的值 在C++中可以定义静态成员函数 ——静态成员函数是

学习:类和对象——静态成员变量和函数

随声附和 提交于 2019-12-04 12:09:28
静态成员: 静态成员就是在成员变量和成员函数前加上关键字static,称为静态成员 静态成员分为: 静态成员变量和静态成员函数,其中这两个特点如下 静态成员变量: 特点1、所有对象共享同一份数据 特点2、在编译阶段分配内存 特点3、类内声明,类外初始化 静态成员函数: 特点1、所有对象共享同一个函数 特点2、静态成员函数只能访问静态成员变量 静态成员变量: 示例代码: #include<iostream> #include<string> using namespace std; class Person { public: Person() { cout << this->b << endl; } public: static int a; //定义一个共享静态成员变量 private: static int b; //定义一个私有静态成员变量 }; int Person::a = 1; int Person::b = 2; void test01() { Person p1; cout << p1.a << endl; // 生成p1的对象 直接访问不可以,因为没有在外部对静态成员进行初始化 //cout << p1.b << endl; //无法进行访问,因为静态变量b是私有的 //由于静态成员变量是存在于全局区的,所以我们可以直接通过类名进行访问 cout <<

第26课.类的静态成员函数

故事扮演 提交于 2019-12-04 08:09:26
1.静态成员函数 a.静态成员函数是类中特殊的成员函数(静态成员函数没有隐藏的this参数,不能直接去访问普通的成员函数和成员变量) b.静态成员函数属于整个类所有 c.可以通过 类名 直接访问公有 静态 成员函数(变量) d.可以通过 对象名 访问公有 静态 成员函数(变量) 静态成员函数的定义: 直接通过static关键字修饰成员函数 class Test { public: static void Func1(); //声明 static void Func2(); }; int Test::Func2 //定义 { return 0; } eg: #include <stdio.h> class Demo { int i; public: int getI(); //声明 static void StaticFunc(const char *s); static void StaticSetI(Demo& d, int v); }; int Demo::getI() //定义 { return i; } void Demo::StaticFunc(const char *s) { printf("StaticFunc: %s\n", s); } void Demo::StaticSetI(Demo& d, int v) { d.i = v; //成员函数可以直接调用成员变量