目录
一、static关键字背景
当我们编写一个类时,其实就是在描述其对象的属性和行为,而并没有产生实质上的对象,只有通过new关键字才会产生出对象,这时系统才会分配内存空间给对象,其方法才可以供外部调用。我们有时候希望无论是否产生了对象或无论产生了多少对象的情况下,某些特定的数据在内存空间里只有一份,例如所有的中国人都有个国家名称,每一个中国人都共享这个国家名称,不必在每一个中国人的实例对象中都单独分配一个用于代表国家名称的变量。为解决这一问题,我们引入了static关键字。
二、static使用范围
在Java类中,可用static修饰属性、方法、代码块、内部类
被修饰后的成员具备以下特点:
- 随着类的加载而加载
- 优先于对象存在
- 修饰的成员,被所有对象所共享
- 访问权限允许时,可不创建对象,直接被类调用
三、static修饰属性
被关键字static修饰的属性称为类属性(类变量),类属性作为该类各个对象之间共享的变量。在设计类时,分析哪些属性不因对象的不同而改变,将这些属性设置为类属性。
类属性格式:
权限修饰符 static type var = value;【type是java数据类型,var是变量名,value是变量值】
调用类属性格式:
- 类名.属性
- 对象.属性
public class StaticTest {
public static void main(String[] args) {
// 类变量直接通过类名.属性调用
System.out.println(Circle.radius);//2
// 所有对象共享类变量,一个对象更改了类变量,所有对象的类变量都需要更改
Circle c1=new Circle();
Circle c2=new Circle();
c1.radius=10;
System.out.println(c1.radius);//10
System.out.println(c1.radius);//10
}
}
class Circle{
// 类属性,不需要通过对象调用,直接通过类名调用
public static int radius=2;
public double findArea(){
return radius*3.14*radius;
}//求面积
}
四、static修饰方法
被关键字static修饰的方法称为类方法,如果方法与调用者无关,则这样的方法通常被声明为类方法,由于不需要创建对象就可以调用类方法,从而简化了方法的调用。
类方法格式:权限修饰符 static 返回值类型 方法名(参数列表){
程序代码;
}
调用类方法格式:
- 类名.方法
- 对象.方法
注意:
- 在static方法(类方法)内部只能访问类的static修饰的属性或方法,不能访问类的非static的结构。
- 因为不需要实例就可以访问static方法,因此static方法内部不能有this、super关键字
public class StaticTest {
public static void main(String[] args) {
Circle c1=new Circle();
// 类方法通过类名.方法名调用
System.out.println(Circle.findArea());//12.56
// 类方法通过对象.方法名调用
System.out.println(c1.findArea());//12.56
}
}
class Circle{
// 类属性,不需要通过对象调用,可直接通过类名调用
public static int radius=2;
// 类方法
public static double findArea(){
return radius*3.14*radius;
}//求面积
}
五、static修饰代码块、内部类
本部分将在后面介绍完代码块和内部类中提到。
下一篇:咸鱼带你学Java—单例模式