1.static关键字
可被称为静态,可修饰属性,方法,内部类,代码块
static修饰的内容随着类的加载而加载,被static修饰的成员变量可称之为类变量
特点:
优先于对象存在
可被所有对象共享
可通过类名直接调用
注:静态方法无法使用静态变量,但可以通过类直接调用
public class Static {
public static void method2(){
System.out.println("年龄");
}
Static.method2();
}
非静态方法可以使用静态变量,但非静态方法的使用必须要创建一个对象,通过对象调用方法
public class Static {
public void method1(){
System.out.println("年龄");
}
Static sc=new Static();
sc.method1;
}
2.类的加载与执行
类在什么时候加载:
main方法在哪个类中执行时,那么这个类一定加载。
public class Static {
public static void main(String[] args) {
}
}
在创建某个对象时
new Static();
//Static sc=new Static;
调用类中的静态方法时
public static void method2(){
System.out.println("年龄"+age);
}
Static sc=new Static;
sc.method2;
3.代码块
类似一个没有名字的方法
3.1静态代码块:
会在类加载中(类加载可在2.类的加载与执行中可见)执行
特点:
只加载一次
多个静态的代码块,按先后顺序执行
public class DaiMaKuai {
static {
System.out.println("静态代码块1");
}
static {
System.out.println("静态代码块2");
}
public static void main(String[] args) {
new DaiMaKuai();
}
}
//输出结果为:静态代码块1
静态代码块2
3.2实例代码块:
在创建对象时执行
特点:每创建一个对象,执行一次
public class DaiMaKuai {
public DaiMaKuai(){
System.out.println("构造方法");
}
{
System.out.println("实例代码块");
}
public static void main(String[] args) {
new DaiMaKuai();
new DaiMaKuai();
}
}
//输出结果为:
实例代码块
构造方法
实例代码块
构造方法
加载与执行顺序为:
静态代码块优先于实例代码块优先于构造方法
public class DaiMaKuai {
public DaiMaKuai(){
System.out.println("构造方法");
}
{
System.out.println("实例代码块");
}
static {
System.out.println("静态代码块1");
}
static {
System.out.println("静态代码块2");
}
public static void main(String[] args) {
new DaiMaKuai();
new DaiMaKuai();
}
}
//输出结果为:
静态代码块1
静态代码块2
实例代码块
构造方法
实例代码块
构造方法