在Java中,有一种做法是声明每个变量(本地或类),如果确实是参数final.
虽然这使得代码更加冗长,但这有助于轻松阅读/掌握代码,并且还可以防止错误,因为意图已明确标记.
您对此有何看法,您对此有何看法?
我经常遇到如下所示的方法:
public void foo(final String a, final int[] b, final Object1 c){
}
Run Code Online (Sandbox Code Playgroud)
如果在不传递最终参数的情况下调用此方法会发生什么.即稍后更改的Object1(因此未声明为final)可以很好地传递给此方法
在Java中,您可以使用final关键字限定局部变量和方法参数.
public static void foo(final int x) {
final String qwerty = "bar";
}
Run Code Online (Sandbox Code Playgroud)
这样做会导致无法在方法体中重新分配x和qwerty.
这种做法使你的代码向不变性的方向推动,这通常被认为是一个加分.但是,它也会使代码混乱,"最终"出现在各处.您对Java中的局部变量和方法参数的final关键字有何看法?
Eclipse有一个选项可以警告赋值给方法的参数(在方法内),如:
public void doFoo(int a){
if (a<0){
a=0; // this will generate a warning
}
// do stuff
}
Run Code Online (Sandbox Code Playgroud)
通常我尝试激活(并注意)几乎所有可用的编译器警告,但在这种情况下,我不确定它是否值得.
我看到了改变方法中参数的合法情况(例如:允许参数"取消设置"(例如null)并自动替换默认值),但很少会导致问题,除非它可能有点混淆在方法中间重新分配参数.
你使用这样的警告吗?为什么/为什么不呢?
注意:
避免这种警告当然等同于制作方法参数final(只有这是编译器错误:-)).那么这个问题为什么我要在Java中的方法参数上使用关键字"final"?可能是相关的.
我在档案中看到了很多类似的问题,但我找不到像我遇到的问题那样的场景.
以下是我的代码.我遇到了"finalPrice"错误,"grandTotalPrice"可能尚未初始化.代码行是在程序的最后.
应通过上面的控制台输入为变量分配总数.我不确定错误是什么,或者为什么.任何人都可以帮助我,解释一下吗?
码:
import java.util.*;
public class PictureFrames
{
static Scanner console = new Scanner(System.in);
static final double REGULAR_FRAME = .15, FANCY_FRAME = .25;
static final double COLOR = .10, CARDBOARD = .02, GLASS = .07, CROWNS = .35;
public static void main (String[] args)
{
double length, width, area, perimeter;
double priceOfFrame, priceOfColor, priceOfCardboard, priceOfGlass, priceOfCrowns, finalPrice, crownFinalPrice, grandTotalPrice;
int numberOfCrowns;
char typeOfFrame, choiceOfColor, choiceOfCrowns;
System.out.println ("Please enter the length of your picure in inches:");
length = console.nextDouble(); …Run Code Online (Sandbox Code Playgroud)