static
注意:static关键字可以用修饰代码块.static代码块可以置于类中的任何一个位置,并可以有多个static代码块。在类初次被加载时,会按照静态代码块的顺序来执行,并且只会执行一次。
static修饰函数/变量时,其实是全局函数/变量,它只是因为java强调对象的要
挂,它与任何类都没有关系。靠这个类的好处就是这个类的成员函数调用static方法不用带类名。
修饰成员变量
- static关键字可以修饰成员变量,它所修饰的成员变量不属于对象的数据结构,而是属于类的变量,通常通过类名来引用static成员。
- 当创建对象后,成员变量是存储在堆中的,而static成员变量和类的信息一起存储在方法区, 而不是在堆中,一个类的static成员变量只有“一份”(存储在方法区),无论该类创建了多少对象。
public class StaticDemo {
public static void main(String[] args) {
People p1 = new People(18);
People p2 = new People(19);
People p3 = new People(20);
}
}
class People{
private int age;
private static int num;
public People(int age) {
this.age = age;
System.out.print(++num);
}
}
static修饰方法
- static修饰的方法不需要针对某些对象进行操作,其运行结果仅仅与参数有关,调用的话直接用类名就可以调用了。因此static方法中不能对非static成员进行访问,static方法的作用在于提供一些工具方法(如Arrays.sort)和工厂方法(有兴趣可以了解静态工厂模式)等。
static块
- 属于类的代码块,在类加载期间执行并且只执行一次,可以用来加载静态资源。(如图片、音频和视频等文件)。
final
final修饰变量
- final意为不可改变,修饰成员变量时可以在生命时初始化或者在构造函数中初始化,修饰局部变量时在使用之前初始化。要是企图改变final修饰等变量值则会编译错误!
final修饰方法
- final修饰等方法不能被重写。
final修饰类
- final修饰等类不能被继承,jdk中的一些基本类库被定义成final,例如String,Math,Integer等,这样可以防止对系统造成危害。
static final
- static final修饰的成员变量被成为常量,必须声明时初始化并且不可被改变,static final常量在编译期间会被取代为其初始值。
网友评论