一、局部代码块:
作用:控制变量的生命周期;
在程序中,当我们已经使用完 x 后,并且在接下来的代码中,不会再用到x,那么就没必要让x 在内存中占用空间了,这用情况下,可以使用 局部代码块,将x及其所设计到的区域封装为局部代码块,他们在程序执行中顺序不变,只是在执行完成后消失。
表现形式,以代码体现如下:
class TestDemo
{
public static void main(String[] args)
{
{
int x = 9;
System.out.println(x);
}
System.out.println("Hello World !");
}
}
二、静态代码块:
特点:
1. 随着类的加载而执行,而且只一次。
2. 优先于主函数执行。
作用:给类进行初始化。
当类中的方法都被静态了化,并且构造方法被private了,这是我们不能,在将这个类实例化,然而又想让类增加一些属性,就可以使用静态代码块:
表现形式,以代码体现如下:
class StaticCode
{
static
{
System.out.println("A");
}
public void show()
{
System.out.println("Hello World !");
}
}
class StaticCodeDemo
{
static
{
System.out.println("B");
}
public static void main(String[] args)
{
new StaticCode().show();
}
static
{
System.out.println("C");
}
}
三、构造代码块
作用:它可以给所有对象进行初始化
存在于:类中。
当类中的构造方法以重载的形式存在时,并且有共同成员变量或共同的方法时,可以通过构造代码块对其进行初始化;这样可以减少代码的重复!
public class Dev {
static {
System.out.println("静态代码块");
}
{
System.out.println("构造代码块");
}
public Dev() {
System.out.println("无参构造方法");
}
public Dev(String name) {
System.out.println("有参数的构造方法");
}
}
静态代码块会先执行,并且只执行一次,
接着是构造代码块执行(构造代码块在构造方法之前执行,并且每创建一次对象,它就会执行一次。而构造方法只执行一次。)
构造代码块的功能:(可以把不同构造方法中相同的共性的东西写在它里面)。例如:比如不论任何机型的电脑都有开机这个功能,此时我们就可以把这个功能定义 在构造代码块内。
执行顺序:成员变量初始化 ==》静态代码块==》构造代码块==》构造函数
四、static(静态)
需求:描述一下传智学生类。 都是中国人....
目前存在的问题: 所有的学生都是中国 的,有n个学生就会有n份中国的 数据存内存中,这样会浪费内存。
目前方案: 把“中国”这个数据移动 到数据共享区中,共享这个数据给所有的Student对象使用即可。
问题2: 如何才能把这个数据移动 到数据共享区中共享呢?
解决方案: 只需要使用static修饰该数据即可。
静态的成员变量只会在数据共享区中维护一份,而非静态成员变量的数据会在每个对象中都维护一份的。。
注意:
1. 非静态成员变量不能使用类名直接访问,要使用对象访问.
2. 千万不要为了访问方便而使用static修饰。一定要数据真正是需要被共享的时候才使用static修饰。