Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
这个Java代码中的对象在哪里_Java_Oop - Fatal编程技术网

这个Java代码中的对象在哪里

这个Java代码中的对象在哪里,java,oop,Java,Oop,我刚开始用Java学习OOP。我写的第一段代码是: class day1 { public static void main(String args[]) { System.out.println("Java drives the web"); } } 当我编译这个源文件时,我得到一个.class文件。当我在命令行中解释它时,它会给我期望的结果 我的问题是:我没有创建任何对象。我刚刚写了一个名为day1的类。我怎样才能解释它?OOP是关于从类中绘制对象的。但是我没有从第一天的课

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

class day1 {
  public static void main(String args[]) {
    System.out.println("Java drives the web");
  }
}
当我编译这个源文件时,我得到一个.class文件。当我在命令行中解释它时,它会给我期望的结果

我的问题是:我没有创建任何对象。我刚刚写了一个名为day1的类。我怎样才能解释它?OOP是关于从类中绘制对象的。但是我没有从第一天的课上画任何东西

我对OOP感到困惑。

类day1是创建主对象的模式-如果将其实例化为对象。这是静态方法无法做到的,因此在您的例子中,程序仍然是面向对象的,因为它基于对象模式。如果在类中创建其他静态方法和变量,则可以访问它们,但是如果要创建非静态方法或变量,则在没有类实例化的情况下无法访问它们

看看

对不起,有任何误传


谢谢杰斯珀纠正我的错误

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

在代码中,您没有创建对象的day1类,而是加载了day1类并执行了属于该类的静态方法

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

同样在您的示例中,您有一个字符串对象Java驱动web,您可以在其中调用实例方法和System.out,后者返回打印流以打印消息

为了创建第1天的对象,您需要调用

day1 myInstance = new day1();
这将是开始处理对象的方法

希望这有帮助


Jose Luis

Java不是纯OO语言,也不需要创建对象。您可以编写任意复杂的程序,而无需创建任何对象,但这将非常困难。

调用print方法时会创建一个string对象

您拥有的是一个带有静态方法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();

发生的情况是,默认的无参数构造函数在未指定对象时构造该对象,并返回对该对象的引用。用于调用非静态方法而不使用静态限定符的引用。

代码中有许多对象

第一天上课:这是你的。类是一个对象。 args[]:这是类型为的对象。 系统:对象无处不在。它是核心API的一部分。 out:这是作为系统对象成员的对象实例。 Java驱动web:这是一个字符串对象。
仅仅因为你从不使用new关键字并不意味着你没有使用任何对象。

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

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

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

2.在程序中使用封装概念 Java或面向对象编程语言中的封装是一个概念,它强制从类外保护变量和函数,以便更好地管理该段代码,并且由于受保护代码的更改而对程序的其他部分产生最小影响或没有影响

封装可以通过Java中的访问说明符实现,并且您已经在程序中应用了封装概念。您使用访问说明符Public声明了main方法,以便JVM可以调用main方法。您公开此消息是为了允许来自应用程序外部的呼叫

3.在程序中使用多态性概念 在面向对象编程环境中,多态性是指创建具有多种形式的变量、函数或对象的能力

这里您使用了PrintStream类的println方法。如果您查看PrintStream类的源代码,您会发现这个类中有十个方法,它们的名称相同,但参数不同 加载方法。因此,这里还使用了编译时多态性静态绑定或方法重载

若你们只是在谈论对象,那个么你们的答案可能来自于@

答复@


代码中有许多对象

第一天上课:这是你们班。 类是一个对象。args[]:这是 数组类型的对象。系统: 系统对象可用 处处它是核心API的一部分。 out:这是印刷撰稿人 作为系统对象成员的对象实例。 Java驱动器 web:这是一个字符串对象。 不使用new关键字并不意味着不使用任何对象


在对象System.out上调用println。您的代码完全是面向对象的。您可以创建一个应用程序,而无需创建任何对象。例如,您可以使用while循环和其他一些静态方法在主方法中创建一个计算器应用程序。Java是一种很好的面向对象编程语言,但它不像SmallTalk那样是一种硬核语言,在SmallTalk中,一切都是一个对象。正如字符串对象Java驱动web一样,它是一种所谓的“令人反感的宣传文字”,因此您反对它不是一个客观对象,但它客观上是一个对象。没有默认对象这样的东西。不会创建类day1的任何实例。调用main方法不需要对象,因为main方法是静态的。那么类也可以称为对象?数组只有数据。我认为对象是由代码和数据组成的。数组是如何成为对象的?所以我从一个错误的例子开始理解OOP!感谢您的解释,exampleis println调用是对另一个对象“System”的成员对象“out”进行的。否。System不是对象。它是类。out是系统类中的静态成员,是PrintStream的实例。由于系统类构造函数是私有的,因此我们要访问out:class_name.out_static_memberSystem.out summary:1>System是java.lang包中的最后一个类2>out是PrintStream类的引用和系统类的静态成员。3>println:是PrintStream类的方法
System.out.println("Java drives the web");