版权声明:欢迎交流,转载请注明出处。 https://blog.csdn.net/u013034226/article/details/45250741
我们知道,创建对象就是为了产生实例,并进行数据的封装;而调用功能时,却没有用到这些对象中封装的数据,那该对象的创建还有意义吗?(虽然可以编译运行,但是在堆内存中空间比较浪费)。
解决办法就是:不建议创建对象,Java中是通过使用static关键字,这是一个成员修饰符,被静态static修饰的方法除了可以被对象调用外,还可以被类名调用。
静态方法:
举个例子:
class Person
{
private String name;
private int age;
Person(String name,int age)
{
this.name = name;
this.age = age;
}
public void speak()
{
System.out.println("name="+this.name+",age="+this.age);
sleep();
}
//定义一个睡觉功能。
public static void sleep()
{
System.out.println("睡觉zzzZZZZ");
}
}
class PersonDemo
{
public static void main(String[] args)
{
//Person p = new Person("lisi",20);
//p.speak();
//p.sleep();
Person.sleep();
}
}
所以,静态看上去很美,是不是所有的方法都静态呢?不行!定义功能时,如果功能不需要访问类中定义的成员变量(非静态)时,该功能需要静态修饰。
静态方法特点:
1,静态方法不能访问非静态成员,但是非静态可以访问静态成员。
说明:静态的弊端在于访问出现局限性,好处是可以被类名调用。
2,静态方法中不允许出现this,super关键字。
(为什么?)→原理:
1,静态是随着类的加载就加载了,也是随着类的消失而消失了。
2,静态优先于对象存在,被对象共享。
3,因为静态先存在于内存中无法访问后来的对象中的数据,所以静态无法访问非静态。
而且内部无法书写this,因为这时对象有可能不存在,this没有任何指向。
静态变量:
什么时候定义静态变量呢?
当该成员变量的值,每一个对象都一致时,就对该成员变量进行静态修饰。
举例(圆的面积):
class Circle
{
private double radius;//圆的半径。
private static double pi = 3.14;//每一个圆对象中都存储一份,有点浪费内存空间。实现对象的共享。加入静态关键字修饰。
Circle(double radius)
{
this.radius = radius;
}
//获取圆的面积。
double getArea()
{
return radius*radius*pi;
}
static void show()
{
System.out.println("circle show run.."+pi);
}
}
class CircleDemo
{
public static void main(String[] args)
{
Circle c = new Circle(3);
}
}
静态变量和成员变量的区别:
1,所属范围不同。静态变量所属于类,成员变量所属对象。
静态变量也称为:类变量;成员变量也称为实例变量。
2,调用不同。
静态变量可以被对象和类调用(一般都用类名调用)
成员变量只能被对象调用。
3,加载时期不同。
静态变量随着类的加载而加载。
成员变量随着对象的加载而加载。
4,内存存储区域不同。
静态变量存储在方法区中。
成员变量存储在堆内存中。
文章有不足之处,多多指出,共同进步。