1.static修饰(类变量)一个属性字段,那么这个属性字段将成为类本身的资源,public修饰为共有的,可以在类的外部通过test.a来访问此属性;在类内部任何地方可以使用.如果被修饰为private私有,那么只能在类内部使用.

public class Test{

public static int a;//类连接时,默认初始为0,而又无类变量初始化语句或者静态初始化语句,故此类无类初始化方法

private Test(){

a=0;//类实例化时候调用

}

}

如果属性被修饰为static静态类资源,那么这个字段永远只有一个,也就是说不管你new test()多少个类的对象,操作的永远都只是属于类的那一块内存资源.例如:

Test t1=new Test();

t1.a=10;

Test t2=new Test();

System.out.println(t1.a);

System.out.println(t2.a);

System.out.println(Test.a);

代码 结果是3个10

2.final 用于声明属性(常量),方法和类,分别表示属性一旦被分配内存空间就必须初始化(不会有默认初始化,局部变量也是如此,默认初始化只有普通的非final属性,对于static(无final修饰)类变量,类连接时候有默认初始化,对于像private int a;在类实例化时,构造函数默认初始为0,总之,变量必须初始化后方可用,这是java的安全之一,例如,对象引用初始化后不会引用错误的内存空间),并且以后不可变;方法一旦定义必须有实现代码并且子类里不可被覆盖,类一旦定义不能被定义为抽象类或是接口,因为不可被继承。

3. 被final修饰而没有被static修饰的类的属性变量只能在两种情况下初始化:(必须初始化)

对于接口,由于只能包含常量和方法(必须wei

a.在它被声明的时候赋值,例:

public class Test{

public final int a=0;

private Test(){

}

}

b.在构造函数里初始化

例如:

public class Test{

public final int a;

private Test(){

a=0;

}

}

c、在非静态块里

public class Test{

private final int a;

{

a=9;

}

}

解释:当这个属性被修饰为final,而非static的时候,它属于类的实例对象的资源(实例常量),当类被加载进内存的时候这个属性并没有给其分配内存空间,而只是 定义了一个变量a,只有当类被实例化的时候这个属性才被分配内存空间,而实例化的时候同时执行了构造函数,所以属性被初始化了,也就符合了当它被分配内存 空间的时候就需要初始化,以后不再改变的条件.

4、 被static修饰而没有被final修饰的类的属性变量只能在两种情况下初始化:(可以不初始化)

如果初始化,就生成类初始化函数,否则没有

a.在它被声明的时候赋值,例:

public class Test{

public static l int a=8;

private Test(){

}

}

b.在静态或非静态快里初始化

public class Test{

public static l int a;

static{a=50;}

private Test(){

}

}

解释:

当类的属性被同时被修饰为static时候,他属于类的资源(类变量),在类加载后,进行连接时候,分三步: 先验证;然后准备,准备时,先分配内存,接着默认初始化;可以进行解析。最后,进行类初始化,类初始化前,必须保证它的父类已经初始化了,所以最先初始化的是超类,对于接口,不必初始其父接口。类初始化时,它把类变量初始化语句及静态初始化语句放到类初始化方法中,所以,如果无此两种语句,也就没类初始化方法,而构造函数是在当类 被实例化的时候才会执行,所以用构造函数,这时候这个属性没有被初始化.程序就会报错.而static块是类被加载的时候执行,且只执行这一次,所以在 static块中可以被初始化.

5.同时被final和static修饰的类的属性变量只能在两种情况下初始化:(必须初始化)

a.在它被定义的时候,例:

public class Test{

public final static int a=5;

private Test(){

}

}

b.在类的静态块里初始化,例:

public class Test{

public final static int a;

static{

a=0;

}

}

c、特别对于初始化时候调用抛出异常的构造函数,初始时候注意,特别是在实现单例模式时(只能这么初始化)

如:

class A

{

private final static A a;

static

{

try

{

a=new A();

}catch(Exception e)

{

throws new RuntimeException(e);          //必须有,不然不能完成常量的正确初始化

}

}

private A() throws Exception{}

}

解释:

当类的属性被同时被修饰为static和final的时候,他属于类的资源(类常量),那么就是类在被加载进内存的时候(也就是应用程 序启动的时候)就要已经为此属性分配了内存,所以此时属性已经存在,它又被final修饰,所以必须在属性定义了以后就给其初始化值.而构造函数是在当类 被实例化的时候才会执行,所以用构造函数,这时候这个属性没有被初始化.程序就会报错.而static块是类被加载的时候执行,且只执行这一次,所以在 static块中可以被初始化.

java final 初始化_[转]java static final 初始化相关推荐

  1. java final 类_在Java中,final修饰的类有什么特点

    展开全部 关于Java中的32313133353236313431303231363533e4b893e5b19e31333264663736final(2010-09-09 14:19:48)转载▼ ...

  2. 类加载器 java委托机制_解析Java虚拟机中类的初始化及加载器的父委托机制

    类的初始化 在初始化阶段,Java虚拟机执行类的初始化语句,为类的静态变量赋予初始值. 在程序中,静态变量的初始化有两种途径: 1.在静态变量的声明处进行初始化: 2.在静态代码块中进行初始化. 没有 ...

  3. java 数据结构实例_数据结构(Java)——栈的实例

    惟大英雄能本色,是真名士自风流 --易中天(百家讲坛) 1.表达式的转换 1.1 中缀表达式转前缀表达式 中缀表达式转前缀表达式有许多的方式,有加括号去除法.语法树遍历法.堆栈处理法1. 测试程序的实 ...

  4. java ecc 加密_基于java实现的ECC加密算法示例

    本文实例讲述了基于java实现的ECC加密算法.分享给大家供大家参考,具体如下: ECC ECC-Elliptic Curves Cryptography,椭圆曲线密码编码学,是目前已知的公钥体制中, ...

  5. java画笑脸_用java编写一个颜色为红色,粗线型的笑脸和哭脸,需要继承JFrame类,用java中的绘制图形做...

    展开全部 /* * Copyright (c) cherry  Co. Ltd. * All right reserved. */ package com.cherry.swing; import j ...

  6. 怎样用java编写日志_用JAVA写一个日志类程序以供大家学习

    中华网络安全联盟    作者:jacoo    来源:本站原创    时间:2006-4-18 说明: 尽管JAVA类库和其他工具提供了不少的纪录程序运行状态的日志类,我发觉也 不是万能的,有时需要根 ...

  7. java 实现违章_基于JAVA的车辆违章查询数据调用代码实例

    基于JAVA的车辆违章查询数据调用代码实例 代码描述:基于JA V A的车辆违章查询数据调用代码实例 相关平台:聚合数据 import java.io.BufferedReader; import j ...

  8. 用java写游戏_用java写的扫雷游戏

    扫雷不能不说一款非常经典的游戏,无聊时候可以打发时间,虽然玩了很久,但还不知道它是怎么写的,所以自己就尝试动手做了个. 众所周知,java的swing采用mvc模式,即模型-视图-控制器,所以如果真的 ...

  9. java策略文件_[讨论]java类文件保护策略

    2011-4-8 12:48 是這樣碼 package com.atlassian.extras.decoder.v2; import com.atlassian.extras.common.Lice ...

  10. java正则表达式面试_【Java面试宝典】正则表达式

    ● 请你谈谈Java中是如何支持正则表达式操作的? 考察点:正则表达式 参考回答: Java中的String类提供了支持正则表达式操作的方法,包括:matches().replaceAll().rep ...

最新文章

  1. Spring Security(一):整合JWT
  2. C/Cpp / STL / vector 释放内存的方案
  3. JAVA反射修改常量,以及其局限
  4. CentOS7 Ambari2.7.5编译
  5. java oracle database user dsn_跨会话序列化数据库连接
  6. 智能卡门禁管理系统_出入口门禁控制系统与消防火灾报警系统怎么联动?
  7. 四级口语计算机对话,四级英语口语对话常用的句子
  8. python 基础课程第二天
  9. tomcat端口修改以及jvm启动参数设置
  10. ubuntu /dev/sda1 contains a file system error …… (initramfs)的问题
  11. RemObjects
  12. linux管理员基础知识
  13. 计算机版权转让公司,著作权转让
  14. 破解WEP无线网络WLAN全攻略
  15. STM32L476入坑-1
  16. 屏蔽ctrl/shift + R/F5
  17. 五险一金,终于懂了!
  18. 当Excel遇到在线表格,看如何轻松解决办公难题 ?
  19. Java使用itextpdf根据关键词插入图片
  20. java 调用cmd_java打开本地应用程序(调用cmd)---Runtime用法详解

热门文章

  1. 【ios】开发者笔记之迈出第一步
  2. nginx apache 服务器配置
  3. Node.js:它是什么,何时以及如何使用它,以及为什么要使用它
  4. 软件设计师 一年考几次_一年写106篇文章如何帮助我成长为设计师
  5. 胶囊网络架构_了解胶囊网络-AI的诱人新架构
  6. Python编程进阶,Python如何实现多进程?
  7. shell编程之进阶篇五函数
  8. c#常用类库----计算机信息类
  9. ExtJs2.0学习系列(12)--Ext.TreePanel之第一式
  10. ML《集成学习(一)Bagging 和 Random Forest》