当我们写方法或者声明变量的时候,有什么就会用到static关键字,但是static什么意思呢?代表什么呢?
1.static首先是静态的意思,当它修饰方法或者变量的时候,就表示这个方法或者变量就是静态的,
(1)静态的方法和变量是属于类的而不是对象的,换句话说,静态方法和变量可以直接用类名"点"出来,如果不是静态方法就得先new一个对象再调用其方法或者变量。
(2)静态方法只能访问静态成员,而实例方法中可以访问静态成员和实例成员
(3)静态方法中不能用this关键字,应为与实例有关
2.static还可以修饰代码块,
(1)静态代码块不写在方法里,可以写在类中的任意位置,
(2)jvm在加载类时会首先执行静态的代码块,且只执行一次,如果有多个,按照从上往下执行
(3)静态代码块里的变量都是局部变量,只在当前静态代码块里有效
(4)静态代码块里只能访问类的静态成员,而不能访问实例成员
下面看用static修饰方法的例子:
首先我先写一个简单的方法类,里面的方法和变量用static修饰
package com.fys.dao;然后写一个测试类:
public class MethodClass {
/*
* 声明一个静态变量a,并赋值。
* */
public static int a = 1;
/*
* 写一个静态方法add,里面就写一个输出语句
*
*/
public static void add(){
System.out.println("执行了‘static’修饰的add方法");
}
}
package com.fys.dao;下面请看执行结果:
public class TestClass {
/**
* @author fanfanfys
*/
public static void main(String[] args) {
/*
* 调用MethodClass类中a变量
* */
System.out.println("MethodClass类中a变量对的值为:" + MethodClass.a);
/*
* 调用MethodClass类中add方法
* */
MethodClass.add();
}
}
例子2:静态代码块
这个例子就是上面的测试类,只不过我在main方法上方写了一个静态代码块
package com.fys.dao;大家都知道,main也是静态的,但不是代码块,所以还是先执行的静态代码块,请看执行结果:
public class TestClass {
/**
* @author fanfanfys
*/
/*
* 写一个静态代码块
* */
static{
System.out.println("先执行了静态代码块");
}
public static void main(String[] args) {
/*
* 调用MethodClass类中a变量
* */
System.out.println("MethodClass类中a变量对的值为:" + MethodClass.a);
/*
* 调用MethodClass类中add方法
* */
MethodClass.add();
}
}