static final

摘要:
有关详细信息,请参阅静态和非静态final。有关变量和方法的详细信息,请参见final。注意:1.静态final修改的变量在声明时必须初始化。

static详见静态与非静态

final详见final详解


变量和方法

注意:

1、static final修饰的变量必须在声明时初始化。

2、static final修饰的变量赋值后不能修改。

3、static final修饰的方法不能被子类重写。

4、抽象类中的抽象方法不能被static、final或staticfinal修饰。

5、接口中的所有方法都不能被static、final或staticfinal修饰,因为接口中的方法都是抽象的。

6、接口中的变量默认为public static final。

在普通类中:

public classClassA {
    public static final String S1 = "this is S1 in ClassA";

    public static finalString method1() {
        return "this is method1 in ClassA";
    }
}

测试1:

public classMainClass {
    public static voidmain(String[] args) {
        ClassA a = newClassA();
        System.out.println(ClassA.S1);//this is S1 in ClassA
        System.out.println(ClassA.method1());//this is method1 in ClassA
        System.out.println(a.S1);//this is S1 in ClassA
        System.out.println(a.method1());//this is method1 in ClassA
}
}

MainClass反编译:

public classMainClass
{
  public static voidmain(String[] args)
  {
    ClassA a = newClassA();
    System.out.println("this is S1 in ClassA");
    System.out.println(ClassA.method1());
    System.out.println("this is S1 in ClassA");
    System.out.println(ClassA.method1());
  }
}

在抽象类中:

public abstract classClassA {
    public static final String S1 = "this is S1 in ClassA";

    public static finalString method1() {
        return "this is method1 in ClassA";
    }
}

测试2:

public classMainClass {
    public static voidmain(String[] args) {
        System.out.println(ClassA.S1);//this is S1 in ClassA
        System.out.println(ClassA.method1());//this is method1 in ClassA
}
}

MainClass反编译:

public classMainClass
{
  public static voidmain(String[] args)
  {
    System.out.println("this is S1 in ClassA");
    System.out.println(ClassA.method1());
  }
}

在接口中:

interfaceInterfaceA {
    static final String S1 = "this is S1 in InterfaceA";
}

测试3:

public classMainClass {
    public static voidmain(String[] args) {
        System.out.println(InterfaceA.S1);//this is S1 in InterfaceA
}
}

MainClass反编译:

public classMainClass
{
  public static voidmain(String[] args)
  {
    System.out.println("this is S1 in InterfaceA");
  }
}

从以上测试中,可以得出:

1、static final修饰的变量在编译时直接被值替换。

2、通过对象访问普通类中的static final方法时,在编译时被优化为通过类名来访问。

3、static final修饰的变量为全局变量,可通过类名或接口名直接访问,并且在赋值后不能被修改。

免责声明:文章转载自《static final》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Java泛型详解AEC、AGC、ANS在音频中的作用下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

网页分页数据的三种抓取方式

目前,只有两种方法可以捕获其他网站的数据:我一开始尝试用第三方工具捕获所需的数据。现在我将介绍以三种形式捕获分页数据的方法。此方法通过循环生成数据分页的URL地址,例如:}上面的代码可以返回相应页面的html内容字符串,其分页控件通过post模式将分页信息提交给后台代码。当您将鼠标移到每个页码上时,状态栏将显示javascript:...

sikuli简介

Sikuli脚本自动化,你在屏幕上看到的任何东西。Sikuli是一个开放源码的最初的用户界面设计组织在麻省理工学院的研究项目。现在是保持并进一步协调与开源社区开发的Sikuli实验室在美国科罗拉多州博尔德大学。Sikuli的MIT许可证下发布的。当然,你也可以使用sikuli的javaAPI使其在java环境下运行。小例子大体上了解sikuli的界面,下面来...

ESXi挂载NFS共享存储

使用万兆交换机,ESXi使用NFS协议连接存储。本文介绍的是通过NFS协议挂载共享存储上的VS01卷,共享存储上已经赋予ESXi主机访问该卷的权限。...

WinSCP命令行操作

WinSCP命令行操作WinSCP是一个在Windows环境下使用SSH的开源图形SFTP客户端。它还支持SCP协议。它的主要功能是在本地和远程计算机之间安全地复制文件。在cmd下直接输入winscp,进入winscp操作界面。查看帮助。直接在下面输入帮助以查看所有可用命令。当第一个参数为“both”时,一个参数与另一个参数同步。未指定目录时,同步当前工作目...

java android 读写西门子PLC数据,包含S7协议和Fetch/Write协议,s7支持200smart,300PLC,1200PLC,1500PLC

主要用于西门子PLC的M、Q、I、DB块的数据读写。该组件支持快速建立高性能Modbus TCP终端。对于日志记录,暂时只保留接口。具体来说,您可以为该组件支持的西门子通信实现两种协议。一种是S7协议,它几乎不需要PLC侧的参数配置。另一个是Fetch/Write协议,它有点麻烦。如果S7不方便阅读,您可以选择“获取/写入”。S7更方便。...

微信公众号平台开发(三):几大微信接口的调用

但是,有一些高级接口。您的微信公众号必须具有一定的权限,例如通过微信认证,才能调用自定义菜单、微信支付和其他高级功能。不过,微信公众号的测试号系统可以应用这些高级接口。菜单类型很多,但xml类型不同。详情可在微信公众号平台查看相应文件。...