Java面向对象
完整代码
Java中有 静态代码块、构造代码块、构造函数、普通代码块。
{}这就是代码块
静态代码块
这些代码块的执行顺序有一定的规范 有些面试会问!
static修饰的代码块便是静态代码块 位于类的内部 方法外部
示例
static {
System.out.println("这是静态代码块");
}
执行:静态代码块在类被加载的时候就运行了,而且只运行一次,并且优先于各种代码块以及构造函数。如果一个类中有多个静态代码块,会按照书写顺序依次执行。可以理解为最先被执行。
作用:
一般情况下,如果有些代码需要在项目启动的时候就执行,这时候就需要静态代码块。比如项目启动时需要加载的缓存资源,我们就可以都放入静态代码块中。
构造代码块
不用static修饰的便是构造代码块 位于类的内部 方法外部
执行:创建对象时执行 可以理解在构造方法执行时加入的代码
作用:有多个构造方法时使用
构造函数代码块
构造函数中的代码
普通代码块
方法中的代码
执行顺序
静态代码块>构造代码块>构造函数>普通代码块
示例
public class StaticDemo {
//静态变量 类变量
static public String name;
static int a=0; //静态变量 只能由静态方法访问
//实例变量
public int age;
//静态代码块
static {
System.out.println("这是静态代码块");
}
//构造代码块
{
System.out.println("这是构造代码块");
}
public StaticDemo(){
System.out.println("这是构造方法代码块");
}
//静态方法
public static void eat() {
System.out.println("这是一个吃饭的静态方法可以使用类名访问、普通代码块");
a++;
System.out.println(a);
}
}
使用
package com.qingsu.personnel;
import static java.lang.System.out;//静态导包
public class StaticDemoTest {
public static void main(String[] args) {
//对静态变量赋值直接使用类名访问 此时静态代码块优先执行
StaticDemo.name="张三";
out.println(StaticDemo.name);
//实例化一个对象 此时构造代码块优先执行
StaticDemo testDemo = new StaticDemo();
//使用类名对对象赋值
testDemo.name="王五";
//静态变量归类所以 此时应该打印王五 所以不推荐使用对象名进行访问
out.println(StaticDemo.name);
testDemo.age=18;
//这是一个静态方法 既可以使用类名访问 也可以使用对象名访问
testDemo.eat();
StaticDemo.eat();
}
}
控制台输出