2020.11.10 刷题总结
经过多次艰难的决定,我觉得还是要开始正对性的刷题,在自学的过程中,缺少题目的练习,对部分知识的掌握程度有限.希望能通过刷题不断地提升自己.
今日刷题分享
1. 以下程序会输出什么?
int a =100,b=50,c=a---b,d=a---b;
System.out.println(a);
System.out.println(b);
System.out.println(c);
System.out.println(d);
这道题考察了运算符优先级的知识,下面是运算符优先级表:
通过表可以看出,- -运算符的优先级要高于-,所以在c=a- - -b可以理解为:c=(a- -)-b;执行改行之后,c = 100 - 50;执行之后 a的值自减,a = 99;
以此类推:得到输出结果为: a = 98 b = 50 c = 48 d = 49
2. This调用语句必须是构造函数中的第一个可执行语句?
错误,this调用语句可以在任何位置,但是this()比必须是构造函数的第一个可执行语句。因为this()是构造方法。这里需要注意:This调用语句并非this()方法
3. 运用下列哪个命令能够获取JVM的内存映像?
A. jinfo B. jmap C.jhat D.jstat
解读:
1、jps:查看本机java进程信息。
2、jstack:打印线程的栈信息,制作线程dump文件。
3、jmap:打印内存映射,制作堆dump文件
4、jstat:性能监控工具
5、jhat:内存分析工具
6、jconsole:简易的可视化控制台
7、jvisualvm:功能强大的控制台
假定Base b = new Derived(); 调用执行b.methodOne()后,输出结果是什么?
public class Base
{
public void methodOne()
{
System.out.print("A");
methodTwo();
}
public void methodTwo()
{
System.out.print("B");
}
}
public class Derived extends Base
{
public void methodOne()
{
super.methodOne();
System.out.print("C");
}
public void methodTwo()
{
super.methodTwo();
System.out.print("D");
}
}
解读:
向上转型:父类只能调用父类方法或者子类覆写后的方法,而子类中的单独方法则是无法调用的。所以程序的执行顺序为:
class Base
{ public void methodOne() // (3)
{
System.out.print("A");
methodTwo(); //调用子类的重写方法 (4)
} public void methodTwo() // (7)
{
System.out.print("B");
}
}
class Derived extends Base { public void methodOne() // (1)
{ super.methodOne(); // (2)
System.out.print("C");
} public void methodTwo() //该方法为重写了父类的方法 (5)
{ super.methodTwo(); //(6)
System.out.print("D");
}
}