Java中的static
通常来说,当我们创建一个类的时候,就是在描述那个类的属性和行为。我们可以new一个对象才能对属性和方法进行调用,执行new来创建对象,内存空间才会分配存储空间,其方法才供外界调用。
但是有两种情况上面无法处理:1.只想为特定区域分配空间,不去考虑对象的创建。2.一些属性和方法不和对象关联,即使没有对象,也能调用这个方法。
通过static可以满足这两方面要求。static声明的结构总是随着类的加载而加载,且在内存的方法区的静态域中是单独一份的存在,即多个对象的调用或改动static属性的话,其实是同一个内容。
一、关键字static
1.在Java类中,可用static修饰属性、方法、代码块、内部类
2.被修饰后的成员具备以下特点:
随着类的加载而加载
优先于对象存在
修饰的成员,被所有对象所共享
访问权限允许时,可不创建对象,直接被类调用
二、类变量
由该类的所有实例共享
public class Person {
private int id;
public static int total = 0;
public Person() {
total++;
id = total;
}
}
三、类方法
没有对象的实例时,可以用 类名. 方法名()的形式访问由static修饰的类方法。
在static 方法内部只能访问类的 的static 修饰的属性或方法, 不能访问类的非 非static 的结构。
class Person {
private int id;
private static int total = 0;
public static int getTotalPerson() {
//id++; //非法
return total;}
public Person() {
total++;
id = total;
}}
public class PersonTest {
public static void main(String[] args) {
System.out.println("Number of total is " + Person.getTotalPerson());
//没有创建对象也可以访问静态方法
Person p1 = new Person();
System.out.println( "Number of total is "+ Person.getTotalPerson());
}}
四、静态代码块
static 代码块化可以对类的属性、类的声明进行初始化操作,不可以对非静态的属性初始化。
静态代码块的执行要先于非静态代码块。
class Person {
public static int total;
static {
total = 100;// 为total 赋初值
}
}
static应用-单例模式
所谓类的单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类 只能存在一个对象实例
class Bank{
private static Bank b1 = new Bank();
private Bank() {
}
public static Bank instance() {
return b1;
}
}