我正在尝试在一个培训计划中学习java,但我发现自己已经装上了一些简单的东西(如行话)。
我的一个任务请求如下:创建一个包含两个String变量的不可变类。然后我们将实例化这个类。
public class Assignment {
public final class Immutable {
String one;
String two;
}
public static void main(String[] args) {
// Do I instantiate my class here?
}
}
出于某种原因,“类实例化”的概念正在逃避我:( 在这么简单的事情上,任何帮助都会受到赞赏
答案 0 :(得分:2)
如果一个类是模板,那么使用该模板喷涂在墙上的图像就是它的实例。只要您有足够的内存(即墙上的空间),您就可以创建一个类的多个实例。
要创建实例,您需要使用关键字new
来调用其构造函数,该构造函数以类本身命名:
Immutable myFirstImmutable = new Immutable()
在Java Tutorial中很好地描述了它。
但是,您的类不是不可变的,因为可以随时更改这两个字段:
myFirstImmutable.one = "some value"
myFirstImmutable.one = "oh no, another value"
除了将类标记为final(以避免它被子类化)之外,还需要将字段(一个和两个)标记为final。
答案 1 :(得分:1)
实例化是一种说明你正在制作班级实例的方式....没有帮助?请记住,这是面向对象的编程。一个类只是一个对象的概念。所以你必须创建一个对象的实例......换句话说,分配"想法"它的变量。坚持我......
因此,为了使一个类不可变,你可以使它成为最终的。就是这样。不可变=最终。如果你考虑一下,这有点意义。
public final class Assignment{
public Assignment(){
}
}
这是类及其构造函数。
使用(实例化)它......
Assignment asmt = new Assignment();
asmt是您的课程作业的一个实例。
现在要添加变量......
public final class Assignment{
private final String _one;
public Assignment(){
}
public void setOne(String one){
_one = one;
}
public String getOne(){
return _one;
}
}
最后使用Assignment类:
Assignment asmt = new Assignment();
asmt.setOne("this var one");
然后获得价值......
System.out.println(asmt.getOne());
答案 2 :(得分:0)
实例化类时,必须实际声明类类型的New对象。这是通过使用new
关键字完成的。请使用您的代码查看以下示例!此外,在此示例中不需要外部类。
public final class Immutable {
private String one; //For Immutable classes the variables must be declared as private so their values are not modified outside the class.
private String two;
public static void main(String[] args) {
// Do I instantiate my class here?
Immutable immutableObject = new Immutable (); // We just created an instance of the class
}
}
请记住,虽然Java确实提供了内置的默认构造函数,但最好是创建自己的构造函数。例如
public final class Immutable {
private String one;
private String two; //Must be private, it is also good to protect your variables
// This is a default constructor
Immutable () {
one = "default value";
two = "default value";
}
// Parameter-accepting constructor
Immutable (String one, String two) {
this.one = one;
this.two = two;
}
public static void main(String[] args) {
// Do I instantiate my class here?
Immutable immutableObject = new Immutable (); // Default
Immutable immutableObject2 = new Immutable ("A string", "Another string"); // Now we defined the Strings in the instance!
}
} // End class
通过创建我们自己的构造函数,我们可以确定我们的类是按照我们预期的方式完全定义的。
答案 3 :(得分:0)
对于不可变的类,必须遵循以下几点:
将成员声明为private和final(私有,以便您无法访问它) 来自课外)
将默认构造函数的访问修饰符设为私有(通过操作类的实例化)
现在生成的类将是Immutable。
例如:
final class ImmutableInt {
private final int value;
public ImmutableInt(int i) {
value = i;
}
public int getValue() {
return value;
}
}