gpt4 book ai didi

java - 为什么静态 block 中不允许静态字段声明?

转载 作者:行者123 更新时间:2023-12-03 21:46:04 25 4
gpt4 key购买 nike

请考虑以下代码,该代码将用于计算 String 的像素宽度:

 public class ComponentUtils {
static {
Font font = new Font("Verdana", Font.BOLD, 10);
FontMetrics metrics = new FontMetrics(font) {
};
}

public static String calculateWidthInPixels(String value) {
//Using the font metrics class calculate the width in pixels
}
}

如果我将fontmetrics 声明为static 类型,编译器将不允许我这样做。为什么这样 ?如何初始化 fontmetrics 一次并在 calculateWidthInPixels 方法中计算宽度?

P.S:下面的主类总是按预期工作,并给出以像素为单位的宽度。

public class Main  {

public static void main(String[] args) {
Font font = new Font("Verdana", Font.BOLD, 10);
FontMetrics metrics = new FontMetrics(font){

};
Rectangle2D bounds = metrics.getStringBounds("some String", null);
int widthInPixels = (int) bounds.getWidth();
System.out.println("widthInPixels = " + widthInPixels);
}

最佳答案

编译器实际上允许您这样做。但是,它不会让您从您的方法访问您在此处声明的变量,因为它们的可见性仅限于该静态 block 。

您应该像这样将它们声明为静态变量:

private static final Font FONT = new Font(...);

关于java - 为什么静态 block 中不允许静态字段声明?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13378710/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com