请解释JVM中的使用Xms和Xmx参数.它们的默认值是什么?
abstract class A {
private int a;
public A(int x) {
a = x;
}
public int getA() {
return a;
}
}
class B extends A {
public B(int x) {
super(x);
}
}
class TestB {
public static void main(String args[]) {
B b = new B(5);
System.out.println(b.getA());
}
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,当我说B b=new B(5);超级构造函数被调用并且私有实例变量被初始化为5.所以当我说getA()on class B的对象被b它引用时返回5.作为实例变量a的class A是私人它不会被继承class B.那么在哪里a创建实例变量(在堆上).如果它是一个public它将成为class B …
class A{
private void sayA(){
System.out.println("Private method of A");
}
public static void main(String args[]){
A instanceA=new B();
instanceA.sayA();
}
}
class B extends A{
}
Run Code Online (Sandbox Code Playgroud)
我期望它抛出一个运行时异常,因为在编译时编译器检查是否sayA()可以在引用上调用A它,并且在运行时它将检查是否sayA()可以在B对象上调用它.但它反而印刷了" A的私人方法 ".
Outer outer = new Outer();
一个Object的Outer类是在堆中创建和参考变量指向它.
如果我在写作时就明白了
Outer.Inner inner=outer.new Inner();
Inner类的对象在堆上创建并inner指向它.在堆中,我们有两个独立的对象,它们包含自己的实例变量.
但如果我写
Outer.Inner inner=new Outer().new Inner();
仍然Object会在堆上创建两个for for Outer和other for Inner.但参考,inner只有Inner Object's成员可以访问.谁在指Object堆外?如果它没有被任何引用引用,那么它应该有资格进行垃圾收集,这会影响其使用inner.
创建用户定义的异常时 最佳实践是什么,异常应创建为已检查还是未检查?
我知道不需要在代码中处理未经检查的/运行时异常。
class Animal{
public void findAnimal(){
System.out.println("Animal class");
}
public void sayBye(){
System.out.println("Good bye");
}
}
class Dog extends Animal{
public void findAnimal(){
System.out.println("Dog class");
}
}
Run Code Online (Sandbox Code Playgroud)
鉴于上述继承,可以理解Animal的参考可以指Dog的一个对象
Animal animal=new Dog();
Run Code Online (Sandbox Code Playgroud)
由于Dog对象可以执行动物可以执行的所有操作,如上面的情况,Dog也有sayBye和findAnimal方法.
但是为什么允许将一个Animal对象向下转换为Dog对象,该对象没有用处并且在运行时失败.
Dog dog=(Dog)new Animal(); // fails at runtime but complies.
Dog dog=(Dog)animal;
Run Code Online (Sandbox Code Playgroud)
上面的语句看起来很合理,因为动物引用指向Dog对象.