Java 中的关键字 - static和final

static关键字的使用

静态变量

  1. Java中提供了static关键字,用它来修饰类的属性后,则此属性就是公共属性了。
  1. 在程序中如果使用static声明变量的话,则此变量称为静态变量,也称为类变量,其作用域与该类的生存范围相同。

访问类变量的方法:

  1. 只要类存在,程序就可以通过该类来访问类变量:

     类名.类变量
    
  2. 也可以通过该类的实例来访问类变量:

     实例.类变量
    

由于这个实例并不拥有这个类变量,因此访问它的时候并不是访问这个实例的变量,而是访问它对应的类的类变量。因此,通过实例修改类变量的值,与通过该类修改类变量的值结果相同。如果该类有多个实例,其中一个实例修改了类变量,那么其它实例访问这个类变量时获得的值将是修改过后的值。

静态方法

  1. static既可以声明变量,也可以用来声明方法,用它声明的方法称为静态方法,也称为类方法。
  1. 注意:如果在类中声明了static类型的属性,则此属性既可以在非static类型的方法中使用,也可以在static类型的方法中使用。但用static类型的方法调用非static类型的属性时,则会出现错误(即静态成员不能访问非静态成员)。

静态代码块

一个类可以使用不包含在任何方法体中的静态代码块,当类被载入时,静态代码块被执行,且只执行一次,静态代码块经常用来进行类属性的初始化。

具体例子:

运行结果:

结果分析:

  1. 放在Test类中的静态代码块会先被调用,因为Test类为启动类,程序会首先执行启动类;

  2. 接着执行main方法,因为这是程序的入口;

  3. 而后程序创建了两个Person类的对象,但Person类中的静态代码块只会执行一次,并且静态代码块是首先被执行的;

  4. 最后Person类的无参构造方法被调用。

初始化块

  1. 初始化块是Java的类成员之一(其它的有成员变量、成员方法、构造器),用于对Java对象进行初始化操作,使用初始化块初始化所有对象共有的属性和方法;
  1. 初始化块没有名字、没有标识,无法通过类或对象来调用;
  1. 初始化块是构造器的补充,其总是在构造器执行之前执行。一个类里可以有多个初始化块,相同类型的初始化块之间执行有顺序:先定义的先执行,后定义的后执行;
  1. 初始化块不能接收任何参数;
  1. 初始化块分为非静态初始化块和静态初始化块。静态初始化块是对类而言,非静态初始化块是对对象而言,静态初始化块的执行顺序在非静态初始化块之前。

非静态初始化块

  1. 在每个对象生成时都会被执行一次,可以初始化类的实例变量;

  2. 与构造器类似的,创建Java对象时,总是先执行该对象所对应类的父类的非静态初始化块和构造器,执行顺序如下:先执行java.lang.Object类的非静态初始化块,执行java.lang.Object类的构造器 ——> 再执行其父类的非静态初始化块,执行其父类的构造器 ——> 最后执行该类的非静态初始化块,执行该类的构造器 ——> 返回该类的对象。

非静态初始化块语法格式:

具体例子:

运行结果:

静态初始化块

  1. 静态代码块在类加载时被执行;
  1. 与非静态初始化块类似的,执行某个类的静态代码块时,总是先从其父类开始,执行顺序如下:
    先执行java.lang.Object类的静态初始化块(如果有) ——> 再执行其父类的静态初始化块(如果有) ——> 最后执行该类的静态初始化块;
  1. 若在静态初始化块中想初始化变量,那只能初始化类变量,即static修饰的成员变量(即遵循静态成员不能访问非静态成员的规则);
  1. 静态初始化只在类加载时执行一次,此后不再执行。

静态初始化块语法格式:

具体例子:

运行结果:

结果分析:

  1. 第一次创建一个Son对象时,因为系统还不存在Son类,因此需要先加载并初始化Son类,初始化Son类时会先执行其顶层父类的静态初始化块(如果有),再执行其直接父类的静态初始化块(如果有),最后才执行Son本身的静态初始化块;之后在执行非静态初始化块和构造器;

  2. 一旦Son类初始化成功后,Son类在该虚拟机一直存在,因此当第二次创建Son实例时,无须再次对Son类初始化。

final关键字的使用

  1. final可以用来声明类、属性、方法;
  2. final修饰的类不能被继承;
  3. fianal修饰的方法不能被子类重写;
  4. final修饰的变量(成员变量、局部变量)即为常量,只能赋值一次,并且只能由程序员显式地指定初始值。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 201,784评论 5 474
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,745评论 2 378
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 148,702评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,229评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,245评论 5 363
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,376评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,798评论 3 393
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,471评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,655评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,485评论 2 318
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,535评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,235评论 3 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,793评论 3 304
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,863评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,096评论 1 258
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,654评论 2 348
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,233评论 2 341

推荐阅读更多精彩内容