静态变量

heap和stack的区别

爱⌒轻易说出口 提交于 2020-04-08 06:35:19
参考《程序员面试宝典》 1、栈区(stack) 由编译器自动分配和释放,存放函数的参数值,局部变量值等。其操作方式类似于数据中的栈。 2、堆区(heap) 一般由程序员分配和释放,若程序员不释放,程序结束时可能由操作系统回收。 3、全局区(静态区static) 全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。程序结束后有系统释放。 4、文字常量区 常量字符串存放在此处,程序结束后由系统释放。 5、程序代码区 存放函数体的二进制代码。 堆和栈的理论知识如下: 1、申请方式: 栈:系统自动分配。 堆:程序员自己申请,并指明大小,c中使用函数malloc,c++中使用new。 2、申请后系统的响应 栈:只要栈的剩余空间大于所申请空间,系统将为程序提供内存,否则将报异常提示栈溢出。 堆:首先应该知道操作系统有一个记录空闲内存地址的链表,当系统收到程序的申请时,会遍历该链表,寻找第一个空间大于所申请空间的堆节点,然后将该节点从空闲节点链表中删除,并将该节点的空间分配给程序。对于大多数系统,会在这块内存空间中的首地址处记录分配的代销。这样,代码中的delete语句才能正确的释放本内存空间。另外,由于找到的堆节点大小不一定正好等于申请的大小,系统会自动的将多余的那部分重新放入空闲链表中。 3、申请大小的限制 栈

JVM内容整合

爱⌒轻易说出口 提交于 2020-04-08 00:48:55
前言: JVM全称Java Virtual Machine是虚构的计算机,也是因此Java才可在各个系统平台运行,本文内容篇幅较长主要分为JVM整体流程,内存划分及组成以及JVM机制等方面进行介绍     一、JVM整体流程 一个java文件执行的大致步骤流程如下: 一张复杂的JVM架构图:   JVM加工类过程 加载 将class字节码文件加载进虚拟机,存储至元空间的方法区内 验证 文件格式验证 元数据验证 字节码验证 符号引用验证 准备 为类变量(static修饰)分配内存并设置初始值(指JVM默认值,例如:引用类型为null,int类型为0,不是类中指定的值) 如果类变量被final修饰,则直接赋类中定义的默认值(特殊情况:该final静态变量如果需要计算,会导致初始化) 成员变量(实例变量、属性、属于对象)不分配内存 解析 将常量池的符号引用转为直接引用(由于java为值传递,去掉了指针) 初始化 给类变量赋值(类中定义的默认值) 初始化静态语句块   相关题目测试 class GrandParent3{ static { System.out.println("GrandParent3静态代码块"); } } class Parent3 extends GrandParent3{ public final static String parent3="hello

痕迹_PHP基础语法——变量

ぃ、小莉子 提交于 2020-04-07 13:05:42
变量 特性:php使用变量之前不需要声明。 1.变量范围 一般,声明的变量(不在函数内)范围为声明处到页面文件结束。不受<?php ?>标签和include和require引入文件的限制。其中,COOLIE和SESSION可以多页面中使用。 手册例子: 全局变量与局部变量范围简单理解 1 <?php 2 //global 关键字 3 $a = 1; 4 $b = 2; 5 6 function Sum() 7 { 8 global $a, $b; 9 $b = $a + $b; 10 } 11 12 Sum(); 13 echo $b; //输出 3 14 //超全局变量 $GLOBALS 15 $a = 1; 16 $b = 2; 17 18 function Sum() 19 { 20 $GLOBALS['b'] = $GLOBALS['a'] + $GLOBALS['b']; 21 } 22 23 Sum(); 24 echo $b; //输出 3 25 ?> 注意 :在变量前面加上 global 的名称,就是定义该变量为全局变量。用这种方式,就不需使用 $GLOBALS 数组,也能让变量进入自行开发的函数中。 2.变量命名(标识符是变量的名称) (1).长度任意,字母、数字、下划线组成 注意:不能以数字开头 (2).变量名严格区分大小写

变量存储位置

五迷三道 提交于 2020-04-06 10:10:53
1、首先,讲下 “堆 heap” 和 “栈 stack” 的区别:     一个由 c/c++编译过的程序占用的内存分为一下几个部分     (1)、栈区 stack :由编译器自动分配释放,               存放局部变量     (2)、堆区 heap :一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收,               注意它与数据结构中的堆是两回事,分配方式类似于链表。               存放malloc和new分配的空间     (3)、全局区(静态去)static : 全局变量和静态变量(全局和局部静态变量)的存储是放在一块的。                     初始化的全局变量和静态变量在一块区域,                     未初始化的全局变量和静态变量又放在相邻的另一块区域中。                     程序结束后由系统释放。     (4)、文字常量区 : 常量字符串放在这里。                程序结束后由系统释放。     (5)、程序代码区 : 存放函数体的2进制代码。     这是一个前辈写的,非常详细     //main.cpp     int a = 0; 全局初始化区     char *p1; 全局未初始化区     main()     {    

Java之关键字的使用

耗尽温柔 提交于 2020-04-05 22:03:52
java中有很多的关键字,他们的使用让Java语言变得更加灵活、易用,下面将介绍Java中最常用的几个关键字并说明其用法。 关键字:return 1.使用范围: 使用在方法体中 2.作用: ​ ① 结束方法 ​ ② 针对于返回值类型的方法,使用"return 数据"方法返回所要的数据。 3.注意点: return关键字后面不可以声明执行语句。 在异常处理中try-catch-finally的结构中,如果try或catch中的结构中写了return,但是finally中的结构仍会执行。 关键字:this 1. 可以调用的结构: 属性、方法;构造器 2. this调用属性、方法: this理解为:当前对象 或 当前正在创建的对象 2.1 在类的方法中,我们可以使用"this.属性"或"this.方法"的方式,调用当前对象属性或方法。但是,通常情况下,我们都择省略"this."。特殊情况下,如果***方法的形参和类的属性同名时***,我们必须显式的使用"this.变量"的方式,表明此变量是属性,而非形参。 2.2 在类的构造器中,我们可以使用"this.属性"或"this.方法"的方式,调用当前正在创建的对象属性或方法。但是,通常情况下,我们都择省略"this."。特殊情况下,如果***构造器的形参和类的属性同名***时,我们必须显式的使用"this.变量"的方式,表明此变量是属性

结对编程——阶段二

北慕城南 提交于 2020-04-05 15:03:15
结对编程阶段二 一.实验目标  1)体验敏捷开发中的两人合作。  2)进一步提高个人编程技巧与实践。 二 .实验目的   1)根据以下问题描述,练习结对编程(pair programming)实践;   2)要求学生两人一组,自由组合。每组使用一台计算机,二人共同编码,完成实验要求。   3)要求在结对编程工作期间,两人的角色至少切换 4 次;   4)编程语言不限,版本不限。建议使用 Python 或 JAVA 进行编程。 三.实验内容     1.Java的规范化编程   统一是指,对于同一个概念,在程序中用同一种表示方法,比如对于供应商,既可以用supplier,也可以用provider,但是我们只能选定一个使用,至少在一个Java项目中保持统一。统一是作为重要的,如果对同一概念有不同的表示方法,会使代码混乱难以理解。即使不能取得好的名称,但是只要统一,阅读起来也不会太困难,因为阅读者只要理解一次。在统一和达意的前提下,用尽量少的标识符。如果不能达意,宁愿不要简洁。比如:theOrderNameOfTheTargetSupplierWhichIsTransfered 太长, transferedTargetSupplierOrderName则较好,但是transTgtSplOrdNm就不好了。省略元音的缩写方式不要使用,我们的英语往往还没有好到看得懂奇怪的缩写。Java中

经典的Java基础面试题集锦

只愿长相守 提交于 2020-04-03 05:26:51
问题:如果main方法被声明为private会怎样? 答案:能正常编译,但运行的时候会提示”main方法不是public的”。 问题:Java里的传引用和传值的区别是什么? 答案:传引用是指传递的是地址而不是值本身,传值则是传递值的一份拷贝。 问题:如果要重写一个对象的equals方法,还要考虑什么? 答案:hashCode。 问题:Java的”一次编写,处处运行”是如何实现的? 答案:Java程序会被编译成字节码组成的class文件,这些字节码可以运行在任何平台,因此Java是平台独立的。 问题:说明一下public static void main(String args[])这段声明里每个关键字的作用 答案:public: main方法是Java程序运行时调用的第一个方法,因此它必须对Java环境可见。所以可见性设置为pulic. static: Java平台调用这个方法时不会创建这个类的一个实例,因此这个方法必须声明为static。 void: main方法没有返回值。 String是命令行传进参数的类型,args是指命令行传进的字符串数组。 问题:==与equals的区别 答案:==比较两个对象在内存里是不是同一个对象,就是说在内存里的存储位置一致。两个String对象存储的值是一样的,但有可能在内存里存储在不同的地方 . ==比较的是引用而equals方法比较的是内容

经典的Java基础面试题集锦

江枫思渺然 提交于 2020-04-03 05:26:05
转载地址:http://www.lupaworld.com/article-242000-1.html 问题:如果main方法被声明为private会怎样? 答案:能正常编译,但运行的时候会提示”main方法不是public的”。 问题:Java里的传引用和传值的区别是什么? 答案:传引用是指传递的是地址而不是值本身,传值则是传递值的一份拷贝。 问题:如果要重写一个对象的equals方法,还要考虑什么? 答案:hashCode。 问题:Java的”一次编写,处处运行”是如何实现的? 答案:Java程序会被编译成字节码组成的class文件,这些字节码可以运行在任何平台,因此Java是平台独立的。 问题:说明一下public static void main(String args[])这段声明里每个关键字的作用 答案:public: main方法是Java程序运行时调用的第一个方法,因此它必须对Java环境可见。所以可见性设置为pulic. static: Java平台调用这个方法时不会创建这个类的一个实例,因此这个方法必须声明为static。 void: main方法没有返回值。 String是命令行传进参数的类型,args是指命令行传进的字符串数组。 问题:==与equals的区别 答案:==比较两个对象在内存里是不是同一个对象,就是说在内存里的存储位置一致

Java 面试题基础概念收集

感情迁移 提交于 2020-04-03 05:25:32
问题:如果main方法被声明为private会怎样? 答案:能正常编译,但运行的时候会提示”main方法不是public的”。 问题:Java里的传引用和传值的区别是什么? 答案:传引用是指传递的是地址而不是值本身,传值则是传递值的一份拷贝。 问题:如果要重写一个对象的equals方法,还要考虑什么? 答案:hashCode。 问题:Java的”一次编写,处处运行”是如何实现的? 答案:Java程序会被编译成字节码组成的class文件,这些字节码可以运行在任何平台,因此Java是平台独立的。 问题:说明一下public static void main(String args[])这段声明里每个关键字的作用 答案:public: main方法是Java程序运行时调用的第一个方法,因此它必须对Java环境可见。所以可见性设置为pulic. static: Java平台调用这个方法时不会创建这个类的一个实例,因此这个方法必须声明为static。 void: main方法没有返回值。 String是命令行传进参数的类型,args是指命令行传进的字符串数组。 问题:==与equals的区别 答案:==比较两个对象在内存里是不是同一个对象,就是说在内存里的存储位置一致。两个String对象存储的值是一样的,但有可能在内存里存储在不同的地方 . ==比较的是引用而equals方法比较的是内容

Java中static和final的区别

心已入冬 提交于 2020-04-03 04:33:53
static 是静态修饰关键字,可以修饰变量和程序块以及类方法: 当定义一个static的变量的时候jvm会将将其分配在内存堆上,所有程序对它的引用都会指向这一个地址而不会重新分配内存; 当修饰一个程序块的时候(也就是直接将代码写在static{...}中)时候,虚拟机就会优先加载静态块中代码,这主要用于系统初始化; 当修饰一个类方法时候你就可以直接通过类来调用而不需要新建对象。 final 可以修饰变量、方法及类: 当定义一个final变量时,jvm会将其分配到常量池中,程序不可改变其值; 当修饰一个方法时,该方法在子类中将不能被重写; 当修饰一个类时,该类不能被继承。 static变量 按照是否静态的对类成员变量进行分类可分两种:一种是被static修饰的变量,叫静态变量或类变量;另一种是没有被static修饰的变量,叫实例变量。两者的区别是: 对于静态变量在内存中只有一个拷贝(节省内存),JVM只为静态分配一次内存,在加载类的过程中完成静态变量的内存分配,可用类名直接访问(方便),当然也可以通过对象来访问(但是这是不推荐的)。对于实例变量,没创建一个实例,就会为实例变量分配一次内存,实例变量可以在内存中有多个拷贝,互不影响(灵活)。   2. static方法 静态方法可以直接通过类名调用,任何的实例也都可以调用,因此静态方法中不能用this和super关键字