成员变量和局部变量的区别?

 成员变量:

    1.成员变量定义在类中,在整个类中都可以被访问.

    2.成员变量随着对象的建立而建立,存在于对象所在的堆内存中.

    3.成员变量有默认初始化值.

局部变量:

    1.局部变量中能定义在局部范围内,如:函数内,语句内等.

    2.局部变量存在于栈内存中

    3.作用的范围结束,变量空间会自动释放.

    4.局部变量没有默认初始化值

构造函数为什么没有返回值?

    构造函数中不能返回其他东西,只能返回刚刚创建的对象,所以它的行为已经固定了.

代码块:

    1.局部代码块

        在函数内部定义{},

        不能使用static修饰

    2.构造代码块(本身意义为构造函数的补充)

        也是类的成员,和成员变量和成员函数同级.

        构造对象时,先调用构造代码块,然后是构造函数.

    3.静态代码块

        构造代码块 + static修饰符---> 静态代码块

        静态代码块在类加载的时候执行,而且只执行一次

        静态代码块的执行时间时间是类被加载的时候

        Class.forName(String,boolean,initialize,ClassLoader) 第二个参数可以控制加载时是否调用静态代码块,默认是false


    注意:静态代码块是类加载的时候执行的,而不是创建对象的时候执行,一个类被加载到一个叫"方法区"的地方,这个地方对于类信息进行永久储存

    当虚拟机运行后会创建一个运行时区 这个区内包括分配的堆栈空间和方法区 , 方法区放置类的信息 每创建一个线程就会创建一个新的栈区域 ,栈区负责存放类的方法 ,每运行一个方法就会将方法压入栈顶部 当方法执行完 将其弹出. 一个运行时区至少需要有一个栈用来保存main方法,这也说明一个程序最少也需要存在一个线程来执行main方法.