静态变量

Java中的final,finally,finalize关键字

我的梦境 提交于 2020-03-01 20:16:57
一、final关键字 final 是一个修饰符,在java中它可以修饰类、方法、变量。一旦你将引用声明做final,你将不能改变这个引用了 ,如果你视图将变量再次初始化的话,编译器会报编译错误。final的含义在不同的场景下有细微的差别,但总体来说, 它指的是“不可变”。 final 修饰类时表明这个类不可以被继承。 final 修饰方法时表明这个方法不可以被其子类重写。 final 修饰变量时可分为局部变量、实例变量和静态变量,当 final修饰变量时,该变量的值在初始化后不能发生改变。 修饰局部变量时,该局部变量可以被一次赋值 (可以选择在初始化时赋值或在需要位置赋值,但只能选择一个地方赋值一次), 以后该变量的值不能发生改变 ; 当 final 修饰实例变量时,实例变量必须由程序员在构造器、初始化块、定义时这 3 个位置的其中之一指定初始值 ; 当 final 修饰静态变量时,静态变量必须由程序在静态初始化块、定义时这 2 个位置的其中之一指定初始值 。 finally 是异常处理语句结构的一部分,表示总会执行的代码块。 finalize 是 Object 类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法, 可以覆盖此方法提供垃圾收集时的其他资源回收。但实际上重写该方法进行资源回收并不安全,因为 JVM 并不保证该方法总被调用。 二、final关键字修饰引用类型

JAVA static、final、interface、abstract

◇◆丶佛笑我妖孽 提交于 2020-03-01 16:27:05
1、 static表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块。 被static修饰的成员变量和成员方法独立于该类的任何对象 ; 使用公共内存空间。 用public修饰的static成员变量和成员方法本质是全局变量和全局方法,当声明它类的对象时,不生成static变量的副本,而是类的所有实例共享同一个static变量。 在外部调用静态方法时,可使用“类名.方法名”也可以使用“对象名。方法名”的方式,即调用静态方法可以无需创建对象。 static变量前可以有private修饰,表示这个变量可以在类的静态代码块中,或者类的其他静态成员方法中使用(当然也可以在非静态成员方法中使用),但是不能在其他类中通过类名来直接引用,这一点很重要。实际上你需要搞明白,private是访问权限限定, static表示不要实例化就可以使用 ,这样就容易理解多了。static前面加上其它访问权限关键字的效果也以此类推。 static修饰的成员变量和成员方法习惯上称为静态变量和静态方法,可以直接通过类名来访问,访问语法为: 类名.静态方法名(参数列表...) 类名.静态变量名 用static修饰的代码块表示静态代码块,当Java虚拟机(JVM)加载类时,就会执行该代码块(用处非常大,呵呵)。 1、static变量 按照是否静态的对类成员变量进行分类可分两种

Java中static关键字的作用

安稳与你 提交于 2020-03-01 13:18:34
在Java中, static主要有4中使用情况:成员变量、成员方法、代码块和内部类。 static是与对象解绑的,和对象就没关系了,跟类建立了联系。为某特定数据类型或对象分配单一的存储空间,而与创建对象的个数无关。 修饰成员变量 (属性)时,只要这个类被加载,静态成员变量就会分配到空间,这在内存中只能复制一次,对静态变量的引用有两种方式,分别是“ 类.静态变量"和”对象.静态变量 "。 而实例变量属于对象,只有对象被创建后,实例变量才会被分配内存空间,才能被使用,它在内存中存在多个复制,只有用“对象.实例变量”的方式来引用。 成员方法 ,static方法是类的方法,不需要创建对象就可以被调用, static方法中不能用this和super,不能调用非static方法,不能访问非static类型的属性和方法 , 不能对内部类进行实例化 , 非static方法是对象的方法,只有对象被创建出来后才可以被使用 static一个很重要的用途就是实现 单例设计模式 。单利模式的特点是该类只能有一个实例,为了实现这一功能,必须隐藏类的构造函数,即把构造函数声明为private,并提供一个创建对象的方法,由于构造对象被声明为private,外界无法直接创建这个类型的对象,只能通过该类提供的方法来获取类的对象,要达到这样的目的只能把创建对象的方法声明为static。 3. static代码块

不要通过Application Object或者其他全局静态变量来存放数据

家住魔仙堡 提交于 2020-03-01 09:46:30
不要通过Application Object或者其他全局静态变量来存放数据 转载请注明来自:http://blog.csdn.net/liaoqianchuan00/article/details/24399093 翻译自: http://www.developerphil.com/dont-store-data-in-the-application-object/ 概述 在我们的应用程序中,很多地方可能用到同一个数据。很多时候我们可能不想通过Intent在Activity之间传递或者持久化的存放这些数据来。 我们可能会将这些数据存放在Application对象中,这样我们就可以在所有的Activity中访问了。这个方法很简单,但是实际上是完全错误的。 你的程序可能会因为NullPointerException而crash掉,因为上面的方案是基于你假设你存放的数据一直都在那里的。 例子 Application对象: // access modifiers omitted for brevity class MyApplication extends Application { String name; String getName() { returnname; } void setName(String name) { this.name= name; } }

Java中类的加载顺序剖析

依然范特西╮ 提交于 2020-03-01 00:15:51
这其实是去年校招时的一道阿里巴巴的笔试题,如果没记错的话,当时是作为Java方向的一道选做大题。当然题意没有这么直白,题目只要求你写出程序运行后所有System.out.println的输出结果,其中程序是题目给的,而各个System.out.println的执行顺序不同会导致最后程序输出的结果也不同。 具体的题目我肯定记不清,不过我们可以换个直接的问法,如果类A和类B中有静态变量,静态语句块,非静态变量,非静态语句块,构造函数,静态方法,非静态方法,同时类A继承类B,请问当实例化A时,类内部的加载顺序是什么? 当时我也是一头雾水,事后我就自己写了一个小Demo,这才知道了类内部的实际加载顺,测试代码如下: Class B: public class B{ //静态变量 static int i=1; //静态语句块 static { System.out.println("Class B1:static blocks"+i); } //非静态变量 int j=1; //静态语句块 static{ i++; System.out.println("Class B2:static blocks"+i); } //构造函数 public B(){ i++; j++; System.out.println("constructor B: "+"i="+i+",j="+j); } /

Java学习笔记八(static、final、代码块等)

无人久伴 提交于 2020-02-28 23:12:40
static关键字的使用: static:静态的 static可以用来修饰属性、方法、代码块、内部类; 使用static修饰属性 :静态变量(类变量) 按是否使用static修饰,属性又可以分为静态属性和非静态属性(实例变量)。 实例变量 :如果创建类的多个对象,每个对象都独立的拥有一套类中的非静态属性,通过改变其中一个对象的属性,并不会影响到其他对象的同一属性值。 静态变量 :如果创建类的多个对象,多个对象共享一个静态变量;当我们通过其中一个对象改变其中的属性值时,会导致其他对象调用的此静态变量也是修改过的。 几点说明 : 1、静态变量随着类的加载而加载,可以通过“类。属性”的方式进行调用; 2、静态变量的加载要早于对象的创建; 3、由于类只会加载一次,因此静态变量在内存中也只存在一份:存在于方法去的静态域中; 4、 类变量 实例变量 类 yes no 对象 yes yes 上面标示类和对象出现时类变量和实例变量的情况。 5、静态变量举例:System.out;Math.PI; 使用static修饰方法 :(静态方法) 1、随着类的加载而加载,可以通过“类。静态方法” 2 静态方法 非静态方法 类 yes no 对象 yes yes 3、静态方法中只能调用静态的属性和方法;非静态方法中可以调用静态和非静态的属性和方法。 static的几个注意点 : 1

C语言变量

谁说胖子不能爱 提交于 2020-02-27 15:18:18
C语言变量 任何一种编程语言都离不开变量,特别是数据处理型程序,变量的使用非常频繁,没有变量参与程序甚至无法编制,即使编制运行后的意义也不大。变量之所以重要,是因为变量是编程语言中数据的符号标识和载体。 C语言是一种应用广泛的善于实现控制的语言,变量在C语言中的应用更是灵活多变。那么变量究竟是什么呢?变量是内存或寄存器中用一个标识符命名的存储单元,可以用来存储一个特定类型的数据,并且数据的值在程序运行过程中可以进行修改。可见,变量首先是一个标识符或者名称,就像一个客房的编号一样,有了这个编号我们在交流中就可方便言表,否则,我们只可意会,那多不方便。为了方便,我们在给变量命名时,最好能符合大多数人的习惯,基本可以望名知义,便于交流和维护;其次,变量是唯一确定的对应内存若干存储单元或者某个寄存器。这些是编译器来保证的,用户一般不用费心。 程序员一旦定义了变量,那么,变量就至少可为我们提供两个信息:一是变量的地址,即就是,操作系统为变量在内存中分配的若干内存的首地址;二是变量的值,也就是,变量在内存中所分配的那些内存单元中所存放的数据。 由于程序的多样需要,我们对变量也有各种各样的要求,比如:变量的生命期,变量的初始状态,变量的有效区域,变量的开辟地和变量的开辟区域的大小等等;为了满足这些要求,C语言的发明者就设置了以下变量: 1、 不同数据类型的变量;如:char cHar, int

Java ——变量类型

邮差的信 提交于 2020-02-25 23:43:17
变量声明 int a, b, c; // 声明三个int型整数:a、 b、c int d = 3, e = 4, f = 5; // 声明三个整数并赋予初值 byte z = 22; // 声明并初始化 z String s = "runoob"; // 声明并初始化字符串 s double pi = 3.14159; // 声明了双精度浮点型变量 pi char x = 'x'; // 声明变量 x 的值是字符 'x'。 Java语言支持的变量类型有: 类变量 :独立于方法之外的变量,用 static 修饰。 实例变量 :独立于方法之外的变量,不过没有 static 修饰。 局部变量 :类的方法中的变量。 public class Variable{ static int allClicks=0; // 类变量 String str="hello world"; // 实例变量 public void method(){ int i =0; // 局部变量 } } 举例: package hello; //首先要知道变量应该是赋值以后才能使用的,但是有些不必人为赋值就有默认初始值,但是有些要人为定义初始值 //所以有些直接使用的并不是没有赋值,而是系统自定义了初始值,所以不会报错 public class Variable { public String instance =

Java 变量类型

时光毁灭记忆、已成空白 提交于 2020-02-25 23:26:40
在Java语言中,所有的变量在使用前必须声明。声明变量的基本格式如下: type identifier [ = value ] [ , identifier [ = value ] ... ] ; 格式说明:type为Java数据类型。identifier是变量名。可以使用逗号隔开来声明多个同类型变量。 以下列出了一些变量的声明实例。注意有些包含了初始化过程。 int a , b , c ; // 声明三个int型整数:a、 b、c int d = 3 , e = 4 , f = 5 ; // 声明三个整数并赋予初值 byte z = 22 ; // 声明并初始化 z String s = " runoob " ; // 声明并初始化字符串 s double pi = 3 .14159 ; // 声明了双精度浮点型变量 pi char x = ' x ' ; // 声明变量 x 的值是字符 'x'。 Java语言支持的变量类型有: 类变量:独立于方法之外的变量,用 static 修饰。 实例变量:独立于方法之外的变量,不过没有 static 修饰。 局部变量:类的方法中的变量。 实例 public class Variable { static int allClicks = 0 ; // 类变量 String str = " hello world " ; // 实例变量

实例变量、静态变量、实例方法、静态方法

ε祈祈猫儿з 提交于 2020-02-25 19:53:20
***实例变量:***只有new对象时才会赋值,如果构造方法没有赋值,则赋系统默认值,储存在堆内存中; ***静态变量:***当类加载进jvm时就赋值,如果没有手动赋值,则赋系统默认值,并同时储存在方法区中与class文件关联; ***实例方法:***只有先new对象,通过对象才能调用执行; ***静态方法:***当类加载进jvm时就执行; **实例代码块:**只有在new对象时才执行,在构造方法前执行。 **静态代码块:**类加载进jvm同时执行。 public class Test { //实例代码块 { System . out . println ( "实例代码块执行" ) ; } //静态代码块 static { System . out . println ( "静态代码块执行" ) ; } public static void main ( String [ ] args ) { new Test ( ) ; } } 控制台输出结果: 静待代码块执行 实例代码块执行 **注意:**静态代码块按静态代码块执行顺序执行。实例代码块按实例代码块的顺序执行。 来源: CSDN 作者: qq_28870891 链接: https://blog.csdn.net/qq_28870891/article/details/104503044