Java之static关键字的使用
1.static:静态的
2.static可以用来修饰方法、属性、代码块、内部类
3.使用static修饰属性称为静态变量
①类当中的属性(字段),按是否用static修饰,分为:静态属性(类变量) 和 非静态属性(实例变量/实例字段)
②实例变量:在一个class中定义的属性,我们称之为实例变量。实例变量的特点是,每个实例都有独立的属性,各个实例的同名属性互不影响。换句话说就是,我们去修改一个对象当中的属性,不会导致其他对象中该同样属性值的修改。看下面的例子:
public class StaticTest { public static void main(String[] args) { Person person1 = new Person(); Person person2 = new Person(); person1.age = 18; System.out.println(person2.age);//输出20 } //因为new出来的对象penson1、person2每一个对象都独立的拥有一套类中的字段(非静态属性) } class Person{ int age = 20; String name; }
③静态变量(类变量):我们创建类的多个对象,多个对象共享同一个静态变量,当通过某一个对象修改静态变量时,会导致其他对象调用该静态变量时,是修改过的。
public class StaticTest { public static void main(String[] args) { Person person1 = new Person(); Person person2 = new Person(); person1.name = "张三"; System.out.println(person1.name); person2.name = "李四"; //修改对象person2的静态变量值 System.out.println(person1.name);//输出“李四”,发现对象person1的静态变量值改变了
//因为静态变量只有一个共享“空间”,所有实例都会共享该静态变量。 } } class Person{ //实例变量 int age ; //静态变量 static String name; }
④static修饰属性的其他说明:
1.静态变量随着类的加载而加载,可以通过“类.静态变量”的方式地调用
2.静态变量的加载要早于对象的创建
3.由于类只会加载一次,则静态变量在内存中也只会存在一份,存在方法区的静态域中
4.可以通过类名去调用类变量,但是不能用类名去调用实例变量。可以通过对象去调用类变量和实例变量
⑤静态属性的举例:System.out Math.PI
4.使用static修饰方法,称为静态方法
①静态方法随着类的加载而加载
②可以通过“类.静态方法”的方式去调用
③可以通过类名去调用静态方法,但是不能通过类名去调用非静态方法。可以通过对象去调用静态方法和非静态方法
④静态方法中,只能调用静态方法或者静态变量。非静态方法中,既可以调用非静态方法或非静态变量,也可以调用静态方法或静态变量
public class StaticTest { public static void main(String[] args) { Person person1 = new Person(); Person person2 = new Person(); Person.show();//通过类名去调用静态方法 } } class Person{ //实例变量 int age ; //静态变量 static String name; //非静态方法 public void eat(){ age = 15; //调用非静态变量 sleep(); //调用非静态方法 name = "张三"; //调用静态变量 run(); //调用静态方法 }; //非静态方法 public void sleep(){System.out.println("人们平均每天睡觉8小时");} //静态方法 public static void show(){ run();//调用静态方法 System.out.println("名字是:"+name);//调用静态变量 //eat();不能调用非静态的方法 //System.out.println("年龄是:"+age);不能调用非静态的变量 System.out.println("我是一个中国人"); }; //静态方法 public static void run(){System.out.println("有的人不喜欢跑步"); } }
5.static注意点:在静态方法内,不能使用this关键字、super关键字
6.开发中,如何确定一个属性是否要声明为static的?
属性是可以被多个对象所共享的,不会随着对象的不同而不同!
7.开发中,如何确定一个方法是否要声明为static的?
调用静态变量的方法,通常会设置为static
工具类中的方法,习惯上声明为static。比如Math、Arrays、Collections

浙公网安备 33010602011771号