一、static:
静态的,static修饰的东西会随着字节码文件优先于类加载进内存作用:
1.修饰方法:
静态方法,不需要进行实例化就可以直接通过类名调用于类不属于对象,一般出现在工具类中,只能调用静态属性或方法2.修饰属性:
静态属性,不需要进行实例化就可以直接通过类名调用于类不属于对象,所有对象共享一份数据3.修饰代码块:
静态代码块,在类第一次被使用的时候会执行,仅执行一次先于构造代码块与构造方法,一般在连接数据库的时候使用造代码块在对象每次创建的时候均会执行对象创建执行顺序:
静态构造代码块>构造代码块>构造方法主方法
public class Main {
public static void main(String[] args) {
Static sta = new Static("菠萝");
System.out.println("对象创建执行顺序:静态构造代码块>构造代码块>构造方法");
System.out.println("有多个静态构造代码块的执行顺序:从上到下顺序执行");
System.out.println("有多个构造代码块的执行顺序:从上到下顺序执行");
}
}
类
package static_text;
public class Static {
//属性
String name;
//无参构造方法
public Static(){
System.out.println("默认构造方法");
}
//有参构造方法
public Static(String name) {
this.name = name;
System.out.println(name);
}
//多个构造代码块
{
System.out.println("构造代码块3");
}
{
System.out.println("构造代码块1");
}
//多个静态构造代码块
static {
System.out.println("静态构造代码块3");
}
static {
System.out.println("静态构造代码块1");
}
static {
System.out.println("静态构造代码块2");
}
{
System.out.println("构造代码块2");
}
}
结果:
静态构造代码块3
静态构造代码块1
静态构造代码块2
构造代码块3
构造代码块1
构造代码块2
菠萝
对象创建执行顺序:静态构造代码块>构造代码块>构造方法//写这一句话是为了加强记忆
有多个静态构造代码块的执行顺序:从上到下顺序执行
有多个构造代码块的执行顺序:从上到下顺序执行
二、构造代码块
1.格式:
java类中使用{}声明的代码块(和静态代码块的区别是少了static关键字){
System.out.println("构造代码块3");
}
2.执行时机
构造代码块在创建对象的时候被调用,每创建一次对象都会调用一次,但是优先于构造函数执行,需要注意的是,听名字我们就知道,构造代码块不是优先于构造函数执行的,而是依托于构造函数,也就是说,如果你不实例化对象,构造代码块是不会执行的。3.构造代码块的作用:
(1)和构造函数的作用类似,都能够对象记性初始化,并且只要创建一个对象,构造代码块都会执行一次。但是反过来,构造函数则不会再每个对象创建的时候都执行(多个构造函数的情况下,建立对象时传入的参数不同则初始化使用对应的构造函数) (2)利用每次创建对象的时候都会提前调用一次构造代码块特性,我们做诸如统计创建对象的次数等功能。三、静态构造代码块
1.格式:
在java类中(方法中不能存在静态代码块)使用static关键字和{}声明的代码块:public class CodeBlock{
static{
System.out.println("静态代码块");
}
}