此Java代码中的对象在哪里

时间:2015-05-14 18:54:57

标签: java oop

我刚开始使用Java学习OOP。我写的第一个代码是:

class day1 {
  public static void main(String args[]) {
    System.out.println("Java drives the web");
  }
}

当我编译这个源文件时,我得到一个.class文件。当我在命令行解释它时,它给了我想要的结果。

我的问题是:我没有创建任何对象。我刚刚写了一个名为day1的类。我怎么能解释它? OOP是关于从类中提取的对象。但是我没有从课堂上抽出任何东西。

我在OOP中感到困惑。

7 个答案:

答案 0 :(得分:2)

day1是您创建主对象的模式 - 如果您要将其实例化为对象。哪种静态方法不起作用,所以在你的情况下,程序仍然是面向对象的#34;因为它基于对象模式。如果在类中创建了静态方法和变量,则可以访问其他静态方法和变量,但是如果要创建非静态方法或变量,则无法在没有实例化类的情况下访问它们。

查看this legacy question about why main is static.

对于任何错误信息感到抱歉!

(感谢jesper纠正我!)

答案 1 :(得分:1)

这是关于静态方法的。 可以在没有给定类的实例的情况下访问静态方法和字段,并且给定类的每个对象共享对静态字段

的相同引用

答案 2 :(得分:1)

在你的代码中你没有创建一个Object day1类,你加载了day1类,执行一个属于其中类的static方法。

在您的示例中,您没有实例字段,但如果您有实例字段,则无法访问它。

同样在您的示例中,您有一个String对象"Java drives the web",您可以在其中调用实例方法,System.out返回PrintStream以打印您的消息。< / p>

为了创建day1的对象,您需要调用

day1 myInstance = new day1();

这将是开始使用对象的方法。

希望这有帮助,

何塞路易斯

答案 3 :(得分:1)

Java不是纯粹的OO语言,也不需要创建对象。你可以在不创建任何对象的情况下编写任意复杂的程序 - 但这将非常困难。

答案 4 :(得分:1)

调用print方法时会创建一个字符串对象。

你所拥有的是一个带有静态方法的类,main。静态方法在类上调用,而不是在对象上调用。因此程序将从类上调用的main方法打印字符串值。

class Day1 {
private String name;
public String getName() {
 return name;
}
..
}

要调用方法getName,必须通过调用new关键字

来创建day1的实例
Day1 o_day1 = new Day1();

然后调用

String v_name = o_day1.getName();

发生的情况是默认的no-args构造函数在未指定对象时构造对象,并返回对该对象的引用。您将用于调用非静态方法的引用(没有静态限定符的方法)。

答案 5 :(得分:1)

您的代码中有许多对象

  • foreach(List<String> achievement in gdeData.Achievements) { if(achievment < 2) continue; // Put the rest of your foreach logic here. } :这是您的Classclass day1是一个对象。
  • Class:这是array类型的对象。
  • args[]System对象随处可用。它是核心API的一部分。
  • System:这是PrintWriter对象实例,它是out对象的成员。
  • System:这是一个String对象。

仅仅因为你从不使用"Java drives the web"关键字并不意味着你没有使用任何对象。

答案 6 :(得分:1)

面向对象编程是一种范例,它提供了许多概念,如继承封装多态等。令人惊讶的这三个主要OOP概念也存在于您的小型简单Hello World程序中。我想证明这一点,请在下面找到澄清

1。在程序中使用继承概念

  

java.lang包中的Object类位于类层次结构树的顶部。每个类都是Object类的直接或间接的后代。您使用或编写的每个类都继承Object的实例方法。

因此,虽然您没有扩展任何类,但仍然是您的Day1类隐式扩展Object类并继承Object类的所有方法。 所以你已经在这里使用了继承概念。

2。在程序中使用Encapsulation概念

  

Java或面向对象编程语言中的封装是一种强制保护变量,来自类外的函数的概念,以便更好地管理该段代码,并且由于更改而对程序的其他部分影响最小或没有影响。受保护的代码。

封装可以通过Java中的访问说明符和已经在程序中应用封装概念来实现。 您使用访问说明符Public 声明了您的main方法 - 以便JVM可以调用main方法。你公之于众,允许来自应用程序外部的电话。

3。在程序中使用多态性概念

  

面向对象编程环境中的多态性是能够创建具有多个表单的变量,函数或对象

System.out.println("Java drives the web");

这里使用了PrintStream类的println()方法。如果你转到PrintStream类的源代码,你会发现这个类中有十个方法,它们具有相同的名称println但具有不同的参数。简而言之,PrintStream类包含不同的重载方法所以你也在这里使用了编译时多态(静态绑定或方法重载)。

如果你只是谈论对象,那么你可能从@ MadConan

得到答案

来自@ MadConan

的回答
  

您的代码中有许多对象

     
      
  • class day1:这是你的班级。
  •   
  • Class是一个对象。 args []:这是   数组类型的对象。系统:
  •   
  • System对象可用   到处。它是核心API的一部分。
  •   
  • out:这是PrintWriter   对象实例,它是System对象的成员。
  •   
  • &#34; Java驱动器   web&#34;:这是一个String对象。
  •   
     

仅仅因为你从不使用新关键字并不意味着你没有使用任何对象。