当我们在方法之外创建一个对象时会发生什么?

时间:2014-10-09 16:04:25

标签: java oop object

我有一个与OOP有关的问题。

如果我们在方法之外创建一个对象,效果是什么。

该对象是否变为全局?

这是一些代码..

class A(){
 String b;
 public void c(){
  //some code in here}
 }

 class C(){

 A a = new A(); //is this ok and if it is ok what is this mean??

 public void p(){
 a.c(); //Is this possible??
}
}

3 个答案:

答案 0 :(得分:6)

您似乎对Java或面向对象编程非常陌生。

在Java中创建对象有两个步骤:声明初始化

声明表示您声明存在某些内容。 例如:String title;表示存在名为title的字符串对象 初始化正在为其分配值。即:title = "Hello World!";。但在初始化对象之前,您需要确保它已声明。您还可以在一个语句中组合声明和初始化:String title = "Hello World!";

对象范围取决于您声明该对象的。 如果你在类这样的类中声明它:

class Car {
  String name; //These are called fields
  static String author = "Farseen"
  public void doSomething() {..../*can access name and author*/}
  public static void doSomething() {..../*can access author only*/}
}

类中的所有内容都可以访问它,除了静态(我们将在一段时间内完成)方法。这些方法称为字段
如果你在方法中对它进行decalare,那么只有该方法才能访问它:

class Car {
  public void doSomething() {
    String name = "BMW"; //These are called local variables
  }
  public void doSomeOtherThing() {
    //Cannot acccess name
  }
}

这些被称为局部变量

如果你在课堂外声明它,抱歉Java不允许你这样做。一切都必须在课堂内。

您可以在方法之外添加声明前缀,即具有访问修饰符的字段:

公开:使任何人都可以访问该字段。合法的是:
Car myCar = new Car();System.out.println(myCar.name);

private :仅允许类中的方法(函数)访问该字段。它是非法
Car myCar = new Car();System.out.println(myCar.name);

protected :使该字段的子类可以访问该字段。用户也无法访问它,例如私有。

现在出现在静态修饰符中:

它表示场或方法(功能)属于汽车的整个物种,而不是单个汽车。
访问静态字段author是合法的:Car.author无需创建单独的汽车,尽管它是合法的:new Car().author
静态事物只知道静态事物,而不是个别事物。

Java中全局变量无概念。虽然,你可以使用这样的东西来实现它:

class Globals {
    public static String GLOBAL_VARIABLE_MESSAGE = "Hello World!";
}

使用Globals.GLOBAL_VARIABLE_MESSAGE

在代码中的某处使用它

希望它有所帮助!

编辑:引用添加到问题的代码

class A{ //Parenthesis are NOT needed
         // or allowed in class definition:
         // 'class A()' is wrong
 String b;
 public void c(){
  //some code in here
 }
}

 class C{ //Same here. No parenthesis needed
  A a = new A(); //Q: Is this ok and if it is ok what is this mean??
                 //A: Yes, completely ok.
                 // This means you added
                 // a field 'a' of type A to the class C

 public void p(){
  a.c(); //Q: Is this possible??
         //A: Of course
 }
}

答案 1 :(得分:0)

创建对象的地方与“全局”#34;无关。这完全是关于引用对该对象的accessibily的范围。给出两个极端的对立面,两者都涉及方法之外的实例化:

public static final File f = new File(new File("/x/a"), "b");

上述行将导致创建File的两个实例:一个将成为全局,另一个将完全无法访问并在现场处理。

答案 2 :(得分:0)

我对您的代码进行了一些修改,并为您的疑问添加了答案

class A{ 
 String b;
 public void c(){
  //some code in here}
 }

 class C{

 A a = new A(); //is this ok and if it is ok what is this mean??--It is Ok.it means that a is instance variable of type A.

 public void p(){
 a.c(); //Is this possible?? -- It is possible. since c() is a method in class A.
}
}