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() ,所以它被声 ...
随机推荐
- UVA 208 (DFS)
题意:找出1到T的所有路径: 坑点:一开始以为是到终点,读错了题意,没测试第二个样例,结果WA了4遍,坑大了: #include <iostream> #include <cmath ...
- gcc学习笔记
1:第一个程序 : hello world #include <stdio.h> int main(void) { printf("Hello , world ! \n" ...
- jsp状态管理
http无状态协议 服务器记不住你 每次浏览器访问,服务器不会特点保存相应信息,故记不住你 jsp状态存储的两种机制 cookie 存储在客户端 用途: 1.简化登陆 2.追踪特定对象 3.保存用户常 ...
- Python条件语句
1.简介 多个条件判断,用elif语句. 如果判断需要多个条件需同时判断时,可以使用 or (或),表示两个条件有一个成立时判断条件成功: 使用 and (与)时,表示只有两个条件同时成立的情况下,判 ...
- hdu 1016
这是一道考搜索的题目.这道题我用深搜解决了,不过说实话自己对于深搜理解得并不深刻,在这里对于这一题总结一下. 这道题输入为一个实数n,要求输出有1~n这n个数所组成的所有素数环(这是素数环),素数环的 ...
- 1-Recyclerview使用系列之Recyclerview的列表数据显示
使用步骤已经写到我的公众号,二维码在下面,欢迎关注,谢谢. 本人联系方式: 更多精彩分享,可关注我的微信公众号: 若想给予我分享更多知识的动力,请扫描下面的微信打赏二维码,谢谢!: 微信号:Weixi ...
- LA 3938 动态最大连续和 线段树
题目链接: https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show ...
- Toolkit.getImage获取图片
public class Img { private static final Toolkit tk = Toolkit.getDefaultToolkit(); public static fina ...
- EF学习笔记——通用增删改查方案
http://blog.csdn.net/leftfist/article/details/25005307 我刚接触EF未久,还不知道它有什么强大之处,但看上去,EF提供了一般的增删改查功能.以往用 ...
- .NET垃圾回收:非托管资源,IDispose和析构函数的结合
http://blog.jobbole.com/85436/ 原文出处: 田小计划 欢迎分享原创到伯乐头条 前面一篇文章介绍了垃圾回收的基本工作原理,垃圾回收器并不是可以管理内存中的所有资源.对于 ...