除了在类上访问属性时,为什么类在Java中没有定义符号? [重复] - java

This question already has answers here:

Are Java classes objects?

(4个答案)

在8个月前关闭。

考虑最简单的示例。我们有

public class Foo {}

因此我们可以说

Foo.class // ==> class Foo

因此,有理由认为Foo应该是java.lang.Class,因为我们显然可以访问它并且可以在当前上下文中对其进行操作。然而

Foo instanceof java.lang.Class

引发错误

cannot find symbol
  symbol:    variable Foo
Foo instanceof java.lang.Class
^-^

但是,这与instanceof本身无关。只是

Foo

仅在OpenJDK Shell中会产生相同的错误。

如果Foo在当前上下文中不存在,我们如何访问Foo上的属性?

java大神给出的解决方案

类名可能在您的源代码中用作许多不同表达式的一部分。这并不意味着类名本身就是一个对象;它只是意味着名称本身可以用作较大表达式的一部分。这些不是“属性”或属性。它们是用于形成具有许多不同部分的表达式的其他语法构造。

JLS定义了“ TypeName”的方式,例如Foo可在第15章中用于形成表达式。具体来说:

Section 15.8.2, Class Literals。

TypeName {[]}。 class

Section 15.8.4, Qualified this,以访问词法包围的类。

TypeName。 this

Section 15.11, Field Access Expressions,以超级类的形式访问词法包围的类。

TypeName。 super。识别码

Section 15.12, Method Invocation Expressions,以调用静态方法。

TypeName。 [TypeArguments]标识符([ArgumentList])

TypeName。 super。 [TypeArguments]标识符([ArgumentList])

Section 15.13, Method Reference Expressions,指的是稍后可能会调用的封闭类的方法。

TypeName。 super :: [TypeArguments]标识符

它也可能是符合其他表达式的“引用类型”,例如:

Section 15.16, Cast Expressions,以创建强制转换表达式。

(ReferenceType {AdditionalBound})UnaryExpressionNotPlusMinus

Section 15.20.2, Type Comparison Operator instanceof,使用instanceof

RelationalExpression instanceof ReferenceType

类型名称有特定用途,例如上述的Foo。这并不意味着类型名称通常可以用作其自己的对象。类型名称仅允许作为较大表达式的一部分使用,否则这些表达式可能是不相关的。

在Java中将华氏度转换为摄氏温度[重复] - java

This question already has answers here: Double value returns 0 [duplicate] (3个答案) 6年前关闭。 我正在尝试将华氏度转换为摄氏温度。现在当我使用此错误时:double fahrenheit=input.nextDouble(); double celsius= ( **5** /…

使用-source 8或更高版本来启用lambda表达式[重复] - java

This question already has answers here: Specifying java version in maven - differences between properties and compiler plugin (3个答案) 去年关闭。 当我尝试运行Maven构建时遇到构建错误。我创建了一个包含lambda函数的简单J…

java:继承 - java

有哪些替代继承的方法? java大神给出的解决方案 有效的Java:偏重于继承而不是继承。 (这实际上也来自“四人帮”)。他提出的理由是,如果扩展类未明确设计为继承,则继承会引起很多不正常的副作用。例如,对super.someMethod()的任何调用都可以引导您通过未知代码的意外路径。取而代之的是,持有对本来应该扩展的类的引用,然后委托给它。这是与Eric…

Java-如何将此字符串转换为日期? - java

我从服务器收到此消息,我不明白T和Z的含义,2012-08-24T09:59:59Z将此字符串转换为Date对象的正确SimpleDateFormat模式是什么? java大神给出的解决方案 这是ISO 8601标准。您可以使用SimpleDateFormat simpleFormat = new SimpleDateFormat("yyyy-MM…

从方法返回数组-Java - java

private static Coordinate[] getCircleCoordintaes() { Coordinate coordinates[] = {new Coordinate(0, 0)}; return coordinates; } 以上程序工作正常。在上面的程序中,返回的坐标数组首先初始化了数组使用这条线Coordinate coordi…