zoukankan      html  css  js  c++  java
  • 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中的那些单纯的特性,不要把它当做定义类的关键字使用,虽然它可以。

  • 相关阅读:
    演练:根据安全角色筛选站点地图节点
    请单击下面的按钮,以重定向到可以选择新数据存储区的页。下面的消息可能会有助于诊断问题: 无法连接到 SQL Server 数据库。
    ASP.NET验证控件
    VS2008样式图片背景
    .net面试题大全(有答案)
    ASP.NET角色权限设置(参考MSDN)了解角色管理
    什么是MFC,使用MFC有什么好处?
    ASP.NET C# 之 Activex用C#编写ActiveX控件(三)
    一个分析飞信的牛人网站
    智能手机程序安装三法
  • 原文地址:https://www.cnblogs.com/niuxichuan/p/5444013.html
Copyright © 2011-2022 走看看