static关键字
在定义类的时候,类中会有对象的属性或者行为,当描述行为的时候需要创建相应的对象才可以调用,如果这个行为(方法)中没有这个类特有的属性时,仅仅为了调用这个行为来创建对象显得有些多余,但是不创建对象又没有办法调用,这个时候java提供了关键字static。
//调用静态方法时的格式为 类名().静态方法
public class practice01 {
public static void main(String[] args) {
person.show2();
}
}
class person{
String name="DC";
int age=1;
void show1() {
System.out.println(this.name+" is "+this.age);
}
static void show2() {
System.out.println("我是静态");
}
}
所以,当类中所定义的功能不需要访问类中的成员变量时,可以用静态来修饰该功能。
静态方法的使用注意事项
1. 静态是随着类的加载就加载了。也是随着类的消失而消失了。
2. 静态优先于对象存在,被对象共享。
3. 因为静态先存在于内存中无法访问后来的对象的中的数据,所以静态无法访问非静
态。而且内部无法书写this。因为这时对象有可能不存在,this没有任何指向。
4. 静态方法不能访问非静态的成员。但是非静态可以访问静态成员的。
说明:静态的弊端在于访问出现局限性。好处是可以直接被类名调用。
5. 静态方法中不允许出现this,super关键字。
静态不仅可以修饰方法,同时静态也可以修饰成员变量
class Circle
{
//圆的半径
private double radius;
//圆周率,由于圆周率是固定值,因此所有对象共享这个数据
//没有必要每个对象中拥有这个数据,因此可以使用静态修饰
static double pi = 3.14;
public Circle(){
}
//带参数的构造函数
public Circle(double radius){
this.radius = radius;
}
//获取圆面积
double getArea(){
return radius * radius * pi;
}
}
class CircleDemo{
public static void main(String[] args){
System.out.println(new Circle(3).getArea());
}
}
如果pi这个变量没有被静态修饰的话,当创建Circle对象时,每个对象中都会有pi这个
变量,但是pi是个固定不变的值,没有必要每个对象中拥有,这时可以将这个变量静态修
饰,让所有对象共享就可以了。
静态变量和成员变量的区别
变量所属不同
静态变量所属与类,也称为类变量
成员变量所属于对象,也称为实例变量(实例变量)
内存中的位置
静态变量存储于方法区中的静态区中
成员变量存储于堆内存中
在内存中出现的时间
静态变量随着类的加载而加载,随着类的消失而消失
成员变量随着对象的创建而在堆内存中出现,随着对象的消失而消失
调用方式
静态变量可以用类直接调用,也可对象调用
成员变量只能被对象调用