小编Pan*_*kaj的帖子

启动JVM时,Xms和Xmx参数是什么?

请解释JVM中的使用XmsXmx参数.它们的默认值是什么?

java parameters jvm memory-management

911
推荐指数
5
解决办法
172万
查看次数

堆中创建的抽象类的私有实例变量在哪里?

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.作为实例变量aclass A是私人它不会被继承class B.那么在哪里a创建实例变量(在堆上).如果它是一个public它将成为class B …

java oop abstract-class abstract

6
推荐指数
1
解决办法
4451
查看次数

如何解决超类的私有方法?

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的私人方法 ".

java

6
推荐指数
3
解决办法
465
查看次数

内部类对象如何驻留在内存中?

Outer outer = new Outer();

一个ObjectOuter类是在堆中创建和参考变量指向它.

如果我在写作时就明白了

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.

java inner-classes

6
推荐指数
1
解决办法
1082
查看次数

自定义异常 - 检查或未检查?

创建用户定义的异常时 最佳实践是什么,异常应创建为已检查还是未检查?

我知道不需要在代码中处理未经检查的/运行时异常。

java exception

3
推荐指数
1
解决办法
3859
查看次数

为什么在java中允许向下转换?

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对象.

java inheritance

1
推荐指数
1
解决办法
946
查看次数