精华内容
下载资源
问答
  • query = (from c in myreturn.ReturnModels.Shipments where c.ShippedDate == model.StartTime && c.DeliveryDate == model.EndTime select c).ToList();... 怎么初始化这个query?
  • Java成员变量: Java类在生成实例时, jvm会在Java堆中分配一块内存空间, 分配到的地址空间存储所有的成员变量, ...Java局部变量(个人理解) The local variable i may not have been initialized Jav...

    Java成员变量:

    Java类在生成实例时,
    jvm会在Java堆中分配一块内存空间,
    分配到的地址空间存储所有的成员变量,
    根据成员变量数据类型的不同,拥有不同的默认值,
    实例如果有赋值则会覆盖掉默认值,否则不做更改
    ——即,无论如何,属性都会拥有初始值

    Java局部变量(个人理解)

    The local variable i may not have been initialized

    The local variable i may not have been initialized
    

    Java局部变量在方法被调用,程序执行到局部变量声明位置时,
    会将变量类型、变量名称、变量值(若是有值的话,默认不做填充)包装成一个对象压入栈中,
    若是变量为基础类型,直接在val位置存储变量值,
    若为引用类型,则先将对象存入Java堆中,再将堆中地址引用填进栈中val位置

    这里可以看到一个明显区别:

    成员变量,是伴随着对象的实例化,存储在Java堆中,而在Java堆中地址空间是会根据存储类型初始化的
    局部变量,主体是在栈中,无论是何种类型数据,都要首先定位到栈中然后才能获得Java堆的位置(如果是引用类型的话)
    故而,造成两者差别的原因在于,栈中数据不会执行初始化,而堆中数据会有初始化

    总结:

    成员变量依托于Java对象,生命周期相同,一起创建回收,生命周期相对较长
    局部变量依托于方法调用,生命周期与方法的一次调用相同,生命周期短暂

    成员变量存在很大程度的重用特性,
    局部变量一次调用结束便可以判定死亡

    展开全文
  • 它的存储空间是连续的,两个紧密挨着定义的局部变量,它们的存储空间也是紧挨着的。栈的大小是有限的,在 Linux 中可以通过命令 ulimit -s 查看默认栈空间大小,默认情况下为 8192 KB(即 8MB)。因此如果在程序内部...

    在 C 语言中,通常可以把内存理解为四个分区:栈、堆、全局/静态存储区和常量存储区。

    1. (stack,也称“堆栈”)

      通常是用于存储在编译期间就能确定存储大小的变量,用于在函数作用域内创建,在离开作用域后自动销毁的变量的存储区。通常是局部变量、函数参数等的存储区。它的存储空间是连续的,两个紧密挨着定义的局部变量,它们的存储空间也是紧挨着的。栈的大小是有限的,在 Linux 中可以通过命令 ulimit -s 查看默认栈空间大小,默认情况下为 8192 KB(即 8MB)。因此如果在程序内部分配超大的数据,有可能会出错。当然,栈空间大小是可以调整的。

    2. (heap)

      通常是存储那些在编译期间不能确定存储大小的变量,它的存储空间是不连续的,一般由 malloc(或 new)函数来分配内存块,并且需要用 free(delete)函数释放内存。如果程序员没有释放掉,那么就会出现常说的内存泄漏问题。需要注意的是,两个紧挨着定义的指针变量,所指向的 malloc 出来的两块内存并不一定的是紧挨着的,所以会产生内存碎片。另外需要注意的一点是,堆的大小几乎不受限制,理论上每个程序最大可达 4GB。

    3. 全局/静态存储区

      和“栈”一样,通常是用于存储那些在编译期间就能确定存储大小的变量,但它用于的是在整个程序运行期间都可见的全局变量和静态变量(使用 static 修饰)。

    4. 常量存储区

      和“全局/静态存储区”一样,通常是用于存储那些在编译期间就能确定存储大小的常量,并且在程序运行期间,存储区内的常量是全局可见的。这是一块比较特殊的存储去,它们里面存放的是常量,不允许被修改。

    在这里插入图片描述

    因此,局部变量存放在 栈区(stack),如果使用 static 修饰,则存放在全局/静态区,跟是否初始化无关。全局变量存放在 全局/静态区,静态存储区又包括 BSS 段和数据段,未初始化的全局变量存放在 BSS 段,已初始化的全局变量则存放在 数据段

    扩展阅读:

    • BSS段:BSS段(bss segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域。BSS 是英文 Block Started by Symbol 的简称。BSS 段属于静态内存分配,其内容由操作系统初始化(清零,裸机程序需要手动清零),BSS 段不占用可执行文件的空间。
    • 数据段:数据段(data segment)通常是指用来存放程序中已初始化的全局变量的一块内存区域。数据段属于静态内存分配,其内容由程序初始化,需要占用可执行文件的空间。
    • 代码段:代码段(code segment/text segment)通常是指用来存放程序执行代码的一块内存区域。这部分区域的大小在程序运行前就已经确定,并且内存区域通常属于只读,某些架构也允许代码段为可写,即允许修改程序。在代码段中,也有可能包含一些只读的常数变量,例如字符串常量等。
    展开全文
  • public class DatabaseHandler extends SQLiteOpenHelper { // All Static variables // Database Version ...提示说的是局部变量TABLE_LOCATIONLABLES可能没有被初始化?可是我初始化了的呀,这个错误如何发生的呢?
  • 类的属性,或者叫值域方法里的局部变量方法的参数 对于第一种变量,Java虚拟机会自动进行初始化。如果给出了初始值,则初始化为该初始值。如果没有给出,则把它初始化为该类型变量的默认初始值。 int类型变量...
    本问题讨论变量的初始化,所以先来看一下Java中有哪些种类的变量。
    
    • 类的属性,或者叫值域
    • 方法里的局部变量
    • 方法的参数

    对于第一种变量,Java虚拟机会自动进行初始化。如果给出了初始值,则初始化为该初始值。如果没有给出,则把它初始化为该类型变量的默认初始值。
    1. int类型变量默认初始值为0
    2. float类型变量默认初始值为0.0f
    3. double类型变量默认初始值为0.0
    4. boolean类型变量默认初始值为false
    5. char类型变量默认初始值为0(ASCII码)
    6. long类型变量默认初始值为0
    7. 所有对象引用类型变量默认初始值为null,即不指向任何对象。注意数组本身也是对象,所以没有初始化的数组引用在自动初始化后其值也是null。

    对于两种不同的类属性,static属性与instance属性,初始化的时机是不同的。instance属性在创建实例的时候初始化,static属性在类加载,也就是第一次用到这个类的时候初始化,对于后来的实例的创建,不再次进行初始化。这个问题会在以后的系列中进行详细讨论。

    对于第二种变量,必须明确地进行初始化。如果再没有初始化之前就试图使用它,编译器会抗议。如果初始化的语句在try块中或if块中,也必须要让它在第一次使用前一定能够得到赋值。也就是说,把初始化语句放在只有if块的条件判断语句中编译器也会抗议,因为执行的时候可能不符合if后面的判断条件,如此一来初始化语句就不会被执行了,这就违反了局部变量使用前必须初始化的规定。但如果在else块中也有初始化语句,就可以通过编译,因为无论如何,总有至少一条初始化语句会被执行,不会发生使用前未被初始化的事情。对于try-catch也是一样,如果只有在try块里才有初始化语句,编译部通过。如果在catch或finally里也有,则可以通过编译。总之,要保证局部变量在使用之前一定被初始化了。所以,一个好的做法是在声明他们的时候就初始化他们,如果不知道要出事化成什么值好,就用上面的默认值吧!

    其实第三种变量和第二种本质上是一样的,都是方法中的局部变量。只不过作为参数,肯定是被初始化过的,传入的值就是初始值,所以不需要初始化。 
    展开全文
  • 昨天谈了Java中成员变量的一些特点,知道了它的生存周期比局部变量长,但对成员变量如何初始化和其内部的运行却还没有说清楚。那么这篇文章主要解决的问题有:成员变量是如何初始化的?它在内存中是如何运行的?对比...

    昨天谈了Java中成员变量的一些特点,知道了它的生存周期比局部变量长,但对成员变量如何初始化和其内部的运行却还没有说清楚。那么这篇文章主要解决的问题有:

    成员变量是如何初始化的?

    它在内存中是如何运行的?

    对比局部变量有什么不同?

    我们要如何正确使用变量?

    我们先来看第一个问题

    当系统加载类或者创建类的实例时,此时系统便自动为成员变量分配空间,并在分配空间后自动为成员变量指定初始化值

    看如下几行代码:

    public static int weight;

    public String name;

    SongKe sk1 = new SongKe();

    SongKe sk2 = new SongKe();

    sk1.name="黑妞";

    sk1.name="白妞";

    sk1.weight=60;

    sk2.weight=70;

    当程序第一次new SongKe()时,系统通常会在第一次使用SongKe类是加载这个类同时初始化。在类的准备阶段,系统会为该类的类变量(成员变量)分配内存空间,并指定默认初始化值。此时系统内的存储情况如下图所示:

    62c82e886388

    初始化SongKe类后的存储示意图.jpg

    从图中可以看到,当SongKe类初始化完成后,系统将在堆内存中为其分配一块内存区里面包含weight类变量的内存,并将其默认值设为0。

    接着系统把创建的SongKe对象赋值给了变量sk1,由于SongKe对象里面包含了实例变量name(实例变量可以在创建实例时分配到内存空间并指定内存值),所以当创建第一个对象后内存示意图如下:

    62c82e886388

    创建第一个对象后的存储示意图

    从图中可以看到类变量weight并不属于SongKe对象,它是属于SongKe类的,所以创建对象的时候不需要为weight分配内存,系统只是为name分配的内存空间并指定默认初始值为:null。

    其实这里已经谈到了第二个问题,成员变量的内存机制,即类变量与实例变量分开存储,首先创建类变量,然后创建对象时为实例变量分配内存空间并赋值。

    然后我们来到SongKe sk2 = new SongKe();这行代码。此时创建了第二个对象,此时因为SongKe类已经在内存中创建了,所以不用再需要为SongKe类进行初始化了。当sk1 = “白妞”;时,将为sk1的name实例变量赋值,此时内存图如下

    62c82e886388

    为第一个对象的实例变量赋值后的存储示意图.jpg

    从图中可以看到,name的实例变量属于单个SongKe实例的,因此修改第一个对象的变量时仅仅只与该对象有关。同理修改第二个对象的时候也与SongKe类和其它对象没有关系。

    当执行到sk1.weight=60;时,此时通过SongKe对象来修改它的类变量,从图中也可以看出SongKe这个对象没有保存weight这个变量,通过sk1访问类变量weight其实还是由SongKe类来访问类变量,修改类变量后示意图如下:

    62c82e886388

    设置sk1的类变量weight之后的存储示意图.jpg

    从图中可以看出,不管任何实例访问类变量weight,本质上是通过SongKe类来访问weight类变量,它们访问的都是同一块内存区域。

    至此成员的变量的内存机制已经分析完,但要注意的是,当程序需要访问类变量时,尽量使用类作为主调,而不要使用对象主调,这样可以避免程序产生歧义,提高程序的可读性。

    接下来我们来看第三个问题:对比局部变量有什么不同?

    局部变量与成员变量不同,它不属于任何类或者实例,因此总是保存在其所在的方法的栈内存中。另外,栈内存中的变量无需系统垃圾回收,往往随方法或代码块的运行结束而结束。因此局部变量的范围是从初始化该变量开始的,知道该方法或该代码块运行完成而结束,同时它占用的内存区通常较小。

    了解成员和局部变量的区别后,心里肯定还有这样的疑问:到底在什么时候用成员变量或者局部变量了?

    如果从程序的运行结果来看,大部分时候都可以直接使用类变量或实例变量来解决问题。但实际上这种用法是不太好的,因为当定义一个成员变量的时候,它将被放在堆内存中同时其作用域也将扩大到类存在范围或对象存在范围。这也会直接造成更大的内存开销、出现卡顿,同时不利于提高程序的内聚性(模块之间功能强度的度量,内聚性越高程序的独立性也就越强)。

    下面举出几种优先使用成员变量的情况:

    定义的变量是用于描述某个类或某个对象的固有信息时,比如人的姓名和年龄等信息,它每个人都具有的信息所以可以被定义成成员变量。

    如果在某个类中需要一个变量来保存该类或者实例运行时的状态信息。

    如果某个信息需要在某个类的多个方法之间进行运行共享。

    根据局部变量的特点,在使用它是应该尽可能缩小局部变量的作用范围,局部变量的作用范围越短,它在内存中停留的时间也就越短,程序的运行性能就越好。所以,能使用代码块局部变量的地方,就坚决不使用方法局部变量。

    说了这么多,关于变量的使用还是要多实践多敲代码,才能进一步深刻理解其含义,就会发现Java语言设计者的巧妙构思,祝你在Java的大海中遨游愉快。

    展开全文
  • 如何实现这一模式?全局变量当然是一个简单可行的方法,然而,这太丑陋。嗯,其实,丑陋倒也罢了,最严重的是它将引诱程序员滥用全局变量,这将导致维护的灾难。    既然全局变量是可能有害的,那么,我们我们把...
  • Java 变量到底要如何初始化

    千次阅读 2016-05-31 06:32:16
    类的属性,或者叫值域方法里的局部变量方法的参数 对于第一种变量,Java虚拟机会自动进行初始化。如果给出了初始值,则初始化为该初始值。如果没有给出,则把它初始化为该类型变量的默认初始值。 int类型变量...
  • 静态局部量xor eax,eax // 将eax清零mov al,mem //mem用于标记静态变量是否被被初始化,初始化为1,未初始化为0and eax,1 // 与 1 操作test eax,eaxjnz XXXX //XXXX的地方表示跳过初始化 mov cl,mem or cl,1 // 或 1...
  • 局部静态变量如何做到只初始化一次的? 关于编译选项 -Wa,-adlhn参考 http://blog.csdn.net/lanxinju/article/details/5900986     以下内容来自于内网别的高人的回复 可以写个程序测试一下:  ...
  • 为了理解为什么,我们先来了一下方法是如何被执行的,然后再分析局部变量的安全性,最后再介绍利用局部变量不会共享的特点而产生的解决并发问题的一些技术。方法是如何被执行的inta = 7;int[] b = fibonacci(a);int...
  • 在java中如果没有给成员变量赋值java会自动赋0,而对于局部变量却不会这是为什么呢?下面就讨论下java如何给成员变量赋值的。 1普通成员变量:对于普通成员变量而言,当你实例的时候通过构造函数java会自动赋0。...
  • #include #include #include //全局变量:用于保存通讯录 ...如果在定义结构体类型的时候直接用全局变量temp,字符数组可以自动初始化,其元素都为'\0',但是...定义全局变量跟局部变量初始化应该注意哪些问题?
  • 如何初始化引用类型的成员变量

    千次阅读 2016-11-01 19:23:41
    在C++中声明引用类型的变量时,必须紧接着给此变量赋初值,要不这样的话会产生编译错误,局部的引用类型变量还能做到立即赋初值,那么,引用类型的成员变量如何给它赋值呢?应该在它的构造函数初始化列表中给它赋值...
  • printf("初始化顺序表的长度%d: \n", wsa.length); printf("创建固定数据元素的顺序表:\n", wsa.length); CreatList(wsa); Print(wsa); ListInsert_Sq(wsa, 2, 56); printf("在位序为2处插入56:\n", wsa....
  • C++:哪些变量会自动初始化

    千次阅读 2018-08-29 14:55:54
    在C语言中的全局变量和静态变量都是会自动初始化为0,堆和栈中的局部变量不会初始化而拥有不可预测的值。 C++保证了所有对象与对象成员都会初始化,但其中基本数据类型的初始化还得依赖于构造函数。 下文来详细探讨C...
  • final关键字可以对类、方法、成员变量、局部变量进行修饰,下面我将会从这几个方面讲解final关键字如何使用和理解。一、final关键字修饰类当用final关键字修饰一个类时表明这个类无法被继承 ,如果你想设计一个类不...
  • 三种语言中,静态和全局变量的初始化默认置0。...但是java对局部变量是不会进行初始化的,你不能对一个未经初始化的变量进行操作题目中所说的未经初始化,其实相当于在说变量没有被赋初值,即人为地为...
  • 对于局部变量,如果没有初始化,那么他的值是不可以预测的,不要期望他将会等于你想要的值。因此,对每一个变量初始化是一个好习惯。 int i = 0; float f= 0; short s = 0; long l = 0L; char ch = 0...
  • 在C语言中的全局变量和静态变量都是会自动初始化为0,堆和栈中的局部变量不会初始化而拥有不可预测的值。 C++保证了所有对象与对象成员都会初始化,但其中基本数据类型的初始化还得依赖于构造函数。 下文来详细探讨C...
  • 局部变量与成员变量的初始化 对于方法体内的局部变量,Java用一个编译时错误来提醒初始化: void fun(){ int x; x++;//报错:i not initialized } 对于类中的成员变量,在声明类的对象时,每个基本类型的...
  • 每年一到冬天,总会有这么一个问题在货车司机中形成很大的争议:该不该用淋水器?有些卡友赞同:不用淋水器长下坡...如何解决刹车失灵的问题?壹有足够的安全意识;提前规划好路线,遇到第一次跑的路线,提前了解一...
  • 在C++中,我们经常难以说清楚全局变量、局部变量和静态局部变量的区别...其中,全局变量和静态局部变量存放在全局数据区,这两个变量在程序开始时就已经分配和初始化存储空间了。而普通局部变量存放在栈区,它在程序...
  • 在上一篇文章中,我们讨论了汇编语言中如何定义字面量与局部变量。在这篇文章中,我们将继续讨论,如何在汇编语言中定义C语言中的全局变量。在讨论全局变量之前,我们首先需要介绍一下寻址方式。寻址方式所谓寻址...

空空如也

空空如也

1 2 3 4 5 ... 19
收藏数 361
精华内容 144
关键字:

局部变量如何初始化