最近学习jsp才发现自己的java基础不够牢固,于是执笔对java重新来过,温习一下这个强大的面向对象的语言。
今天看到static关键字,感觉自己掌握的也不牢靠,于是查阅了很多的资料来写下这篇文章,一方面也是为java奋斗小生写的指示牌,另一方面也是为了巩固自己的知识。
static表面看起来就可以看出其的作用所在,那就是静态,在java里,可以用它进行三种形式的修饰。
1、修饰字段
2、修饰方法
3、修饰一个代码块
我们先来看第一个修饰字段
public class Temp {
public static int i = 0;
public static float f = 1.2f;
public static double d = 1.2;
public static boolean b = true;
}
这里把 int float double boolean类型的字段都修饰了一遍,当该类的class文件被加载的时候,这几个字段的内存就会被初始化,然而虽然它们在这个类中,却跟这个Temp类没有多大的千丝万缕的关系,他们是独立的,是一块静态内存,所谓静态,就是编译时已经被初始化了,所以他们比一般的变量要快。而访问它们的时候也是自然会很方便。
我们不必去创建这个类的对象,而是直接通过类名去访问即可。
例如:
public class Main {
public static void main(String[] args){
System.out.println(Temp.i);
System.out.println(Temp.f);
System.out.println(Temp.d);
System.out.println(Temp.b);
}
}
这样实际是没有语法问题的,因为它们是静态的。
下面来看一下用static关键字修饰的方法。这个和修饰字段的意义差不多,它也被一块独立的静态内存所储存着,也可以通过类名直接调用,或者我们可以称它为类方法
public static void func(){
System.out.println("hello world");
}
这样的话我们就可以在主函数中通过它的类名来调用了,这样的话是非常方便的,也很有利于解耦。
Temp.func();//hello wrold
第三种就是由一对大括号加上static关键字而修饰的静态代码块
static {
//
}
通常我们用它来初始化静态的变量和对象
public class Temp {
static String a = null;
static{
a = "haodawang";
}
}
我们在类中定义一个String类型的变量,并给他指明为null,而在static代码块中我们实现了对它的初始化,但是怎样调用这个static代码块呢?目前来说有两种方法。
1、调用在static代码块中初始化的变量
2、创建该类的实例
先来看第一种方式
public class Main {
public static void main(String[] args){
System.out.println(Temp.a);
}
}
我们这里直接打印了Temp.a,如果static代码块没有被执行,那么这里应该会是Null,但是通过打印我们会看到打印出来的是haodawang,这也是我们意料之中的事情,正如我们前面所说,被调用代码块内的变量时,整个代码块都会被执行,值得注意的是,不管怎么样,static代码块都会只执行一次,执行一次之后就再也不会被执行。
其实第二种大家也可以推断出来了,因为被加载了class文件,所以static代码块自然会被加载。这里我也不再去用代码给大家演示,大家可以自己写写试试吧。