static关键字
(1)可以修饰成员变量 :称为静态变量
public class Test4{
static int a=10;//静态变量
int b=20;//成员变量
public static void main(String [ ]args){
System.out.println(Test4.a); //静态变量的使用方式是使用 类名.静态变量名
//System.out.println(Test4.b);
Test4 t=new Test4();
System.out.println(t.b); //成员变量的使用方式只能是 对象名.成员变量名
}
}
静态变量与成员变量的区别
a)使用方式不同,静态变量的使用方式 类名.静态变量名
成员变量的使用方式 对象名.成员变量名
b)在内存中的位置不同: 静态变量存储到方法区中的静态区
成员变量存储到堆内存中的
c)进内存的时间不同 :静态的变量先进内存,在这个类第一次被使用时与类一起加载到内存
成员变量在调用构造方法创建对象时,才进内存
静态方法是不允许使用成员变量的:否则
(2)修饰成员方法:称为静态方法
静态方法也不允许调用成员方法
解决方案:
创建Test4的对象,使用对象名去调用show方法
注意事项:成员方法可以调用静态方法,因为后进内存的可以使用先进内存的方法
public class Test4{
static int a=10;//静态变量
int b=20;//成员变量
public void show(){
System.out.println("void show");
method();//可以 成员方法可以调用静态方法 (因为后进内存的可以使用先进内存)
}
public void fun(){
show();//完全可以
System.out.println("void fun()");
}
public static void method(){
System.out.println("static void method()");
}
public static void main(String [ ]args){
System.out.println(Test4.a); //静态变量的使用方式是使用 类名.静态变量名
//System.out.println(Test4.b);
Test4 t=new Test4();
System.out.println(t.b); //成员变量的使用方式只能是 对象名.成员变量名
t.show();
method();//可以,因为static可以直接调用static
}
}
静态的归类所有 ,可以被这个类的所有的对象所共享
成员的归对象所有,每个对象都会有自己独立的属性空间
(3)修饰代码块 :静态代码块
使用{}括起来的一段代码就称为代码块
代码块根据定认的位置可分为以下几类
a)普通代码块 :定义在方法里,语句块里
b)构造代码块:定义在类中,方法外 (在创建对象时执行,而且优先于构造方法先执行,每创建一个对象,构造代码块都将执行一次)
c)静态代码块:构造代码块前加static
d)同步代码块 (多线程的时候讲解)
public class Test5{
//构造方法
public Test5(){
System.out.println("Test5的构造方法");
}
//构造代码块
{
System.out.println("构造代码块----------");
}
// 静态代码块
static{
System.out.println("-----------静态代码块------");
}
public static void main(String [ ]args){
//普通代码块 可以限定变量的作用域
{
int a=10;
System.out.println("a="+a);
}
//System.out.println("a="+a);
Test5 t=new Test5();//对象名叫t
new Test5();//匿名对象
new Test5();
}
}
构造代码块和普通代码块了解就行
通常我们使用的最多的是静态代码块和同步代码块
静态代码块的作用:是为了给类的静态属性进行初始化的
(4)static可以修饰类:称为静态内部类