Java类是否可以是对象,对象是否可以是类?

Java类是否可以是对象,对象是否可以是类?,java,oop,Java,Oop,类是否可以是Java中的对象 我认为类< /代码>是创建新的对象< /代码>的蓝图,但同时,类可以具有静态变量和静态方法,这些调用在没有类(object)实例的情况下调用。p> 相反,对象是否可以成为类 我认为一个类是创建新对象的蓝图 对 但同时类可以有静态变量和静态变量 在没有类(对象)实例的情况下调用的方法 这并不能使它成为一个对象。这仅仅是因为有时候,您需要所有对象都通用的变量和方法。这意味着对于类的每个实例,我们不需要不同的东西 相反,一个对象可以是一个类吗 不,因为对象是一种东西而不是

类是否可以是Java中的对象

我认为<代码>类< /代码>是创建新的<代码>对象< /代码>的蓝图,但同时,类可以具有静态变量和静态方法,这些调用在没有类(object)实例的情况下调用。p> 相反,

对象
是否可以成为

我认为一个类是创建新对象的蓝图

但同时类可以有静态变量和静态变量 在没有类(对象)实例的情况下调用的方法

这并不能使它成为一个对象。这仅仅是因为有时候,您需要所有对象都通用的变量和方法。这意味着对于类的每个实例,我们不需要不同的东西

相反,一个对象可以是一个类吗

不,因为对象是一种东西而不是模板



如果您发现一个函数/方法不会在类的实例之间更改,那么将其设置为
静态

可能是有意义的,正如您所提到的,您可以将类想象为对象的蓝图。创建对象时,jvm在堆中创建一些专用内存来存储对象及其值。在执行程序代码时,jvm执行方法中给出的代码

静态变量是与一个对象实例不直接相关的内存,每个人都可以全局访问它们(如果它们是公共的),因此它们不直接使用对象实例内存进行处理。(但请记住-静态变量也是变量类型的对象实例;-))

静态方法是可以在没有对象实例的情况下执行的代码,因此如果它们是公共的,每个人都可以这样做

为了让你了解这些东西的用途:

  • 对象实例用于管理特定类型的一个或多个实例
  • 静态方法通常用于提供一些公共功能(参见java示例)
  • 静态变量用于在多个实例之间共享一个变量,例如具有记录器或其他功能
使用静态内容必须小心处理,因为它可能“破坏”许多oop原则。但是如果你考虑函数式编程,它可能会非常有用

是和否

不,从某种意义上说,对象是从类创建的,所以很明显,它们不是对象。类的静态成员只属于该类。谁说只有对象才能有成员

是的,您可以使用
类创建表示类的对象。听起来很不错,不是吗?基本上,
类表示一个类。类中的所有信息(名称、方法、字段、构造函数…)都可以从相应的
class
对象中获取。然后可以使用这些信息进行反射。通过反射,您可以动态调用方法,设置私有字段的值和许多其他很酷的东西。您甚至可以从
对象创建对象

类可以是Java中的对象吗

实际上没有。它不能是一个对象,但可以在这里描述对象的行为。一个人可以解释一辆车应该是什么样子,但他们不能被视为一辆车,对吗

相反,一个对象可以是一个类吗

不,因为在任何时候,如果你看到,对象都有一个状态,而不是类。在对象中,其所有属性都具有您给定的值或默认定义的值

可能下图显示了一些视觉差异

资料来源:维基百科

由于静态事物与状态无关,所以您将它们添加到类中,而不是对象中

什么是班级

类是对象的蓝图:它描述某种对象的外观(由类生成的对象具有哪些数据以及可以对这些数据执行哪些操作)

什么是物体

对象是特定类的实例

类是逻辑实体,这意味着它们在现实世界中并不存在。物体是物理实体,我们用肉眼看到它们

让我们举一个简单的例子

你见过动物吗?

,没有人有,因为动物(是一个类:一个逻辑实体)

那么我在路上或动物园里看到了什么?它们不是动物吗?

不,当然不是。它们是动物类的物体(物理实体):如马、狮子、大象等


因此,对象属于类,但不是类。类不能是对象(因为类是逻辑的,对象是物理的)。

由于编辑得到批准,术语
class
Object
得到使用,答案是“是”和“是”:

“在Java中,
可以是
对象吗?”

“一个
对象
是否可以是一个
?”


班级是一个理论概念<代码>类
是表示类定义的关键字。
Class
是表示由
Class which{…}
定义的任何内容的类。如果不将关键字
、类和类的概念
以及类和类的实例
分开,这会让人非常困惑。您是在java或面向对象编程(OOP)的上下文中问这个问题的?因为OOP是一个以很多方式实现的范例:java、C++、C++以及更多。注意答案完全取决于所使用的语言。在Java中,公认的答案是正确的。在其他一些语言中,类是对象(反之亦然)。在经过批准的编辑(通过@MehrajMalik)后清除downvote,现在这个问题就没有意义了。现在,我的第一个评论是
Object o = String.class; // yes
boolean objectIsClass = o instanceof Class; // yes