根据我的参考,基本类型具有默认值,对象为空.我测试了一段代码.
public class Main {
public static void main(String[] args) {
int a;
System.out.println(a);
}
}
Run Code Online (Sandbox Code Playgroud)
该行将System.out.println(a);是指向变量的错误a,variable a might not have been initialized而在给定的引用中,该变量integer将具有0默认值.但是,使用下面给出的代码,它实际上会打印出来0.
public class Main {
static int a;
public static void main(String[] args) {
System.out.println(a);
}
}
Run Code Online (Sandbox Code Playgroud)
第一个代码可能出现什么问题?类实例变量的行为是否与局部变量不同?
java initialization global-variables local-variables default-value
这是我作为家庭作业所做的一个小程序的一部分:
public Exam maxGrade() {
Node p = firstNode;
int max = 0;
String name;
while (p!=null) {
if (p.info.getGrade()>max) {
max = p.info.getGrade();
name = p.info.getName();
}
p = p.next;
}
if (name==null)
return null;
else
return searchByName(name);
}
Run Code Online (Sandbox Code Playgroud)
因此,当我继续编译时,编译器输出以下消息:
Student.java:127:错误:如果(name == null),可能尚未初始化变量名称
用以下代码替换第四行可以很容易地解决这个问题:
String name = null;
Run Code Online (Sandbox Code Playgroud)
现在,我可以看到一些逻辑.但我真的很想掌握这个问题背后的运作方式.我的意思是,如果变量在你的代码中看到你正在对它做一些事情,那么编译器会检查变量是否被初始化似乎是合理的,但我认为我没有做任何需要初始化变量的事情.
据消息人士透露像这样的时候,我只是申报我的字符串(或任何其它对象)变量"名",它已经指向NULL.那么为什么仅仅检查该值是否为空它被认为是异常?除了赋值之外,编译器是否会考虑我对未初始化变量所做的任何错误?
我有以下场景。
我想在 lambda 表达式中使用变量。但是这个变量将根据条件具有一次性值(最终)。
final String constraintsAmount;
if(constraint.isPresent()) {
constraintsAmount = constraint.getValue();
}
Run Code Online (Sandbox Code Playgroud)
之后,我开始使用 forEach + lambda 表达式迭代列表。现在我必须constraintsAmount在这次迭代中使用这个字段。
但它说“constraintsAmount可能尚未初始化”。
我该如何解决这个问题。
笔记 :
我尝试用Java编译这段代码:
class D
{
public static void main(String arg[])
{
f1();
}
static void f1()
{
int a;
int b=5;
for(;b<=10;b++)
a=b;
System.out.println(a);
}
}
Run Code Online (Sandbox Code Playgroud)
但是它会产生一个错误,表示:变量'a'可能尚未初始化.为什么会发生这种情况,尽管a在for循环中设置了?
收到错误:
Pay.java:81:错误:变量
hourlyWage可能尚未初始化JOptionPane.showMessageDialog(null, hourlyWage);
对于以下代码.hourlyWage声明了double ,这些语句在主要参数内.看不到我错过的东西,对吗?
if(skillInt == 1){
hourlyWage = 17.00;
} else if(skillInt == 2){
hourlyWage = 20.00;
} else if(skillInt == 3){
hourlyWage = 22.00;
}
JOptionPane.showMessageDialog(null, hourlyWage);
Run Code Online (Sandbox Code Playgroud) 对于我的Comp Sci课程,我必须创建一个程序来查找给定月份(1-12)中的天数,你知道为什么我在尝试时遇到错误"变量天数可能没有被初始化"从交换机返回int"days"?这是代码:
public static int getNumberofDays(int month,int year)
{
// Imports the required Scanner
Scanner kbd = new Scanner(System.in);
final String month;
final int days;
switch (month) {
case 1: days = 31;
break;
case 2: if ((year % 4 == 0) && year % 100 != 0)
{
days = 29;
}
else if ((year % 4 == 0) && (year % 100 == 0) && (year % 400 == 0))
{
days = 29;
}
else
{
days …Run Code Online (Sandbox Code Playgroud) 我有这个方法.
错误说
primeList可能尚未初始化.
我无法理解这是怎么回事.我觉得变量不会被for循环初始化.
我无法弄清楚如何初始化String
public void primesToANumber(long num) //finds all primes
{
String primeList ;
long pcount;
long limit = num;
JOptionPane.showMessageDialog(null,"Prime numbers between 1 and " + limit);
for(long i = 1; i < 100; i++)
{
boolean isPrime = true;
for(long j = 2; j < i ; j++)
{
if(i % j == 0)
{
isPrime = false;
break;
}
}
// print the number
if(isPrime)
{
primeList += i + ", ";
pcount++;
if(pcount % …Run Code Online (Sandbox Code Playgroud) protected int getGewichtung(String company)
{
int index;
for (HashMap<String,String> i : top3Compland)
{
String test = String.join(_name, i.keySet());
System.out.println(test);
if (test == company)
{
index = top3Compland.indexOf(i);
}
else
{
index = -5;
}
}
return index;
}
Run Code Online (Sandbox Code Playgroud)
我已经用 print 语句检查了它是否完全进入了 for 循环。但是所有的键都被打印出来,所以它确实输入了它,并且也确实发生了到字符串的转换,因为我首先只将有效的字符串放入函数中,所以它也必须肯定输入 if 语句,但即使它不输入然后它会输入 else 语句并用一个数字初始化它,这样它就不会抱怨变量“index”可能没有被初始化。我在监视什么??感谢您的帮助!
更新版本:我改进了一些缺陷,但出现了同样的错误。但我无法理解索引未初始化的情况......
protected int getGewichtung(String company)
{
int index;
if (top3Compland.size() > 0 && top3Compland != null)
{
for (HashMap<String,String> i : top3Compland)
{
String test = String.join(_name, i.keySet());
System.out.println(test);
if (test.equals(company))
{
index …Run Code Online (Sandbox Code Playgroud)