程序中的类实例化位置

时间:2015-02-06 01:51:58

标签: java class instantiation

我正在尝试在一个培训计划中学习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?  
    }
}

出于某种原因,“类实例化”的概念正在逃避我:( 在这么简单的事情上,任何帮助都会受到赞赏

4 个答案:

答案 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)

对于不可变的类,必须遵循以下几点:

  1. 将该类声明为final。
  2. 将成员声明为private和final(私有,以便您无法访问它) 来自课外)

  3. 将默认构造函数的访问修饰符设为私有(通过操作类的实例化)

  4. 您将只有getter方法没有Setter方法或(没有修改状态的方法)。你甚至可以让它的线程安全。重写克隆方法,以便不进行该对象的克隆等。
  5. 现在生成的类将是Immutable。

    例如:

    final class ImmutableInt {
        private final int value;
    
        public ImmutableInt(int i) {
         value = i;
        }
    
        public int getValue() {
         return value;
        }
    }