static关键字(二)

上一篇static关键字,自认为比较详细了。不懂的可以留言。下面接着讲:

静态最终成员变量:

就是同时被final和static修饰的类的成员变量。其跟仅用final修饰的成员变量类似。除了可以在定义或者说在首次声明的时初始化,只能在静态块中初始化。(大家注意我用绿色标记出来的一句话)

那我们比较学习一下下面的两种情况,大家记忆好:

1:只有final修饰的成员变量的初始化问题

(1)首次定义要被final修饰的的变量的时候,就初始化;

(2)若首次定义final修饰的成员变量的时候,没有初始化,那么就要重载相关类的构造函数了,然后再构造函数中为final修饰的成员变量赋值。

(3)被final修饰的成员变量相当于常量,其值不能被在更改。。。

2:被static修饰成员变量的特点

只有一块内存资源,没有副本,上一篇中讲的很详细。

3:同时被static和final修饰的成员变量(一旦被赋值之后,值不能被改变且有两种方式该变量的方式)

同时被这两个关键字大家不要怕,一个个的看。

也就是说:两种访问成员变量的方式。第一次:类名;对象;

同时: 初始化问题(

<1>定义的时候,初始化;

<2>在静态代码块中初始化;

▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲

▇<3>在构造器中定义。我们试试。▇

▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲

(用很多黑色的图形围住的<3>是错误的,我自己想到的,结果通过验证是错的,具体详见文章最后的地方)

***对应<2>在静态代码块中使用的例子

public  class ClassInfo3
{
    public static int  number;//班级数量
    public static final  String classDesc;//未被初始化

//静态代码块
    static{
     classDesc ="班级描述";
    }

public ClassInfo3(){
         int n =0;
          n =number  ++;
         System.out.println(n);
    }

public void showNumber(){
      System.out.println(number);
    }

}

public class ClassInfoDemo3
{
    public static void  main(String args[]){
      ClassInfo3 c1 = new ClassInfo3();//生成实例1.println(0,1);
      c1.showNumber();//
      System.out.println(c1.classDesc);
      System.out.println(ClassInfo3.classDesc);
      System.out.println("*****************以上是实例1的测试数据***************");
      System.out.println("");
      ClassInfo3 c2  = new ClassInfo3();//println(1,2);
      c2.showNumber();
      System.out.println(c2.classDesc);
      System.out.println(ClassInfo3.classDesc);
    }
}

这是运行效果图:



****3:我们测试第三种情况,在(2)代码中稍微改动一下

下面是代码:

public  class ClassInfo4
{
    public static int  number;//班级数量
    public static final  String classDesc;//未被初始化

//静态代码块
    /*这是被注释了的代码
    static{
     classDesc ="班级描述";
    }
    */

public ClassInfo4(){
        //首先给静态成员变量赋值
         classDesc ="阳光积极的1204班";
         int n =0;
          n =number  ++;
         System.out.println(n);
    }

public void showNumber(){
      System.out.println(number);
    }

}

public class ClassInfoDemo4
{
    public static void  main(String args[]){
      ClassInfo4 c1 = new ClassInfo4();//生成实例1.println(0,1);
      c1.showNumber();//
      System.out.println(c1.classDesc);
      System.out.println(ClassInfo4.classDesc);
      System.out.println("*****************以上是实例1的测试数据***************");
      System.out.println("");
      ClassInfo4 c2  = new ClassInfo4();//println(1,2);
      c2.showNumber();
      System.out.println(c2.classDesc);
      System.out.println(ClassInfo4.classDesc);
    }
}

可以看到的是:加入static修饰的final最终变量是不能通过构造函数来给(静态最终变量)赋值的。

从而可以总结出一下几点:

关于静态最终变量:static 表示是类成员变量,没有副本,只有唯一的资源,可以通过两种方式来访问;再加上final修饰的话,表示:可以通过两种方式访问的常量。

这里注意:静态最终变量的初始化问题:(1)定义变量的时候,初始化;(2)若一开始没有初始化的话,那么就需要构造静态代码块来为其赋值。

写的有点乱,但总是懂了。static、final的用法了。如果看不懂,欢迎留言:一起学习,一起进步。java是一门很不错的语言,爱上java,爱上生活。

时间: 2024-10-06 02:34:06

static关键字(二)的相关文章

JAVA学习第九课(关键字二static)

关键字二. static(静态) 特点: static 用于修饰成员(成员函数和成员函数) static的存在,优先于对象存在,随着类的加载而加载 static所修饰的成员,被所有对象共享 static可以直接被类名调用,格式:System.out.println(Person.country);:类名.静态成员 使用细节 静态方法只能访问静态成员,即static修饰的成员,static int data; 静态方法不可以写this.super:this代表着当前调用该方法的对象. 主函数(ma

【C语言天天练(二)】static关键字

用于不同的上下文环境时,static关键字具有不同的意义. (一) 当它用于函数定义时,或用于代码块之外的变量声明时,static关键字用于修改标示符的链接属性,从externl改为internal.但标示符的存储类型和作用域不受影响.这种方式声明的函数或变量只能用于声明它们的源文件中. (二) 当它用于代码块内部的变量声明时,static关键字用于修改变量的存储类型,从自动变量修改为静态变量,但变量的链接属性和作用域不受影响.用这种方式声明的变量在程序执行之前创建,并在程序的整个执行期间一直存

C语言学习笔记(二) static关键字详细分析

C语言代码是以文件为单位来组织的,在一个源程序的所有源文件中,一个外部变量(注意不是局部变量)或者函数只能在一个源程序中定义一次,如果有重复定义的话编译器就会报错.伴随着不同源文件变量和函数之间的相互引用以及相互独立的关系,产生了extern和static关键字. 关键字static有着不寻常的历史.起初,在C中引入关键字static是为了表示退出一个块后仍然存在的局部变量.随后,static在C中有了第二种含义:用来表示不能被其它文件访问的全局变量和函数.为了避免引入新的关键字,所以仍使用st

Java基础(二)-static关键字分析

static关键字是我们在编程中经常会使用到的,但有些可能只知其然而不知其所以然.下面介绍static关键字的作用再通过例子结合说明. static关键字共有五种作用(先说明static所修饰的不会改变其(private.protected.default和public)作用域的范围): 修饰成员变量(非局部变量) 修饰成员方法 修饰代码块 修饰内部类 静态导包 怎么会有五种呢,大部分初学者对前面两种或者加上第三种还是很熟悉的,第四种情况可能一开始的人就比较少知道了,第五种就更少人知道了.下面一

static关键字(二)作用总结

静态变量和静态方法 static关键字最基本的用法是: 1.被static修饰的变量属于类变量,可以通过类名.变量名直接引用,而不需要new出一个类来 2.被static修饰的方法属于类方法,可以通过类名.方法名直接引用,而不需要new出一个类来 被static修饰的变量.被static修饰的方法统一属于类的静态资源,是类实例之间共享的,换言之,一处变.处处变.JDK把不同的静态资源放在了不同的类中而不把所有静态资源放在一个类里面,很多人可能想当然认为当然要这么做,但是是否想过为什么要这么做呢?

一起talk C栗子吧(第一百二十六回:C语言实例--static关键字)

各位看官们,大家好,上一回中咱们说的内置宏的例子,这一回咱们说的例子是:static关键字.闲话休提,言归正转.让我们一起talk C栗子吧! 看官们,C语言提供了static关键字,它经常出现在变量或者函数的最前面,为什么要加上它呢?它主要有什么作用呢?今天我们一起来了解static关键字. 在介绍之前,我们先做一些铺垫.主要是介绍一下变量或者函数的生命周期和作用域. 变量和函数的生命周期 所谓的生命周期就是指变量或者函数在程序中可以被使用的时间,它是一段时间,可能是一分钟或者一小时等.生命周

static关键字的使用(有个深刻领悟)

没有实例化对象的时候进行可以调用static 属性  static方法 (用类名去调用) 非static定义的方法可以调用static的属性或方法. static定义的方法不能调用非static的方法或属性: 非static方法几乎都有一个特点:方法要由实例化对象调用 或者在web开发中,由url调用 /* 最深刻透彻醍醐灌顶的领悟*/ 以前想为啥啊,那个url就可以执行了非static方法了 Servlet的工作原理就是反射,所有,MVC框架的controller都是这个机制 Servlet的

[java]static关键字的四种用法

在java的关键字中,static和final是两个我们必须掌握的关键字.不同于其他关键字,他们都有多种用法,而且在一定环境下使用,可以提高程序的运行性能,优化程序的结构.下面我们先来了解一下static关键字及其用法. static关键字 1.修饰成员变量 在我们平时的使用当中,static最常用的功能就是修饰类的属性和方法,让他们成为类的成员属性和方法,我们通常将用static修饰的成员称为类成员或者静态成员,这句话挺起来都点奇怪,其实这是相对于对象的属性和方法来说的.请看下面的例子:(未避

(转)Java中的static关键字解析

转载: http://www.cnblogs.com/dolphin0520/p/3799052.html 一.static关键字的用途 在<Java编程思想>P86页有这样一段话: "static方法就是没有this的方法.在static方法内部不能调用非静态方法,反过来是可以的.而且可以在没有创建任何对象的前提下,仅仅通过类本身来调用static方法.这实际上正是static方法的主要用途." 这段话虽然只是说明了static方法的特殊之处,但是可以看出static关键