为什么有静态static?
由于在一些场合中一个类的多个实例要共享一个成员变量;有时候要定义 “常量”,但是java中没有提供常量;
有时候想定义一些不和具体对象相关联的方法,不需要每次都去new对象再去使用方法的时候,可以使用静态方法来定义。
案列1.通过类名.方法名去使用类中方法,不需要new一个新的对象。
- 主程序
public class main { //如果没有static静态方法 则必须要new这个对象才行 public static void main(String []args) { int []a=new int[5];// a[0]=1; a[1]=2; a[2]=3; int b; b=calc.sum(a); System.out.println("总和为"+b); } }
- 静态方法
public class calc {
public static int sum(int []a)
{
int s=0;
System.out.println("数组长度为"+a.length);
//注意数组是从0开始,也就是只需要遍历到4就可以了
for(int i=0;i<a.length-1;i++)
{
s=s+i;
System.out.println(s);
}
return s;
}
}
通过上述的方法可以直观的感受到static带来的便利。
接下来我将static删除
程序报错,所以必须使用静态类来标注这个方法才行
2.static变量是和共享的同一个内存空间,而非static的方法则是根据对象来隔离
3.static方法无法使用this这个关键字,这个是因为static就是一个类,不属于任何对象,所以this就不能表示任何对象了。
4.最后就是静态类的成员无法访问到非静态的成员,然而非静态类的成员可以访问静态类的成员
案列
这里有一个封装好的person,里面提供了非静态的方法getage,无法通过静态类cacl来进行调用访问。
5.静态类的代码块儿那些事儿
静态类的代码块在类的初始化的时候就被执行,但是只执行一次
静态代码块儿的执行顺序
父类–静态代码块
子类–静态代码块
父类–非静态代码块
父类–构造函数
子类–非静态代码块
子类–构造函数