java常量和final不全的介绍

 

注:本节不着重讨论,final和static。具体讨论详见《修饰词专题(暂定名)》。

       在《java程序设计教程》书中并未见到常量概念。

       所谓常量可以理解成一种特殊的变量,它的值被设定后,在程序运行过程中不允许被改变。

一、定义并初始化常量

final 常量名=值;

final double PI=3.14; final String LOVE="imooc";

常量名一般使用大写字符。

      

两种方法:(这里有点像是讲final的)

实际只有第一种是常量的。

       1)如果该成员域同时具有最终属性(final)和静态属性(static),则该成员域只能在定义时赋值。

如static final double PA=3.8;

 

  • 节外知识 *修饰词只有final能用在方法体 本节简单说明,具体讨论详见《修饰词专题(暂定名)》

如:public class Test {

        public void ape(){

           public int bb=3;  

        }

}

会报错Illegal modifier for parameter bb; only final is permitted。即bb有个非法修饰符,只有final才能用(只有final才能用在方法里面)

构造方法,成员方法均尝试过!   

 

继续,只能在定义时赋值:

比如这样

.1static final Student std=new Student("213");

①.2static final(这里加不加final对要说明的原理没有影响) Student std=new Student("213");

  static final Student afg=std;//这一行是重点

别看afg=std指向同一个对象了,常量就是值设定好了,内存中已确定,后来再改std指向的对象的值(假设std没用final修饰,afg指向的对象也是不会变的)

 

  • 节外知识 *关于static成员变量创建 本节简单说明,具体讨论详见《修饰词专题(暂定名)》

static成员变量 即类变量 是类加载到内存中时变量即分配内存。

所以 这样创建,是会报错的:

int a=4;

static int cd=a

报错:Cannot make a static reference to the non-static field a

因为 a(成员变量)只有在类实例化的时候,才会被分配内存。换言之,才会被创建。

但cd(类变量)是类加载到内存的时候就要求被创建,所以会报错。

 

只能这样static int cd=1; 

或这样 static int a=4;

static int cd=a;

 

but,

static int cd;

static Student stu;

这种只声明不初始化是完全可以的,值为0(int基本数据类型变)或为null(stu引用数据类型变量)。 

 

再扯回来:

只能在定义时赋值。

只声明不去初始化

static final Student afg;

static final int a;

报错:The blank final field a may not have been initialized。即空白final域a可能没有初始化。

—————————————————————————————

严格意义上来讲,只有上面的叫常量。

 

 

       2)如果成员域具有最终属性(final),但不具有静态属性(static),则该成员域只能在定义时 或  在构造方法中赋值,只能赋值一次。

.1final Student std=new Student("213");

.2Student sss=new Student("213");

Student std=sss;

 

public class Test {

final Student stdf;

   Test(){

      stdf=new Student("546");

   }

}

但是必须所有构造方法都得给它赋值,写多个构造方法,有一个没给它赋值就会报The blank final field stdf may not have been initialized。 即空白的final域stdf可能没有被初始化。

 

对两种方法的说明:

为什么有static时,只能在定义时赋值呢。因为类变量要在类加载到内存中时才初始化。

 

 

       程序中使用常量可以提高代码的可维护性。例如,在项目开发时,我们需要指定用户的性别,此时可以定义一个常量 SEX,赋值为 "男",在需要指定用户性别的地方直接调用此常量即可,避免了由于用户的不规范赋值导致程序出错的情况。

 

再扯一个常用常量的例子

系统类java.lang.Math中成员域PI的定义为:

public static final double PI =3.14159265358979323846;

 

用PI时,直接Math.PI代替。

这样简单粗暴才像常量。

你可能感兴趣的:(Java)