一、静态性
属于类,不属于对象的方法或数据
二、用法(只能出现在成员级别)
可以用来修饰 类、方法、变量、代码块、静态导包
1、修饰变量:static变量
1、可以修饰属性、方法、内部类、代码块
2、使用:访问权限 static 方法变量=初始化值;
private static String str1 = "ly";
3、特点:被两个对象可共享,在内存中有一个副本,尚且仅当在类初次加载时会被初始化
4、若有多个static变量,被定义时有序依次初始化
2、修饰方法:静态方法
方法分为普通方法和静态方法,普通方法对象调,静态方法类来调
1、不依赖任何对象就可以访问
2、静态方法设有this
3、静态方法中不能访问非静态成员方法和非静态变量
4、非静态可以访问静态
**静态方法调用:**
类名.静态方法名();
Myclass.println();
3、修饰代码块:static 代码块–优化程序性能
1、可以置于类的任何地方
2、类中可以有多个static块
3、在类的初次加载时,会按static块的顺序依次执行,static块只执行一次
4、static修饰内部类
1普通类是不允许声明为静态的,只有内部类才可以
2被static修饰的内部类可以直接作为一个普通类来使用,而不需实例一个外部类
静态内部类
public class Outer {
public static class Inner{
Inner(){
System.out.println(“静态内部类”);
}
}
}
public class TestStatic {
// 不需要new一个对象
new Outer.Inner();
}
}
三、总结
1、方便在没有对象的情况下进行调用
2、static方法不可以调用非静态方法可调用静态
3、static方法就是没有this的方法
四、总的一句话:和类的对象解绑
1、修饰代码块 在类的加载之前没有对象
2、修饰变量
如果不用static修饰,属性放在--对象
如果用static修饰,属性放在--类
3、修饰方法
如果不用static修饰方法
运行时期:在方法调用时,调用栈,参数中会有一个隐式的引用--this,指向方法的调用对象
如果用static修饰方法,不能直接使用属性和方法
运行期间:在方法调用时,调用栈,参数中没有这个隐式的引用
**注:**
1、static关键字无法改变成员的访问权限
2、static程序块,jvm会优先加载静态块中的代码,主要用于系统初始化
3、jvm存储:
一个static变量jvm会将其分配在内存堆上,所有程序对它的引用都会指向一个地址而不会重新分配内存
五、问题:
一、什么时候用静态方法or非静态方法
1、通讯录类:(和对象有关系)使用非静态方法
操作:根据姓名电话
Main直接调用的时候,一般用静态
二、为什么main方法是static?
在Java程序运行时,是没有实例化任何对象的,只能通过调用类方法来运行main方法,所以会用static来修饰