Java和C++中的static
1.Java类中的static变量和static方法会在类装载的过程中就得到内存分配,然后就会进行初始化工作。最多可能会被初始化3次,静态代码块的执行在main方法之前。
static变量不可以在构造函数中进行初始化。
而普通的成员变量会在new一个对象的时候才得到初始化,最多的话可能会被初始化4次。
2.C++中类内定义的static变量仅仅是声明而已,只有在类外重新写一次(显示初始化是可选的)才是定义。
类内的static变量和局部static变量一样,(都是存储在全局静态变量区)即使没有显示初始化,编译器也会给一个默认初始值。前提是类的static变量必须在类外定义过。
static除了有限的情况以外(查阅C++ Primer),都不可以进行类内初始化。
C++类的static方法在类内定义过之后就会分配存储空间,定义在全局静态区。
3.关于C++的声明与定义
声明是不分配存储空间的,只是起一个说明的作用。定义是会分配存储空间的,而是否给予初始值是可选的。
在类中的话,我认为,成员变量都可以看做是声明,即使存在类内初始化的现象,我也觉得是一种声明,因为只有在为对象分配存储空间以后数据成员才会有存储空间。
所以对于static变量,毫无疑问是声明,对于其他普通变量,无论是否存在类内初始化,我都认为是声明。
而类的成员函数我认为都可以看做是定义,无论是静态的还是普通的成员函数,虽然他们的存储位置不同(全局静态区和程序代码区)。
因为所有的对象共享成员函数的存储。
4.Java中的构造函数不是一般的成员函数,因为main方法是static方法,构造函数作为非static方法却可以被调用(new一个对象时这种情形比比皆是),
足以说明构造函数的特殊性。
5.关于C++中的new和delete
new一个对象或者数组时,返回的指针是存储在栈区的,数组成员或者数据成员是存储在堆区的。
delete([])掉指针就可以delete掉堆中的内存。
new一个类的对象数组的时候,只能调用类的默认构造函数。
new一个数组的时候,是无法赋初值的。
在构造函数中用了new来申请内存的时候,一定记得在析构函数中要手工释放。
6.关于C++中的struct和class
C++中的struct和class的区别是不大的,当然,C++也向下兼容C风格的单纯的struct。
关于C++中的struct和class的区别,参考:http://blog.csdn.net/nocky/article/details/6195556。
建议在C++中使用struct时还是只保持C中的那些单纯的特性,不要把它当做定义类的关键字使用,虽然它可以。
Java和C++中的static的更多相关文章
- [ 转载 ] Java基础4--Java中的static关键字解析
Java中的static关键字解析 static关键字是很多朋友在编写代码和阅读代码时碰到的比较难以理解的一个关键字,也是各大公司的面试官喜欢在面试时问到的知识点之一.下面就先讲述一下static关键 ...
- Java 继承关系中:static,构造函数,成员变量的加载顺序
首先看下面的例子: package simple.demo; /** * @author Administrator * @date 2019/01/03 */ public class ClassA ...
- (转)Java中的static关键字解析
转载: http://www.cnblogs.com/dolphin0520/p/3799052.html 一.static关键字的用途 在<Java编程思想>P86页有这样一段话: &q ...
- 关于Java中的static关键字
Java中的 static 关键字,确实是一个关键的字(key word),今天就来总结一下它的用法,说说为什么关键. Java中的 static 关键字主要是用来做内存管理的.理解了这句话才能够比较 ...
- Java中的static关键字解析
Java中的static关键字解析 static关键字是很多朋友在编写代码和阅读代码时碰到的比较难以理解的一个关键字,也是各大公司的面试官喜欢在面试时问到的知识点之一.下面就先讲述一下static关键 ...
- java中的static使用--静态变量、静态方法
Java 中的 static 使用之静态变量 大家都知道,我们可以基于一个类创建多个该类的对象,每个对象都拥有自己的成员,互相独立.然而在某些时候,我们更希望该类所有的对象共享同一个成员.此时就是 s ...
- (转)Java中的static关键字解析
转自http://www.cnblogs.com/dolphin0520/p/3799052.html 一.static关键字的用途 在<Java编程思想>P86页有这样一段话: “sta ...
- Java中的static的使用
Java中的static使用之静态变量 神话丿小王子的博客主页 1.Java 中被static修饰的成员称为静态成员或类成员.它属于整个类所有,而不是某个对象所有,即被类的所有对象所共享.且优先于对象 ...
- java中的static详解
如果一个类成员被声明为static,它就能够在类的任何对象创建之前被访问,而不必引用任何对象.static 成员的最常见的例子是main( ) .因为在程序开始执行时必须调用main() ,所以它被声 ...
随机推荐
- 在maven项目中解决第三方jar包依赖的问题
在maven项目中,对于那些在maven仓库中不存在的第三方jar,依赖解决通常有如下解决方法: 方法1:直接将jar包拷贝到项目指定目录下,然后在pom文件中指定依赖类型为system,如: < ...
- maven 基本常识以及命令
Maven库: http://repo2.maven.org/maven2/ Maven依赖查询: http://mvnrepository.com/ Maven常用命令: 1. 创建Maven的普通 ...
- 巧用TexturePacker命令行
游戏开发使用TexturePacker来生成图片的atlas sheet, 工具非常好用. 一般GUI的方法, 新建一个tps文件, 将要图片加载进来,调整参数和输出路径, 最后点publish. 在 ...
- 图数据库(graph database)资料收集和解析 - daily
Motivation 图数据库中的高科技和高安全性中引用了一个关于图数据库(graph database)的应用前景的乐观估计: 预计到2017年,图数据库产业在数据库市场的份额将从2个百分点增长到2 ...
- Linux简介
一.Linux发展史 Linux出现之前,还有一个叫Minix的家伙(Andrew S. Tanenbaum教授为了教学买了Unix系统,参考其代码,但没有任何的代码抄袭,自己写了Minix系统,并开 ...
- POJ 2481 Cows(树状数组)
Cows Time Limit: 3000MS Memory L ...
- CDH版本升级
近期项目中需要用oozie workflow调度hivesql,发现无法执行查询语句,见:https://community.cloudera.com/t5/Batch-Processing-and- ...
- UIApplication的使用
//// UIApplication的使用// IOS笔记//// Created by **** on ****.// Copyright © 2013年 ***. All rights re ...
- js中的this指针(二)
在 js 中声明并定义一个函数后,除了定义时传入的形式参数,函数还会接收到 2 个附加的参数:this 和 arguments. this 指针的值取决于调用时的模式. 当这个函数被保存为对象的一个属 ...
- 单例设计模式getInstance()
对象的实例化方法,也是比较多的,最常用的方法是直接使用new,而这是最普通的,如果要考虑到其它的需要,如单实例模式,层次间调用等等. 直接使用new就不可以实现好的设计好,这时候需要使用间接使用n ...