为什么正则表达式((x,y)|(x,z))是不确定的,正如"核心Java"这本书所说的那样?作者给出了他的观点:
当解析器看到x时,它不知道要采用哪两个替代方案.这个表达式可以以确定的形式重写为(x,(y | z))
任何人都可以给我一个解释吗?
我知道我不能在Java中抛出或捕获泛型类的实例,例如,下面的代码编译错误:
public static <T extends Throwable> void test(Class<T> t){
try{
//do work
}
catch (T e){// ERROR--can't catch type variable
Logger.global.info(...)
}
}
Run Code Online (Sandbox Code Playgroud)
有人能解释Java禁止抛出或捕获泛型类实例的确切原因吗?
public class Test {
public static void main(String[] args){
B b=new B();
A a1=new A();
A a2=b;
a1=b;
a1.printDescription(); //which prints I'm B
a2.printDescription(); //which also prints I'm B
}
}
class A{
public void printDescription(){
System.out.println("I'm A");
}
}
class B extends A{
public void printDescription(){
System.out.println("I'm B");
}
}
Run Code Online (Sandbox Code Playgroud)
在搜索之后,我找到了一个解释混乱的Java多态,它说:"即使x被明确声明为类型A,它也被实例化为B类的对象,所以我将运行doIt()方法的版本,即在B类中定义."但是在我使用类A构造函数实例化对象之后,它仍然打印"我是B",所以任何人都可以为我解释这个吗?
class Foo {
public:
int a = 1;
int b = 2;
};
int main() {
Foo foo;
cout << &Foo::a << endl;//output 1
cout << &Foo::b << endl;//also output 1
}
Run Code Online (Sandbox Code Playgroud)
我们知道指向成员数据的指针应指出与对象起始地址的相对偏移量,但正如示例所示,指向Foo :: a和Foo :: b的指针都得到了a 1.有人能解释这里发生了什么吗?