常量与变量

Java内存区域和内存溢出异常

时光毁灭记忆、已成空白 提交于 2019-12-01 07:24:15
  Java与C++之间有一堵由内存动态分配和垃圾收集技术所围成的“高墙”,墙外面的人想进去,墙里面的人却想出来——《围Java》·周志明   Java程序员将c++中繁琐的delete交给了虚拟机,虽然我们一直创建对象,但从未手动删除过对象,这一切正悄然发生着。我们把内存控制的权利交给了JVM,直到那一天,Java程序员终于想起了曾一度被他们支配的恐怖和被囚禁于鸟笼中的那份屈辱。 一、运行时数据区/内存模型   运行时数据可划分为若干个数据区域,其中有的属于线程共享,而又有些为线程私有。共享区域会随着虚拟机进程的启动而存在,而线程私有的区域会随着线程的启动和结束而建立和销毁。    二、程序计数器(Program Counter Register)   我更喜欢用“寄存器”的概念去理解他,我们知道在CPU中有寄存器用于保存指令地址和保存计算结果。类似的,程序计数器就像一个指针,保存了指向方法区中的方法字节码的地址,程序寄存器只占用很小的内存空间,是线程私有的,可以看做是当前线程所执行的字节码的行号指示器,如果你查看程序字节码,会发现很多指令,程序计数器按顺序存储这些字节码,执行引擎执行计数器中的字节码以实现循环、跳转、分支、线程恢复等操作。由于程序计数器是线程私有的,没一条线程都会有一个独立的程序计数器,所以各个线程之间的程序计数器互不影响,独立存储。如果正在执行的是本地方法

分析一套源代码的代码规范和风格并讨论如何改进优化代码

北战南征 提交于 2019-12-01 07:06:35
我的工程实践课题是《图书馆管理系统》,结合工程实践找了一份java代码,下面对其进行讨论,该项目在github上的具体框架如下图: 1. 类名 类名采用 大驼峰 的命名形式,所谓大驼峰就是首字母大写,例如UpperCameCase。 抽象类命名使用 Abstract 或 Base 开头;异常类使用 Exception 结尾;测试类命名以测试的类名开始,以 Test 结尾。 枚举类名带上 Enum 作为后缀, 枚举成员 名称需要大写, 单词间 用下画线隔开。 2. 包名 包名统一使用小写, 点分隔符 之间有且仅有一个自然语义的英语单词。一般单词使用单数形式,但是类名如果有复数含义的话,则可以使用复数形式。 3. 变量 变量可分为 不可变量(常量) 和 可变变量 。 (1). 常量 在 Java 中,常量一般指 final 关键字修饰的变量。 1、 全局常量 和 类内常量 的命名采用字母全部大写,单词之间加 下画线 的方式。 所谓全局常量指的是 类的公开静态属性 ,使用 public static final 修饰;类内常量指的是 私有静态属性 ,使用 private static final 修饰。 2、 局部常量 则采用 小驼峰 的形式。所谓局部常量指的是方法内的常量。 例子展示(代码片可以左右移动): (2). 可变变量 可变变量一般常用 小驼峰 的命名形式,如 myName

【C#教程08】C# 常量

你说的曾经没有我的故事 提交于 2019-12-01 04:37:47
C# 常量 常量是固定值,程序执行期间不会改变。常量可以是任何基本数据类型,比如整数常量、浮点常量、字符常量或者字符串常量,还有枚举常量。 常量可以被当作常规的变量,只是它们的值在定义后不能被修改。 整数常量 整数常量可以是十进制、八进制或十六进制的常量。前缀指定基数:0x 或 0X 表示十六进制,0 表示八进制,没有前缀则表示十进制。 整数常量也可以有后缀,可以是 U 和 L 的组合,其中,U 和 L 分别表示 unsigne.. 常量是固定值,程序执行期间不会改变。常量可以是任何基本数据类型,比如整数常量、浮点常量、字符常量或者字符串常量,还有枚举常量。 常量可以被当作常规的变量,只是它们的值在定义后不能被修改。 整数常量 整数常量可以是十进制、八进制或十六进制的常量。前缀指定基数:0x 或 0X 表示十六进制,0 表示八进制,没有前缀则表示十进制。 整数常量也可以有后缀,可以是 U 和 L 的组合,其中,U 和 L 分别表示 unsigned 和 long。后缀可以是大写或者小写,多个后缀以任意顺序进行组合。 这里有一些整数常量的实例: 212 /* 合法 */ 215u /* 合法 */ 0xFeeL /* 合法 */ 078 /* 非法:8 不是一个八进制数字 */ 032UU /* 非法:不能重复后缀 */ 以下是各种类型的整数常量的实例: 85 /* 十进制 */

Java编码规范

允我心安 提交于 2019-11-30 23:31:56
1 注释规范 1.1 注释的三种形式。 Java语言提供了3种形式的注释 // text 单行注释 /* text */ 注释若干行 /** text */ 文档注释。注释若干行,并可写入javadoc文档 1.2 类、类属性、类方法的注释必须使用Javadoc规范。 使用/**内容*/格式,不得使用// xxx方式。 说明:在IDE编辑窗口中,Javadoc方式会提示相关注释,生成Javadoc可以正确输出相应注释;在IDE中,工程调用方法时,不进入方法即可悬浮提示方法、参数、返回值的意义,提高阅读效率。 (1)例如:类的注释: /**
 * description: 该文件说明
 * @author 张三(张三邮箱)
 * @date yyyy-MM-dd HH:mm:ss
 * @version 1.0
 */ (2)方法的注释: /** * description:<方法说明> * @author 张三(张三邮箱) * @date yyyy-MM-dd HH:mm:ss * @param <参数名称> <参数说明> * @return <返回值说明> */ 1.3 所有的抽象方法(包括接口中的方法)必须要用Javadoc注释。 除了返回值、参数、异常说明外,还必须指出该方法做什么事情,实现什么功能。 说明:对子类的实现要求,或者调用注意事项,请一并说明。 1.4

谈谈你对指针的理解

戏子无情 提交于 2019-11-30 23:13:40
一、概念   指针是一种数据类型,可以操作内存;   指针本质上是地址,指向以它为地址的内存单元;   指针变量是存放内存地址的变量。 二、指针常量与常量指针   char * const p:指针常量 ,本质是常量,这个指针是一个常量;   const char *p :常量指针 ,本质是指针, 这个指针指向一个常量。   ① const char *p 和 char const *p: const修饰 *p, *p 只读 ,不可以修改, p 可以改变;   ② char * const p: const修饰p ,p只读 ,不可以修改, *p 可以修改;   ③ const char * const p: *p 和 p都是只读不可修改。 三、指针的运算   * 对指针指向的内存的地址进行取值操作   & 取指针变量存放的位置   ++ 增加一个单位长度的地址,   -- 减小一个单位长度的地址   + 加一个数字表示增加数字个单位的长度的地址   - 减一个数字表示减少数字个单位的长度的地址 四、空指针   可以指向任何类型对象的地址 NULL。 五、野指针   指向一个非法的或已销毁的内存的指针。     ① 指针变量没有被初始化 char *p;     ② 指针p被free或者delete之后,只是把指针所指的内存释放掉了,没有改变指针的值(置空) 六、万能指针  

PHP基础之常量与变量

邮差的信 提交于 2019-11-30 22:55:28
1、变量:用来存储信息的空间大小 $var 2、常量:定义之后不可以更改,标识符,并且给其赋值,常量是全局,在整个页面中均可使用,常量一般有英文字母、下划线、数字组成,开头不能是数字和$   使用define(常量的key,常量的value,true/flase)定义,define(number,2)   true/false:大小写问题,true--->大小写不敏感,默认是true   define(str,“icq”);   echo STR; 不能打印不出 icq 3、字符串 “ ” ‘ ’   字符串中有需要引号的地方要用单引号“ ‘ ’ ”或者“ \”\" "   使用 . 拼接字符串   strlen() 计算字符串长度   strops(字符串,需要寻找的字符串) 查找字符串,返回首次索引的位置 4、运算符:+ - * / %(取余)   整除 echo intdiv(4,3)     \php7.3.4nts>php.exe -R "var_dump(intdiv(4,3));"   赋值运算符 = += -= *= /= %= .=(转化成字符串,拼接在一起)   自增自减 (i=8)     $a=i++ $a=8 i=9 先赋值,后加一     $a=++I $a=9 i=9 先加一,后赋值     $a=--I $a=7 i=7 先减一,后赋值     $a

c语言中的const的作用及解析

偶尔善良 提交于 2019-11-30 20:55:33
有时候我们希望定义这样一种变量,它的值不能被改变,在整个作用域中都保持固定。例如,用一个变量来表示班级的最大人数,或者表示缓冲区的大小。为了满足这一要求,可以使用 const 关键字对变量加以限定: const int MaxNum = 100 ; //班级的最大人数 这样 MaxNum 的值就不能被修改了,任何对 MaxNum 赋值的行为都将引发错误: MaxNum = 90 ; //错误,试图向 const 变量写入数据 我们经常将 const 变量称为常量(Constant)。创建常量的格式通常为: const type name = value; const 和 type 都是用来修饰变量的,它们的位置可以互换,也就是将 type 放在 const 前面: type const name = value; 但我们通常采用第一种方式,不采用第二种方式。另外建议将常量名的首字母大写,以提醒程序员这是个常量。 由于常量一旦被创建后其值就不能再改变,所以常量必须在定义的同时赋值(初始化),后面的任何赋值行为都将引发错误。一如既往,初始化常量可以使用任意形式的表达式,如下所示: #include <stdio.h> int getNum () { return 100 ; } int main () { int n = 90 ; const int MaxNum1 = getNum

让你彻底弄懂指针、引用与const

寵の児 提交于 2019-11-30 20:48:06
今天重温了一下C++ Primer,对上面三个概念有了更清晰的认识,自我认为已经有了比较全面的理解了,所以赶紧记录下来,也请大家批评指正。 1.引用 引用,简单来说就是为对象起了一个别名,可以用别名来等同于操作对象,通过将声明符写成&d的形式来定义引用类型,其中d是声明的变量名,即引用变量的别名: int i =1; int &r = i; //r指向i(r是i的别名,可以通过操作r来改变i的值)、 r=2; cout<<r<<" "<<i<<" "<<endl; //r和i的值都为2 int j=r; //j被初始化为i的值,即为2 通俗的讲,为引用赋值,实际上就是将值赋给了与引用绑定的对象。获取引用的值,实际上就是获取了与引用绑定的对象的值。但是引用本身不是一个对象,所以不能定义引用的引用。 另外引用必须要被初始化,刚才也说了,在定义引用的时候,程序是吧引用和它的初始值绑定在一起,而不是将初始值拷贝给引用。一旦初始化完成,引用将和它的初始值对象一直绑定在一起,因为无法令引用重新绑定到另外一个对象,因此引用必须初始化。 int &r; //错误,引用必须被初始化 int &r=10; //错误,引用类型的初始值必须是一个对象 int i=10,&r=i; //正确,r是一个引用,与i绑定在了一起,i是一个int int j=0; int& r=j,p=j; //正确,r是一个引用

C博客作业01--分支、顺序结构

北城余情 提交于 2019-11-30 19:55:22
0.展示PTA总分(0----2) 1.本章学习总结(2分) 1.1 学习内容总结 1. 常量,变量和数据类型 常量为不可变量,变量为可变量。在一个程序中,准确判断何为变量与常量,及该设定几个变量十分重要。 常量和变量都有类型。C语言中最常用的数据类型包括 int——整型.其格式控制字符串——%d char——字符型.其格式控制字符串——%c float——单精度浮点型.其格式控制字符串——%lf double——双精度浮点型(与float,double型数据占用空间更大。精度更高)其格式控制字符串——%lf 在输出格式控制中,可以加宽度限制词。如,整型数据的输出格式控制说明%md,浮点型数据的输出格式控制说明为%.mlf。 2. 基本程序框架 3. 输入,输出,定义数据类型的基本语句 4. 关系运算符与逻辑运算符 5. 常用数学函数 平方根函数 sqrt (x) 绝对值函数 fabs (x) 幂函数 pow (x,n) 指数函数 exp (x) 对数函数 log (x) 6. 分支结构 二分支结构的一般形式: 执行流程:先求解表达式,如果表达式的值为真,就执行语句1;否则就执行语句2.至少会执行一个语句。 多分支结构1: if (表达式) { 语句1; } .... else if (表达式n - 1) { 语句n - 1; } else { 语句n; } 它的执行流程为

C++学习笔记之常量篇

点点圈 提交于 2019-11-30 19:08:54
1. 定义成 const 后的常量,程序对其中只能读不能修改。 以下程序是错误的,因为开头就已经固定了常量,便不能再对其进行赋值: #include <iostream> using namespace std; int main() { const double pi; //圆周率的值用pi表示 pi=3.14159265; cout<<"圆周率的近似值是"<<pi<<endl; return 0; } 下面给出正确的赋值方法: #include <iostream> using namespace std; int main() { const double pi=3.141592; //圆周率的值用pi表示 cout<<"圆周率的近似值是"<<pi<<endl; return 0; } 2. 宏定义 #define 和常量 const 的区别 类型和安全检查不同 宏定义是字符替换,没有数据类型的区别,同时这种替换没有类型安全检查,可能产生边际效应等错误; const常量是常量的声明,有类型区别,需要在编译阶段进行类型检查 编译器处理不同 宏定义是一个"编译时"概念,在预处理阶段展开,不能对宏定义进行调试,生命周期结束与编译时期; const常量是一个"运行时"概念,在程序运行使用,类似于一个只读行数据 存储方式不同 宏定义是直接替换,不会分配内存,存储与程序的代码段中;