Java中static关键字概述

时间:2021-11-22 16:52:40

例如一个学生类中,我们需要统计下学生类中学生对象的数量,此时数量要定义为静态变量;

示例代码:

package com.java1995;

public class Student {

int id=0;
static int num=0;

Student(int id){
this.id=id;
num++;
}

public static void main(String[] args){
Student s1=new Student(1);
Student s2=new Student(2);
Student s3=new Student(3);
Student s4=new Student(4);
Student s5=new Student(5);
Student s6=new Student(6);
System.out.println("Num:"+Student.num);

}

}

输出结果:6

 

1.静态 变量

    静态变量属于类的,和对象没有关系;

    费静态变量属于某个对象的,每个对象都有 该数据的副本,

    而静态变量只有一个

    访问静态变量是通过(类名.变量名)来访问的

 

示例代码:

package com.java1995;

public class Test {

int commonint=0;
static int staticint=0;
Test(int x){
this.commonint=x;

}
public static void main(String[] args){

Test t1=new Test(1);
Test t2=new Test(2);
System.out.println("t1.commoint:"+t1.commonint);
System.out.println("t2.commoint:"+t2.commonint);

t1.staticint=1;
//静态变量在整个类中是唯一的,对象t1改变静态变量,该类中的静态变量同时进行改变,对其他的对象也有影响
System.out.println("t1.staticint:"+t1.staticint);
System.out.println("t2.staticint:"+t2.staticint);

}

}

 

2.静态方法

    用static 修饰的方法称为静态方法

    访问静态方法是通过(类名.方法名)来访问

 

示例代码:

package com.java1995;

public class StaticMethod {
public static void main(String[] args){

//类名.方法名进行访问
MyMethod.printInt(111111);
MyMethod.printString("Hello world");
}

}
class MyMethod{

static void printString(String args){
System.out.println(args);
}
static void printInt(int i){
System.out.println(i);
}
}

 

 

              (1)静态方法不能访问非静态变量

              (2)费静态方法可以访问静态变量

           PS:静态属性或者方法在类加载的时候产生的

              非静态属性或者方法是在new的时候产生的

测试代码:

package com.java1995;

public class Domo {

static int x=0;//定义一个静态变量x,赋初值为0

static{
x=100;//创建一个静态语句块,对x进行赋值
}

//创建一个构造器,输出x
Domo(){
System.out.println(x);

}
public static void main(String[] args){
new Domo();
}

}

 

运行结果:100,

说明程序先调用的语句块,static{x=100},而不是直接调用的构造器

即,先有静态属性,再有非静态属性

 

3.静态常量

    public static final int  x=1;