new person-我这有段代码,我对于它的执行顺序存在疑惑,为什么在父类中创建对象的操作会先于构造器执行?

问题描述

我这有段代码,我对于它的执行顺序存在疑惑,为什么在父类中创建对象的操作会先于构造器执行?

public class Test {
Person person = new Person("Test");
static{
System.out.println("test static");
}
public Test() {
System.out.println("test constructor");
}

public static void main(String[] args) {
new MyClass();
}
}
class Person{
static{
System.out.println("person static");
}
public Person(String str) {
System.out.println("person"+str);
}
}
class MyClass extends Test {
Person person = new Person("MyClass");
static{
System.out.println("myclass static");
}
public MyClass() {
System.out.println("myclass constructor");
}
}

test static
myclass static
person static
person Test
test constructor
person MyClass

myclass constructor

Person person = new Person("Test");先执行了然后才执行了Test的构造器

解决方案

java初始化顺序如下:
父类--静态变量
父类--静态初始化块
子类--静态变量
子类--静态初始化块
父类--变量 (Person person = new Person("Test");)
父类--初始化块
父类--构造器
子类--变量
子类--初始化块
子类--构造器

解决方案二:

肯定时先变量再构造器啊,否则构造器没法使用变量,还怎么“构造”?

时间: 2025-01-21 06:04:54

new person-我这有段代码,我对于它的执行顺序存在疑惑,为什么在父类中创建对象的操作会先于构造器执行?的相关文章

使用使用脚本或任何语言能够在网站源码中剪切出一段代码

问题描述 使用使用脚本或任何语言能够在网站源码中剪切出一段代码 使用使用脚本或任何语言能够在网站源码中剪切出一段代码 使用使用脚本或任何语言能够在网站源码中剪切出一段代码

c++-这段代码怎么改,才能运行(main的第一行要保留)

问题描述 这段代码怎么改,才能运行(main的第一行要保留) #include using namespace std; class student { public: student(int n,float s):num(n),score(s){} void change(int n,float s){num=n;score=s;} void display(){cout<<num<<" "<<score<<endl;} private

孙鑫-Visual C++的一段代码搞不懂求解释

问题描述 Visual C++的一段代码搞不懂求解释 说一下自己的理解.题目是孙鑫老是的文本输出的例子. 1:GetBkColor得到背景白色,然后SetTextColor(白色)把背景白色设置为文字颜色.跟着clr应该是赋值得到白色了吧,但是F5看的时候是黑色,就要原文字颜色.我这么理解应该错了 1 COLORREF clr=dc.SetTextColor(dc.GetBkColor()); //GetBkColor属于dc对象,改变dc中的背景值(白色).然后SetTextColor用白色值

android-贴一段代码,关于自动接听的,请老司机帮帮忙

问题描述 贴一段代码,关于自动接听的,请老司机帮帮忙 public synchronized void answerRingingCall(Context context) { try { Log.e("try to answer", "below 2.3"); //ITelephony itelephony = getITelephony(mTelephonyManager); Method method = Class.forName("android

编译错误-出现了fatal exception :main 这是其中的一段代码,大家看看有什么问题

问题描述 出现了fatal exception :main 这是其中的一段代码,大家看看有什么问题 public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); loginBtn = (Button)findViewById(R.id.login_btn_login); registerBtn = (Butt

求助servlet 这段代码什么意思

问题描述 求助servlet 这段代码什么意思 */ @RequestMapping("/getTile.do") public @ResponseBody String getTile(HttpServletResponse response, @RequestParam(value = "map_id", required = true) String mapId, @RequestParam(required = true) int level, @Reque

ancy orm-用FancyForm添加用户角色,求解释这段代码,

问题描述 用FancyForm添加用户角色,求解释这段代码, var form = $('#form').FancyForm({ title: '添加角色' width: 345 height: 325 inputWidth: 190 labelWidth: 60 url: '<%=path %>/sysRoleController/addRole.do' params: { param1: 1 param2:'string' } defaults: { type: 'string' } it

C++课程设计老师说我没有用到类 求指教这段代码要怎么修改加上类

问题描述 C++课程设计老师说我没有用到类 求指教这段代码要怎么修改加上类 #include #include #include using namespace std; const double pi = 3.14159265; const double e = 2.718281828459; const int SIZE = 1000; typedef struct node//为了处理符号而建立的链表(如: 1+(-2)) { char data; node *next; }node; t

ip地址-求解释下这段代码...感激不尽

问题描述 求解释下这段代码...感激不尽 u_long ulDestIP; u_long ulDestIP1=inet_addr(a); u_long ulDestIP2=inet_addr(b); unsigned long count = ntohl(ulDestIP2 - ulDestIP1)-1; struct in_addr in; unsigned long hostip; for(unsigned int i = 0; i <=count+1; i++) { hostip = nt