在以下代码中:
final int a;
a=2;
byte b=a; // error: possible loss of precision
Run Code Online (Sandbox Code Playgroud)
为什么我会收到此错误?是不是a最终变量编译时常量表达式,因此在赋值期间隐式缩小为字节?
换句话说,上面的代码不等同于:
final int a=2;
byte b=a;
Run Code Online (Sandbox Code Playgroud) 在以下代码中:
class EnclosingClass
{
public static class BiNode extends Sub.IBiLink { }
private static class Sub
{
private static class IBiLink
{
}
}
}
Run Code Online (Sandbox Code Playgroud)
在与其他.class文件一起编译时,我还看到一个名为"EnclosingClass $ 1.class"的文件.为什么这是自动创建的?这是怎么回事?
给定以下目录结构:
/top
|--- wrk
|--- pkg
|--- A.java
|--- B.java
Run Code Online (Sandbox Code Playgroud)
假设两个文件A.java,并B.java包含下面的代码,分别为:
// Filename: A.java
package pkg;
class A { B b; }
// Filename: B.java
package pkg;
class B {...}
Run Code Online (Sandbox Code Playgroud)
假设当前目录是 /top/wrk
为什么javac -cp . pkg/A.java即使我们还没有编译,命令也能成功运行B.java?
此外,如果当前目录是/top/wrk/pkg命令javac A.java工作.怎么会这样?
class OuterA {
class InnerA {
}
}
class SubclassC extends OuterA.InnerA {
SubclassC(OuterA outerRef) {
outerRef.super();
}
}
class XYZ {
public static void main(String[] args) {
new SubclassC(new OuterA());
}
}
Run Code Online (Sandbox Code Playgroud)
在上面的代码中
OuterA对象引用传递给SubclassC.java文件的构造函数进行编译?InnerA不需要将对象引用传递给SubclassC构造函数?我是java中的枚举新手,我很困惑为什么这段代码编译得很好
enum Scale5 {
GOOD(), BETTER(), BEST();
static Scale5 s=GOOD;
}
Run Code Online (Sandbox Code Playgroud)
但是这段代码失败了:
enum Scale5 {
GOOD(), BETTER(), BEST();
Scale5 s=GOOD;
}
Run Code Online (Sandbox Code Playgroud)
我得到错误:从初始化程序非法引用静态字段.我不明白这个原因.我在枚举方面相对缺乏经验,所以请把它丢给我.谢谢了!
这里问的问题不能引用初始化程序中的静态枚举字段?与我所问的完全相反.在我的情况下,声明静态编译代码就好了.
在以下代码中:
class Test {
public static void main(String [] args) {
printAll(args);
}
public static void printAll(String[] lines) {
for(int i=0;i<lines.length;i++){
System.out.println(lines[i]);
Thread.currentThread().sleep(1000);
}
}
}
Run Code Online (Sandbox Code Playgroud)
将数组行中的每个String输出:
byte a = 125;
final byte b = 2;
final Byte c = 3;
switch (a) {
case b: // works fine
break;
case c: // Constant Expression required
break;
}
Run Code Online (Sandbox Code Playgroud)
既然c是final变量,它不是编译时常量,因此是有效的案例标签吗?
请参阅以下代码:
class A {
private int b;
A(){
b=5;
}
}
class B extends A {
}
class C {
public static void main(String args[]){
B b=new B();
}
}
Run Code Online (Sandbox Code Playgroud)
当我创建B的实例时,B的默认构造函数调用A的构造函数,该构造函数将值赋给实例变量b.我的查询是因为实例变量与类的实例相关联,并且我们没有创建任何类A的实例,这个赋值(b = 5)究竟意味着什么?当没有A的实例时,对A的构造函数的调用是什么意思?
当从子类调用super()时,它会在'this'对象上调用,即由语句new Subclass()创建的对象.在'this'对象上调用super().但'this'对象包含所有变量,超类的方法及其本身及其构造函数,但不包含超类构造函数.那么如何在'this'对象上调用super()?
请参阅附件中的图片,我试图解释我的理解.
注意:P是超类,Q是派生类
java ×9
inheritance ×3
constants ×2
javac ×2
oop ×2
.class-file ×1
class ×1
constructor ×1
enums ×1
expression ×1
import ×1
narrowing ×1
nested-class ×1
package ×1
polymorphism ×1
static ×1
super ×1
superclass ×1
thread-sleep ×1