- static关键字
- static关键字是什么
- static关键字的特殊性
- static关键字的用途
- static静态方法和static静态成员变量
- static代码块
在《Java编程思想》说: “static方法就是没有this的方法。在static方法内部不能调用非静态方法,反过来是可以的。而且可以在没有创建任何对象的前提下,仅仅通过类本身来调用static方法。这实际上正是static方法的主要用途。”。
static关键字的特殊性- static修饰的成员方法和成员变量会在类被加载的时候就被初始化,而且只加载一次,从属于类。而普通的方法和成员变量从属于对象
- static修饰的静态元素可以通过直接 类名.静态元素 来使用
- static修饰的静态元素不可以使用this,super关键字
static可以用来修饰类的成员方法、类的成员变量,还可以编写static代码块来优化程序性能 。
static静态方法和static静态成员变量static方法一般称作静态方法
代码案例:
public class TestStatic { //静态成员变量 private static String nameStatic = "静态成员变量"; //非静态成员变量 private String name = "非静态成员变量"; public void test1(){ test2();//可以正常调用,非静态方法可以调用静态方法 System.out.println(nameStatic);//正常访问,在非静态方法中可以访问静态成员变量 System.out.println(name); //正常访问 System.out.println("非静态方法"); } public static void test2(){ //test1(); //调用test1报错,静态方法中不能调用非静态方法 //System.out.println(name);//访问name会报错,在静态方法中不能使用非静态成员变量 System.out.println(nameStatic); System.out.println("静态方法"); } public static void main(String[] args) { TestStatic.test2();//可以通过类名直接访问静态方法 //TestStatic.test1();//报错,不可以直接访问非静态方法。非静态方法需要new对象访问,非静态成员变量也是同理。 new TestStatic().test1(); } }
由上面的代码可以看出,如果想在不创建对象的情况下调用某个方法,就可以将这个方法设置为static。最常见的静态方法就是main方法。
static代码块- static代码块可以置于类的任何地方,类可以有多个static代码块
- 在类初次被加载的时候,会按照static块的顺序来执行每个static块,并且只会执行一次
- 静态代码块执行优先级高于非静态的初始化块
static代码块的作用是可以优化程序性能,因为static代码块只会在类加载的时候执行一次,看以下代码:
public class Person { private String name; public Person(String name) { this.name = name; } //自我介绍 public void introduce(){ String start = "hello,我是";//介绍的开头语 System.out.println(start + this.name); } }
introduce是用来自我介绍当前人的,但是每次调用都会定义一个start,分配一个内存空间给start,这样就造成了空间浪费。那我们可不可以只初始化一次start了,这个时候我们就可以用到static代码块来优化性能了:
public class Person { private String name; private static String start; //static静态代码块在类初次被加载的时候调用,并且只初始化一次 static { start = "hello,我是";//介绍的开头语 } public Person(String name) { this.name = name; } //自我介绍 public void introduce(){ System.out.println(start + this.name); } }
因此,很多时候会将一些只需要进行一次的初始化 *** 作都放在static代码块中进行
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)