我刚开始使用Java学习OOP。我写的第一个代码是:
class day1 {
public static void main(String args[]) {
System.out.println("Java drives the web");
}
}
当我编译这个源文件时,我得到一个.class文件。当我在命令行解释它时,它给了我想要的结果。
我的问题是:我没有创建任何对象。我刚刚写了一个名为day1的类。我怎么能解释它? OOP是关于从类中提取的对象。但是我没有从课堂上抽出任何东西。
我在OOP中感到困惑。
答案 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.
}
:这是您的Class。 class day1
是一个对象。Class
:这是array类型的对象。 args[]
:System对象随处可用。它是核心API的一部分。System
:这是PrintWriter对象实例,它是out
对象的成员。System
:这是一个String对象。仅仅因为你从不使用"Java drives the web"
关键字并不意味着你没有使用任何对象。
答案 6 :(得分:1)
面向对象编程是一种范例,它提供了许多概念,如继承,封装,多态等。令人惊讶的这三个主要OOP概念也存在于您的小型简单Hello World程序中。我想证明这一点,请在下面找到澄清
java.lang包中的Object类位于类层次结构树的顶部。每个类都是Object类的直接或间接的后代。您使用或编写的每个类都继承Object的实例方法。
因此,虽然您没有扩展任何类,但仍然是您的Day1类隐式扩展Object类并继承Object类的所有方法。 所以你已经在这里使用了继承概念。
Java或面向对象编程语言中的封装是一种强制保护变量,来自类外的函数的概念,以便更好地管理该段代码,并且由于更改而对程序的其他部分影响最小或没有影响。受保护的代码。
封装可以通过Java中的访问说明符和已经在程序中应用封装概念来实现。 您使用访问说明符Public 声明了您的main方法 - 以便JVM可以调用main方法。你公之于众,允许来自应用程序外部的电话。
面向对象编程环境中的多态性是能够创建具有多个表单的变量,函数或对象
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对象。
仅仅因为你从不使用新关键字并不意味着你没有使用任何对象。