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() ,所以它被声 ...
随机推荐
- spring整合hibernate配置文件
Spring对hibernate配置文件hibernate.cfg.xml的集成,来取代hibernate.cfg.xml的配置 spring对hibernate配置文件hibernate.cfg.x ...
- IOS 取消表格单元格 TableViewCell 去掉高亮状态 点击Cell取消选择状态
以下是两种实现效果 1. 自定义cell 继承UITableViewCell 重写 -(void)setSelected:(BOOL)selected animated:(BOOL)animated ...
- C++中的初始化
C++中的RAII机制指明”对象创建时通过构造函数进行初始化,析构时通过析构函数释放资源”,但实际中因类无构造函数时编译器将自动合成一个默认构造函数,该构造函数只服务于自身编译器构造需要而不负责对象成 ...
- HTML5实战——svg学习
百度百科: SVG可缩放矢量图形(Scalable Vector Graphics)是基于可扩展标记语言(XML),用于描述二维矢量图形的一种图形格式.SVG是W3C制定的一种新的二维矢量图形格式,也 ...
- java中的static关键词
以下来自:http://www.cnblogs.com/codc-5117/archive/2011/12/04/2275298.html Static基本规则: (1)一个类 ...
- JS URL参数传递 谷歌乱码解决
//第一个页面 var name=encodeURIComponent("参数"); var url="test1.html?name="+name; //第二 ...
- .vimrc常用
vim 的環境設定參數 :set nu:set nonu 行号 :set tabstop=4 :set softtabstop=4 :set shiftwidth=4 tab :set hlsea ...
- 使用 CSS 去掉 iPhone 网页上按钮的超大圆角默认样式
使用 iPhone 上的浏览器去浏览网页的时候,按钮总是显示超大圆角的样式,显得超级恶心,但是我们自己定义 border-radius 为 0 也无法去除这个圆角,经过搜索发现这是 webikt 内核 ...
- AngularJS之手动加载模块app和controller
使用ng的页面中一般都是使用模块自动加载,页面的结构一般是这样的 加载angularjs脚本 加载业务代码脚本(或者写在script标签中) html结构代码(带有ng指令) 就像这样 app.htm ...
- (转)分布式深度学习系统构建 简介 Distributed Deep Learning
HOME ABOUT CONTACT SUBSCRIBE VIA RSS DEEP LEARNING FOR ENTERPRISE Distributed Deep Learning, Part ...