static变量和final变量

1.static变量

      按照是否静态的对类成员变量进行分类可分两种:一种是被static修饰的变量,叫静态变量或类变量;另一种是没有被static修饰的变量,叫实例变量。两者的区别是:     对于静态变量在内存中只有一个拷贝(节省内存),JVM只为静态分配一次内存,在加载类的过程中完成静态变量的内存分配,可用类名直接访问(方便),当然也可以通过对象来访问(但是这是不推荐的)。对于实例变量,每创建一个实例,就会为实例变量分配一次内存,实例变量可以在内存中有多个拷贝,互不影响(灵活)。

2.final变量:

      当你在类中定义变量时,在其前面加上final关键字,那便是说,这个变量一旦被初始化便不可改变,这里不可改变的意思对基本类型来说是其值不可变,而对于对象变量来说其引用不可再变。其初始化可以在两个地方,一是其定义处,也就是说在final变量定义时直接给其赋值,二是在构造函数中。这两个地方只能选其一,要么在定义时给值,要么在构造函数中给值,不能同时既在定义时给了值,又在构造函数中给另外的值。

     当函数参数为final类型时,你可以读取使用该参数,但是无法改变该参数的值。

     另外方法中的内部类在用到方法中的参变量时,此参变也必须声明为final才可使用

3.static final int 一般用于常量定义

static变量和final变量

时间: 2024-11-08 12:56:04

static变量和final变量的相关文章

java中的关键字static(静态变量)和final定义常量

1 package point; 2 3 class Point { 4 5 int x = 0; 6 int y = 0; 7 static int z = 100; // 定义静态变量z,类变量 8 static final double PI = 3.1415926;// final定义常量,它的值在运行时不能被改变 9 10 Point(int a, int b) { 11 //PI=3.1415926; 12 /* 13 * 当使用静态常量的时候,不能在构造函数中初始化, 因为静态时,

变量,final常量,类成员变量,static关键字,实例变量,静态变量,局部变量

1.常量:又称为final变量,在整个程序中仅能被赋值一次 final int num = 1215; num = 1216; // 错误,仅能赋值一次 2.类成员变量:不在方法中定义的变量即为成员变量,在方法体内定义的变量则为局部变量 成员变量含义:对象的属性 public class Book{ int id; string name; //两个成员变量 public String getName(){ int id = 0;  //局部变量,必须进行赋值或初始化 } } 3.static关

Java基础-final变量和普通变量的区别

当用final作用于类的成员变量时,成员变量(注意是类的成员变量,局部变量只需要保证在使用之前被初始化赋值即可)必须在定义时或者构造器中进行初始化赋值,而且final变量一旦被初始化赋值之后,就不能再被赋值了. 那么final变量和普通变量到底有何区别呢?下面请看一个例子: public class Test { public static void main(String[] args) { String a = "hello2"; final String b = "he

【JAVA】在编译期可直接替换的final变量

一.满足以下三个条件,一个final变量就不再是一个变量,而是一个直接量. 使用final修饰符修饰. 在申明的时候就进行初始化 初始化的值在编译器就可以确定. 二.在什么情况下初始化的值在编译期是可以确定下来的? 被赋的表达式只是基本的算术表达式或字符串链接运算,没有访问普通变量,调用方法. package fianlFieldCase; public class Test { public static void main(String[] args) { final String str1

stactic final和final变量的初始化(in java)

1.static final(常量) 初始化可以有两种方法: (1)在声明的时候初始化 static final i = 1; 你也可以将一个静态方法的返回值设置给它 static final int i = f(); static public int f(){ return 1; } (2)在静态代码快中初始化(一般情况下,如果有些代码必须在项目启动的时候就执行的话,需要使用静态代码块,这种代码是主动执行的;一个类可以使用不包含在任何方法体中的静态代码块,当类被载入时,静态代码块被执行,且只

再说java final变量

http://blog.csdn.net/axman/article/details/1460544 从jdk1.0到今天,JAVA技术经过十余年的发展,技术上已经发生了巨大的变化.但final变量的定义从它 诞生那天起,就没有发生任何变化,也就是这十多年它就一直表示它原来的意思. 但遗憾的是,经过十多年仍然有90%的人没有理解它的真实含义,也没有一篇文章,包括我所见到的所有介绍 JAVA的书籍(包括TKJ)都没有说清楚,我相信肯定有些作者是理解的,但没有一个作者向读者说清楚.而中国网友 大多数

java final变量

final变量定义: 变量一经初始化就不能指向其它对象.指向的存储地址不可修改,但指向的对象本身是可以修改的. 先说final变量初始化: 很多文章都这么说:其初始化可以在两个地方,一是其定义处,二是在构造函数中,两者只能选其一. 胡说八道! final变量可以在任何可以被始化的地方被始化,但只能被初始化一次.一旦被初始化后就不能再次赋 值(重新指向其它对象),作为成员变量一定要显式初始化,而作为临时变量则可以只定义不初始化(当然也不能引用) 即使是作为一个类中的成员变量,也还可以在初始化块中初

多线程之 Final变量 详解

原文: http://www.tuicool.com/articles/2Yjmqy 总结: Final 变量在并发当中,原理是通过禁止cpu的指令集重排序(重排序详解http://ifeve.com/java-memory-model-1/ http://ifeve.com/java-memory-model-2/),来提供现成的课件性,来保证对象的安全发布,防止对象引用被其他线程在对象被完全构造完成前拿到并使用. 与Volatile 有相似作用,不过Final主要用于不可变变量(基本数据类型

深入理解 Java final 变量的内存模型

对于 final 域,编译器和处理器要遵守两个重排序规则: 在构造函数内对一个 final 域的写,与随后把这个构造对象的引用赋值给一个变量,这两个操作之间不能重排序 初次读一个包含 final 域的对象的引用,与随后初次读这个 final 域,这两个操作之间不能重排序 举个例子: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 public class FinalExample {     int i;// 普通变量     final i