static关键字的概述及特点什么是静态? 静态有什么特点?
如果一个成员使用static关键字,那么这个成员就不再属于对象了,而是属于类,会给所有该类的对象共享,在内存中只有一个
如果一个成员没用static关键字,那么这个成员是属于对象的,每一个对象都会有一个自己的这个成员
总结:
1. 静态指的就是Java中的关键字static, static是一个修饰符
问题:static可以修饰什么?
成员: ● 成员变量
● 成员方法
2. ● 这个静态成员被该类所有的[对象]所[共享]
● 优先于对象存在,随着类的加载而加载
● 多了一种调用方式,可以根据 类名. 进行调用
看一段代码:
class Student {
//因为同一个学校的学生类,school属性是相同的,所以用静态修饰,省内存
String name;
int age ;
static String school;
}
方法区分为静态区和非静态区,静态的成员变量只要字节码一加载就有初始化值,非静态成员变量只有创建对象时才初始化
创建对象后,非静态成员变量进堆,初始化. 静态成员变量就待在方法区中.
思路:什么时候使用静态成员变量呢?
静态成员变量可以通过创建对象调用,也可以通过类名直接访问(建议)
类名.变量名
共性(共享)的属性使用静态,特性使用非静态
例如饮水机:静态 (非共享) 水杯:非静态 (非共享)
什么时候使用静态修饰成员方法呢?
如果static修饰成员方法,同样表示这个方法不再属于对象了,而是属于类
静态方法可以通过对象调用,也可以通过类名调用(推荐) 如果调用同一个类的静态方法可以省略类名
工具类: 定义了一个类,类中存在一些提供服务的方法 为了让这些方法的调用更加简便,一般都会将方法定义为静态的 如果一个类中所有的方法都是静态的,往往会多做一步操作,即私有构造方法 目的是不让其他类访问构造方法创建对象我既然已经让你可以通过 类名. 调用了,你就别创建对象了
工具类该类提供了一些服务的方法,这种类单独存在没有价值,完全是给其他类提供服务的
类名.
例如: ArrayUtils.getMax(arr);
Arrays.toString(arr);
static方法的访问特点及注意事项静态方法:
1.可以调用静态的成员变量,成员方法
2.不能调用非静态的成员变量,成员方法
3.只能在静态方法中调用静态的成员
总结:静态只能访问静态非静态方法(什么都可以访问)
1.可以调用静态的成员,也可以调用非静态的成员
重点: 静态中没有super和this关键字
因为this和super只有创建对象之后才存在,静态则是随着类的加载而加载,在使用静态的时候,有可能对象还没有被创建
静态代码块
典型用途: 用来一次性的对静态成员变量进行赋值.
格式:
static {
方法体
}
当第一次用到本类时,代码块执行唯一的一次,第二次使用的时候就不在执行了 静态内容总是优先于非静态,所以静态代码块比构造方法优先执行