求这段代码的执行顺序解决办法
求这段代码的执行顺序
public class Client {
public static void main(String[] args) {
Server s=new SimpleServer(1000);
}
}
abstract class Server{
public final static int DEFAULT_PORT=40000;
public Server(){
int port=getPort();
System.out.println("端口号:"+port);
}
protected abstract int getPort();
}
class SimpleServer extends Server{
private int port=100;
public SimpleServer(int _port){
port=_port;
}
@Override
protected int getPort() {
return Math.random()>0.5?port:DEFAULT_PORT;
}
}
求这段代码的执行顺序
------解决方案--------------------
eclipse中,在Server s=new SimpleServer(1000); 这个行加个breakpoint
点debug
进去以后,F6单步执行,看代码一行行的执行,顺序就知道了
------解决方案--------------------
1、创建子类对象时,先回初始化父类
所以Server s=new SimpleServer(1000);之后先调用先初始化父类Server
2、由于是第一次加载Server,所以会对Server类进行初始化:public final static int DEFAULT_PORT=40000;
3、执行Server的构造器
int port=getPort();由于在子类中重载了这个方法,根据多态性,其实调用的子类中的方法
4、之后才会初始化子类:
------解决方案--------------------
要知道整个程序的运行顺序 好像是有点困难 也没有太大的意义
不过
要想知道某个函数的调用顺序是非常简单的
只需要在函数的第一行 加上一句
(new Exception(“函数名称”+函数参数)).printStackTrace();
如果你知道了 所有函数的调用顺序 也就相当于你知道了整个程序的执行了吧
public class Client {
public static void main(String[] args) {
Server s=new SimpleServer(1000);
}
}
abstract class Server{
public final static int DEFAULT_PORT=40000;
public Server(){
int port=getPort();
System.out.println("端口号:"+port);
}
protected abstract int getPort();
}
class SimpleServer extends Server{
private int port=100;
public SimpleServer(int _port){
port=_port;
}
@Override
protected int getPort() {
return Math.random()>0.5?port:DEFAULT_PORT;
}
}
求这段代码的执行顺序
------解决方案--------------------
eclipse中,在Server s=new SimpleServer(1000); 这个行加个breakpoint
点debug
进去以后,F6单步执行,看代码一行行的执行,顺序就知道了
------解决方案--------------------
1、创建子类对象时,先回初始化父类
所以Server s=new SimpleServer(1000);之后先调用先初始化父类Server
2、由于是第一次加载Server,所以会对Server类进行初始化:public final static int DEFAULT_PORT=40000;
3、执行Server的构造器
public Server(){
int port=getPort();
System.out.println("端口号:"+port);
}
int port=getPort();由于在子类中重载了这个方法,根据多态性,其实调用的子类中的方法
4、之后才会初始化子类:
private int port=100;
public SimpleServer(int _port){
port=_port;
}
------解决方案--------------------
要知道整个程序的运行顺序 好像是有点困难 也没有太大的意义
不过
要想知道某个函数的调用顺序是非常简单的
只需要在函数的第一行 加上一句
(new Exception(“函数名称”+函数参数)).printStackTrace();
如果你知道了 所有函数的调用顺序 也就相当于你知道了整个程序的执行了吧