Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >将最终字段与其声明位置分开初始化,但这不适用于Java中的最终静态字段。为什么?

将最终字段与其声明位置分开初始化,但这不适用于Java中的最终静态字段。为什么?
EN

Stack Overflow用户
提问于 2011-11-15 22:22:39
回答 3查看 292关注 0票数 3

最后一个字段必须按照约定在Java中初始化一次。不允许进行其他初始化。下面的程序演示如何在类中使用最终最终静态字段。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package main;

import java.util.ArrayList;
import java.util.List;

final public class Main
{
    private final static int a=10;
    private final List<String> list;

    public Main()
    {
        list=new ArrayList<String>();
        list.add("A");
        list.add("B");
        list.add("C");
        list.add("D");
    }

    private void show()
    {
        for(String l:list)
        {
            System.out.println(l);
        }
    }

    public static void main(String[] args)
    {
        new Main().show();
    }
}

在上面的代码中,类型为字段list是在构造函数本身内初始化的。但是,同样的情况不适用于最终的静态字段a。在构造函数体中初始化a的尝试会导致编译时错误,指示“无法将值赋给最终变量a”。为什么同样的事情不适用于最终的静态字段列表,它允许在构造函数内初始化?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-11-15 22:30:37

同样的情况也适用于最终的静态字段,但在与构造函数最接近的静态字段中,即静态初始化程序:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
private final static int x;

static {
    x = 10;
}

(可以说,这更接近实例初始化程序,而不是构造函数,但它是静态的最接近的。它不像你可以指定参数或任何东西。)

构造函数是在类的每个实例化上运行的--如果能够更改最终的静态字段,它将不是非常最终的,对吗?请记住,只有一个与类型关联的静态变量的“副本”,而不是像与实例变量一样与类型的每个实例关联的一个“副本”。

票数 6
EN

Stack Overflow用户

发布于 2011-11-15 22:37:58

如果您单独声明了final,那么它是每个实例的常量,并且可以像以前一样在构造函数中初始化它。但是,如果声明最终静态,所有实例都将共享相同的变量。因此,您不能在构造函数中初始化,因为每当创建实例时,您都试图更改值。

票数 2
EN

Stack Overflow用户

发布于 2011-11-15 22:30:58

您已经用它的定义初始化了a,因为您将它设置为10。之后,您不能在构造函数中修改它。

运行两次构造函数也会给列表带来问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8147577

复制
相关文章
安装Nuget包
项目中添加包:dotnet add package Microsoft.AspNetCore.Authentication.JwtBearer
CN_Simo
2022/05/10
1K0
安装Nuget包
nuget服务器搭建,以及如何发布一个Nuget包
一、本地dll如何打包,以及版本的更新 本小节主要介绍两种方式将本地dll打包为Nuget包, 1.1 利用nuget.exe进行打包(应用于.net framework) 1. 下载nuget.ex
sam dragon
2018/01/17
4.5K0
nuget服务器搭建,以及如何发布一个Nuget包
NuGet 修改包路径
通过 NuGet 安装包时,NuGet 先将包下载至一个统一的目录,默认路径是:C:\Users\用户名\.nuget\packages
丹枫无迹
2019/11/20
2.2K0
dotnet 给 NuGet 包加上 Aliases 别名解决类型冲突
有时某个相同命名空间相同名字的类型被两个不同的 NuGet 包定义了,尽管这是非常少见的事情,咱需要使用到其中的一个 NuGet 包的类型,但默认情况下将会因为类型冲突而构建不通过。本文将告诉大家如何给 NuGet 包加上 Aliases 别名解决类型冲突
林德熙
2023/07/01
4270
打包dll发布到nuget服务器
几个月前上传过一次nuget包,结果好久不用,今天想更新下,完全忘记了怎么用了,又是一顿查,所以决定记录下来,当然这可能不是一个傻瓜式的教程,但聪明的你们应该能够看明白的,因为整体操作还是很简单的 好了,让我们开始吧 创建类库 首先创建一个类库,就是你想要发布到nuget的类库,在AssemblyInfo.cs编辑程序集版本信息,重新生成,好了,这一步就完成了,哈哈哈 下载并注册nuget nuget地址:https://www.nuget.org/ 你需要在这个网站注册一个账号,期间会有邮箱验证,验证成
蓝夏
2018/06/21
2.1K0
Unity3D 入门:为 Unity 的 C# 项目添加 dll 引用或安装 NuGet 包
因为 Visual Studio 有强大的包管理器插件,所以即便是不熟悉 NuGet 命令的小伙伴也能轻松安装和管理 NuGet 包。不过,对 Unity C# 项目来说,你并不能直接引用 dll,也不能直接使用自带的 NuGet 包管理器完成 NuGet 包安装。
walterlv
2023/10/22
3.2K0
Unity3D 入门:为 Unity 的 C# 项目添加 dll 引用或安装 NuGet 包
修改Nuget包默认存放路径
默认情况下所有的Nuget包都会下载到C盘,目前我这边有几十个G的大小,这导致我C盘的容量越来越小…
HueiFeng
2020/06/05
2.8K0
NuGet 如何设置图标
在找 NuGet 的时候可以看到有趣的库都有有趣的图标,那么如何设置一个 NuGet 的图标?
林德熙
2020/09/10
1.6K0
NuGet 如何设置图标
阻止某个 NuGet 包意外升级
2018-06-29 09:59
walterlv
2018/09/18
1.3K0
阻止某个 NuGet 包意外升级
nuget发布的dll没有注释是什么原因
XML文档文件原来是这个作用。 (图片来自:https://docs.microsoft.com/zh-cn/visualstudio/ide/reference/generate-xml-docum
问问计算机
2021/05/08
8850
nuget发布的dll没有注释是什么原因
nuget的原理_NuGet 跨平台插件
已添加 NuGet 4.8 + 跨平台插件支持。In NuGet 4.8+ support for cross platform plugins has been added.
全栈程序员站长
2022/11/16
7960
帮助官方 NuGet 解掉 Bug,制作绝对不会传递依赖的 NuGet 包
如果你希望做一个 NuGet 工具包,那么这个包一定不能作为依赖传递给下一个包。典型的例子,做一个生成版本号的工具 NuGet 包,或者做一个代码分析器。
walterlv
2020/02/10
9960
如何在nuget上传自己的包+搭建自己公司的NuGet服务器(新方法)
运维相关:http://www.cnblogs.com/dunitian/p/4822808.html#iis 先注册一个nuget账号 下载并安装一下NuGetPackageExplorer:htt
逸鹏
2018/04/11
1.6K0
如何在nuget上传自己的包+搭建自己公司的NuGet服务器(新方法)
Roslyn 打包 NuGet 包添加改动日志
默认的 NuGet 包支持在 releaseNotes 中添加更改日志,用户可以通过更改日志了解各个版本更新的内容。在 SDK Style 格式的 csproj 文件,可以读取本地的文本文件的内容作为 NuGet 包的改动日志
林德熙
2020/07/29
9390
.net framework 4.0的NuGet包制作
为啥做这个呢,因为要将公司内部的老的.NET程序所引用的DLL进行统一管理。这里服务端使用了一个叫做NuGetServer(官网:NuGet Server)的开源工具,部署在内部的Web服务器上。
崔文远TroyCui
2021/09/18
1.7K0
.net framework 4.0的NuGet包制作
发布 Rafy .NET Standard 版本 Nuget 包
去年年中,Rafy 框架的源码就已经支持了 Net Standard 2.0 版本。其开源代码也已经上传到 Github 中:https://github.com/zgynhqf/rafy/tree/NetStandard2.0 。但是这都只是在源码层面支持 NS2.0,并没有发布其正式的 Nuget 包。要使用这个版本的开发者,不得不自己下载源码进行编译。
用户1172223
2018/09/27
6570
发布 Rafy .NET Standard 版本 Nuget 包
发布你的程序包到Nuget
1.新建一个.NET Standard 的类库项目 2.选择项目熟悉,在 package 栏目下填写我们的nuget包信息 3.选择我们的项目,点击“Pack" 打包 主要注意的是生成配置需改为Rel
晓晨
2018/06/22
6660
使用dotnet Cli向nuget发布包
长话短说, 今天分享如何在nuget.org创建并发布.NET Standard package。
有态度的马甲
2020/06/10
1.2K0
帮助官方 NuGet 解掉 Bug,制作绝对不会传递依赖的 NuGet 包
发布于 2018-08-05 13:22 更新于 2018-08-18 03:04
walterlv
2018/09/18
8400
帮助官方 NuGet 解掉 Bug,制作绝对不会传递依赖的 NuGet 包
如何移动 nuget 缓存文件夹 修改链接配置NuGet CacheNuGet Configuration
本文告诉大家如何移动 nuget 缓存文件夹。 因为 nuget 文件夹一般比较大,现在我的 nuget 文件夹有 10 G,默认的 nuget 文件夹是在C盘,所以需要移动他。
林德熙
2018/09/18
2.2K0

相似问题

在Apple Watch上实现登录机制的最佳实践

13

在JSON对象上编写外观的最佳实践

17

编写自定义代码部分的最佳实践?

21

ETL处理中记录机制的最佳实践

12

编写数组的最佳实践

41
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文