【JavaSE】Java基础语法(十四):Static |
您所在的位置:网站首页 › 类方法可以通过类名直接调用 › 【JavaSE】Java基础语法(十四):Static |
文章目录
概述
特点与应用
注意事项
为什么一个静态方法中只能访问用static修饰的成员?
\ 概述\ Java中的static是一个修饰符(也可称关键字),可以用于修饰变量、方法和代码块。 \ 特点与应用static修饰的成员具有以下特点: 被类的所有对象共享 是我们判断是否使用静态关键字的条件 随着类的加载而加载,优先于对象存在 对象需要类被加载后,才能创建 可以通过类名调用 也可以通过对象名调用 静态变量(是类级别的变量):不属于任何实例对象,而是属于整个类,在内存中只有一份拷贝。被static修饰的变量也称为类变量或者静态变量。可以通过“类名.静态变量”的方式访问。 静态方法(是类级别的函数):不依赖于任何实例对象,使用时直接通过“类名.静态方法”的方式调用即可。静态方法只能访问其他静态成员(包括静态变量和静态方法),并且不能访问非静态的实例成员(如对象属性)。 静态代码块(用于初始化静态变量):在类加载时执行,且仅会执行一次。常用于初始化静态变量。 static修饰符的作用: 实现数据共享:因为静态变量是类级别的,所以它们可以被所有对象共享。 方便访问:通过“类名.静态成员”的方式访问比创建对象再访问更加简单方便。 类工具:静态方法通常用于创建工具类或者实现算法,因为它们不依赖于对象状态。 初始化操作:静态代码块在类加载时执行,常用于初始化静态变量和执行静态方法。\ 注意事项 静态方法只能访问静态的成员 非静态方法可以访问静态的成员,也可以访问非静态的成员 静态方法中是没有this关键字静态成员(包括静态变量和静态方法)可以直接访问类级别的数据,但不能访问实例级别的数据。原因是两者的生命周期不同,实例化对象时才能为其分配内存空间;而静态成员在类加载时就已经被生成,此时还没有对象建立。 静态成员只随所属类的变量和方法调用而加载,而非随着类的实例化而加载。 静态成员存放在类加载的静态存储区,在程序运行结束时回收。 在多线程环境下,由于静态成员共享,可能会发生并发问题,需要进行适当的并发控制处理。 \ 为什么一个静态方法中只能访问用static修饰的成员?1、静态数据成员在定义或说明时前面加关键字static。 2、静态成员初始化与一般数据成员初始化不同。 这表明: (1) 初始化在类体外进行,而前面不加static,以免与一般静态变量或对象相混淆。 (2) 初始化时不加该成员的访问权限控制符private,public等。 (3) 初始化时使用作用域运算符来标明它所属类,因此,静态数据成员是类的成员,而不是对象的成员。 3、静态数据成员是静态存储的,它是静态生存期,必须对它进行初始化。 4、引用静态数据成员时,采用如下格式: 程序最终都将在内存中执行,变量只有在内存中占有一席之地时才能被访问。因为静态是针对类的,而成员变量为对象所有。静态成员函数不属于任何一个类对象,没有this指针,而非静态成员必须随类对象的产生而产生,所以静态成员函数”看不见”非静态成员,自然也就不能访问了类的静态成员(变量和方法)属于类本身,在类加载的时候就会分配内存,可以通过类名直接去访问;非静态成员(变量和方法)属于类的对象,所以只有在类的对象产生(创建类的实例)时才会分配内存,然后通过类的对象(实例)去访问。 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |