静态变量

深入分析Java中的关键字static

馋奶兔 提交于 2020-02-08 11:57:15
在平时开发当中,我们经常会遇见static关键字。这篇文章就把java中static关键字的使用方法的原理进行一个深入的分析。先给出这篇文章的大致脉络: 首先,描述了static关键字去修饰java类、方法、变量、代码块的方法 然后,从底层分析static关键字, 接下来,给出static的一些使用场景和案例 最后,对static进行一个总结,包括和普通变量的区分。 OK,开始今天的文章。 一、static关键字的基本用法 1、static关键字基本概念 我们可以一句话来概括:方便在没有创建对象的情况下来进行调用。 也就是说:被static关键字修饰的不需要创建对象去调用,直接根据类名就可以去访问。对于这个概念,下面根据static关键字的四个基本使用来描述。然后在下一部分再来去分析static的原理,希望你能认真读完。 2、static关键字修饰类 java里面static一般用来修饰成员变量或函数。但有一种特殊用法是用static修饰内部类,普通类是不允许声明为静态的,只有内部类才可以。下面看看如何使用。 如果没有用static修饰InterClass,则只能new 一个外部类实例。再通过外部实例创建内部类。 3、static关键字修饰方法 修饰方法的时候,其实跟类一样,可以直接通过类名来进行调用: 4、static关键字修饰变量 被static修饰的成员变量叫做静态变量

Java期末复习

天大地大妈咪最大 提交于 2020-02-08 05:00:13
类变量也叫静态变量,也就是在变量前加了static 的变量; 实例变量也叫对象变量,即没加static 的变量; 区别在于: 类变量和实例变量的区别在于:类变量是所有对象共有, 其中一个对象将它值改变,其他对象得到的就是改变后的结果; 而实例变量则属对象私有,某一个对象将其值改变,不影响其他对象; 2. 在类中定义的成员变量如果你没有初始化java会自动帮你初始化, 如果是数字会自动初始化成0,字符会初始化成’o’,对象引用会初始化成null. 当然如果你定义的是局部变量就必须初始化了,否则编译会报错 这正是java的特点,极大的提高了代码安全性 3.定义方法p176(方法调用用栈) 访问修饰符 修饰符 返回值类型 方法名(){ 方法体 } 4.对象和类 区别:对象可以使用类中的方法和变量,而变量不行;变量声明之后要进行赋值,而对象不用 联系:类是封装对象的属性和行为的载体,而对象的属性以成员变量的形式存在。 对象的方法以成员方法的形式存在,在成员方法内定义的变量为局部变量。 变量:成员变量/类变量/数据域(静态变量(有static),实例变量),局部变量(在方法体中定义的变量) 局部变量必须先赋值再使用,成员变量有默认值 公共类必须与文件同名 源代码中的每个(※每个类)类(※编译后为。class)编译成.class文件 uml图+为public修饰符 p283

php框架制做笔记

陌路散爱 提交于 2020-02-08 00:54:24
在学习完基础之后,最好的提高方式是做一个自己的框架,因为框架会用到各个知识点,在制做过程中,复习,巩固,提高。 在框架中,因为是单入口,整个脚本运行时都存在的变量我们应该设为静态变量,这样它在每个地方都可以调用。 1、框架第一步最重要的就是需要框架给项目创建相关的目录,在创建目录时: 脚本文件路径在框架中很重要,在获取当前脚本路径时,$_SERVER['SCRIPT_FILENAME']和__FILE__都可以获取,而区别在于文件被include或require时__FILE__仍然返回原脚本路径,前者则会返回包含它的文件路径。 2、处理框架文件的自动载入 文件在载入时应用一个静态变量来判断它是否已经被载入过,防止重复载入 3、处理框架整体的配置文件和项目配置文件 4、控制器动作模块的调用 对url处理,并实例化控制器类 执行方法 对象在实例化时应用一个静态变量来判断它是否已经被实例化过,防止重复实例化(简单的单例模式) 5、自定义错误处理 和异常处理 在W3Cschool中有明确的解释 6、生成运行时的编译文件runtimefile这个文件, 第一次运行时成为编译文件,并创建目录,并生成欢迎页,第二次再运行时判断,如果有这个文件只需要引入这个文件,就不再去再运行创建目录等操作 7、错误和异常日志处理 8、目录处理 9、路由处理 10、集成各种类:图片处理、文件上传、数据库处理

JAVA第三次作业

江枫思渺然 提交于 2020-02-06 05:34:07
(一)学习总结 1.什么是面向对象的封装性,Java中是如何实现封装性的?试举例说明。 封装性是面向对象的第一大特性,所谓的封装性就是指对外部不可见。 JAVA中的封装性格式: 属性封装: private 属性类型 属性名称; 方法封装: private 方法返回值 方法名称(参数列表){} 例如: class Person{ private String name; private int age; public void tell(){ System.out.println("姓名":+name+",年龄:"+age); } } public class EncDemo02{ public static void main(String args[]){ Person per=new Person(); per.name="张三"; per.age=-30; per.tell(); } } 2.阅读下面程序,分析是否能编译通过?如果不能,说明原因。 (1) class A{ private int secret = 5; } public class Test{ public static void main(String args[]){ A a = new A(); System.out.println(a.secret++); } } 运行结果: 因为secret被封装了

2017第三次java作业

好久不见. 提交于 2020-02-06 05:33:27
(一).学习总结 1.什么是面向对象的封装性,Java中是如何实现封装性的?试举例说明。 封装性就是对外部不可见,避免程序中用对象直接访问类中的属性。为了避免错误,所以在开发中将类中的属性进行封装。 属性封装: private 属性类型 属性名称; 方法封装: private 方法返回值 方法名称(参数列表){} 2.阅读下面程序,分析是否能编译通过?如果不能,说明原因。 (1) class A{ private int secret = 5; } public class Test{ public static void main(String args[]){ A a = new A(); System.out.println(a.secret++); } } 不能运行,不能通过编译,因为类的属性为私有,secret被封装了,只能在A中访问,不能直接访问。 (2) public class Test{ int x = 50; static int y = 200; public static void method(){ System.out.println(x+y); } public static void main(String args[]){ Test.method(); } } 不能运行,因为static变量是全局变量是私有数据,在main中不可以直接访问

Java内部类

南楼画角 提交于 2020-02-06 03:33:24
—— 你放心去浪,我替你说谎。 一、内部类与外部类之间的关系 1、内部类定义于外部类中,是一个相对独立的实体,对该外部类文件进行编译,会产生两个.class文件,其中内部类的.class文件名名称为 外部类名$内部类名.class。 2、内部类可以访问外部类的所有方法和属性,即使是私有,这是因为内部类持有一个外部类的一个引用。外部类无法直接访问内部类的属性和方法,必须通过内部类的对象引用才能进行访问,如果是静态内部类,外部类可以通过内部类的类名来引用静态变量。 3、内部类如果要声明静态变量,内部类必须声明为静态类。 二、非静态内部类对象的创建 1、在外部类之外创建内部类对象,需要先创建外部类对象,在通过外部类对象调用内部类的构造方法进行实例化。外部类对象只能调用内部类的构造方法,非构造方法以及元素必须通过内部类引用才能调用。 2、如果在外部类内部创建内部类对象,可以直接调用内部类的构造方法进行创建。构造方法可以被外部类调用,其他方法和属性必须通过内部类引用或类名才能调用。 三、内部类的分类 1、成员内部类:定义在外部类中的普通类(非static),属于外部类的成员,可以访问外部类的任何变量和方法。 2、局部内部类:定义在外部类的局部范围内,例如定义在方法中,只允许在方法中访问该内部类,不允许在方法外访问。局部内部类一般用在用于辅助解决问题而又不希望创建一个公共类的场景。 3

C语言运行时存储器分布

♀尐吖头ヾ 提交于 2020-02-05 14:05:21
程序在运行过程中,数据在存储器中是怎样分布的又是怎样变化的?堆栈在函数调用的过程中是怎样活动的?以下几点可能帮助读者解读此问题: 内存分布:当程序运行到main函数时,程序员定义的全局变量或者静态变量已经在内存中分配好了,当然是链接器加入的代码发挥的作用,同时还会初始化堆栈区域。具体存储器空间分布为:代码区→只读数据区→初始化数据区→未初始化数据区→堆区→······←栈区→命令行参数区,环境变量。不同的计算机架构和工具链,存储器分布可能有略微差别; 代码区:程序存储空间; 只读数据区:字符串常量,const修饰的全局变量和静态变量; 初始化数据区:初始化不为0的全局变量,初始化不为0的静态变量; 未初始化数据区:初始化为0的全局变量和静态变量,未初始化的全局变量和静态变量; 堆区:用于为程序员动态申请的变量分配空间; 栈区:用于为函数局部变量、参数、返回值自动分配空间,函数结束后自动释放空间。 命令行参数、环境变量区:操作系统中使用。 强调两点: 程序在进入main函数之前,已经完成数据在内存中的分配、初始化,包括数据区,堆栈区等。关于这部分代码对于开发者不可见,属于C标准运行时的一部分。 函数在调用和被调用过程中,都伴随着入栈和出栈的活动,因此栈发挥着重要作用。函数的局部变量、参数、返回值都存在栈区中。函数结束后,栈区空间自动释放,栈区担任着一个临时存储的角色

static 关键字

一曲冷凌霜 提交于 2020-02-05 03:50:23
C++中的static 在c++的语法中,与static变量(静态变量)相对应的是auto变量(自动变量) 在实际运用当中,一般不会用到自动变量显示说明。 auto double num ; double num ; 以上语句实际作用效果相等。 静态变量作用范围在一个文件内,程序开始执行时分配空间,结束时释放空间。静态变量和静态函数在其他文件内是不可见的。 static变量在第一次使用时进行初始化,默认初始化为0,函数退出时,系统仍保存着static变量的空间和存储内容。下一次访问这个静态变量的时候它保持着上一次更改的内容。 # include <iostream> using namespace std ; void func ( ) ; void main ( ) { func ( ) ; func ( ) ; } void func ( ) { int a = 1 ; static int b = 1 ; cout << "a=" << a << "\tb=" << b << endl ; a ++ ; b ++ ; } java中的static 需要注意的是,java中的static关键字与C++中的功能是有差别的。 用static声明的变量是类变量,用static声明的方法是类方法。(非static声明的分别是实例变量和实例方法) java中的类变量与C+

数据在内存中存放的形式

时光总嘲笑我的痴心妄想 提交于 2020-02-04 06:11:42
数据在内存中的存放共分为以下几个形式: 1:栈区(stack)--由编译器自动分配并且释放,该区域一般存放函数的参数值、局部变量的值等。 2:堆区(heap)--一般由程序员分配释放,若程序员不释放,程序结束时可能由操作系统回收。 3:寄存器--用来保存栈顶指针和指令指针 4:全局区(静态区)(static)--全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。程序结束后由系统释放。 5:文字常量区--常量字符串就是放在这里的。程序结束后由系统释放。 6:程序代码区--存放函数体的二进制代码。 来源: https://www.cnblogs.com/cf2yy/p/3505353.html

iOS中内存管理的问题——堆和栈

杀马特。学长 韩版系。学妹 提交于 2020-02-04 05:46:53
计算机系统中,运行的应用程序的数据都是保存在内存中的,不同类型的数据,保存的内存区域不同: 1 ) 栈区(stack ) 由编译器自动分配并释放 ,一般保存函数的参数值、局部变量 2 ) 堆区(heap ) 由程序员分配和释放 ,如果程序员不释放, 程序结束后,可能会由操作系统回收 3 ) 全局区(静态区) (static) 全局变量和静态变量的存储是放在一起的,初始化的全局变量和静态变量存放在一块内存屈原中,未初始化的全局变量和静态变量在相邻的另一块区域, 程序结束后由系统释放 4 ) 文字常量去 存放常量字符串, 程序结束后由系统释放 5 ) 程序代码区 存放函数的额二进制代码 堆和栈的内存 1 、在 iOS 中,堆区的内存是所有应用程序共享 2 、堆中的内存分配是由系统来负责的 3 、系统使用一个链表来维护所有已经分配过的内存空间 4 、系统只是记录分配了多少字节给应用程序,并不管理具体类型的 “匿名” 5 、如果变量使用结束后,需要释放内存,oc中当一个变量的引用计数 == 0 ,就说明没有任何变量使用该空间,系统就直接收回 6 、如果程序员变量使用之后,不释放内存,该内存区域会永远被占用,内存泄露! 7 、野指针,当对象已经被释放,程序中的变量的指针,仍然指向该内存地址,如果再向该对象发送消息,就会报告野指针 来源: https://www.cnblogs.com