$ javac InitInt.java
InitInt.java:7: variable right might not have been initialized
InitInt(){}
^
1 error
$ cat InitInt.java
import java.util.*;
import java.io.*;
public class InitInt {
private final int right;
// Design Problem?
// I feel the initialization problem is just due to bad style.
InitInt(){}
InitInt{
// Still the error, "may not be initialized"
// How to initialise it?
if(snippetBuilder.length()>(charwisePos+25)){
right=charwisePos+25;
}else{
right=snippetBuilder.length()-1;
}
}
public static void main(String[] args) {
InitInt test = new InitInt();
System.out.println(test.getRight());
}
public int getRight(){return right;}
}
部分解决方案和建议
答案 0 :(得分:3)
你的意思是定义,而不是初始化。您所遇到的问题(在相当激进的编辑之后)是您正在定义一个不初始化最终变量的构造函数,Java不允许 - 所有终结需要在实例完成时初始化构建。在构造函数中初始化它,或者使它成为非最终的
答案 1 :(得分:2)
您无法将new
与int
一起使用。 int
是基元,new
是对象运算符。请考虑使用Integer
,或者只为其分配一个整数文字。
答案 2 :(得分:2)
是的,问题是你的一个构造函数没有初始化最终字段。在Java中,最终的非静态字段必须在声明时,初始化块或 EVERY 构造函数中初始化!示例中的默认构造函数不会这样做。 还要记住,只有在想要使用继承功能时,实现一个空的默认构造函数才有意义。如果您没有提供默认构造函数,但是您将为其他一些Java创建一个隐藏的默认构造函数,因为默认构造函数不是必需的。所以不实现像MyClass(){}之类的东西,没有特殊目的 - 保持代码清洁并保存!
答案 3 :(得分:1)
你的if-else语句没有错,在构造函数中的分支语句中初始化最终变量没有错。我刚刚运行了一个像你这样的简单构造函数来初始化private int right
,它运行正常。确保正确地声明构造函数,如InitInt() { ... }
。
您发布的错误是因为您的代码InitInt(){}
中有一个没有初始化right
的空构造函数。您需要初始化此构造函数和所有构造函数中的最终字段。
答案 4 :(得分:0)
你的构造函数绝对是Okey !!!!问题是你没有初始化“正确”变量。
您必须初始化“正确”变量:
private final int right = 0;
答案 5 :(得分:0)
如果您只尝试访问类中的方法,请使用this
,而不是为它创建空构造函数:
import java.io.*;
import java.util.*;
public class FileDir {
private ArrayList<Integer> lineNumbers;
FileDir(Integer nth){
lineNumbers=new ArrayList<Integer>();
lineNumbers.add(nth);
// You don't need an empty constructor
// to call class methods, use "this"
this.printHello("Davids");
}
public static void main(String[] args) {
FileDir test = new FileDir(7);
ArrayList<Integer> inteTest=test.getLineNumbers();
for (Integer i : inteTest)
System.out.println(i);
}
public void printHello(String name) { System.out.println("Hello "+ name); }
public ArrayList<Integer> getLineNumbers() { return lineNumbers; }
}