Java静态方法与静态变量的定义与使用
静态变量属于类别类加载初始化所有示例共享静态方法只能访问静态成员不能重写静态内部类不使用外部类引用适合解耦静态代码块按书写顺序执行一次。必须使用静态变量static修饰属于类而不是实例静态变量在类加载时分配内存所有实例共享相同的数据。它不依赖于对象的创建即使没有 new 也可以通过任何例子类名.变量名直接访问。常见的错误是将其误用作成员变量例如在结构方法中static变量赋初值结果每次都是 new 覆盖前一次——这通常不是初衷而是逻辑漏洞。静态变量的初始化优先于包括静态代码块在内的任何实例。static {}也只执行一次在多线程环境下直接读写volatile或非同步静态变量可能导致可见性问题静态变量在序列化时不会保存反序列化后仍然是类加载时的值(或默认值)静态方法只能访问静态成员不能使用this或super静态方法可以在类加载时调用此时没有对象因此禁止在语言层面访问实例变量和调用实例方法也不允许使用this和super关键字。典型报错是non-static variable xxx cannot be referenced from a static context。这不是编译器“太死板”而是语义上的根本矛盾——你想在一个没有对象的上下文中访问特定对象的状态。如果需要在静态方法中操作实例数据则必须引用显式引入对象(如doSomething(MyClass obj)工具类如StringUtils、Objects静态方法被广泛使用因为它不依赖状态自然没有副作用静态方法不能被子类重写override但是可以隐藏hiding子类定义与签名静态方法相同调用取决于引用类型而不是实际类型静态内部类不持有外部类引用适用于解耦和性能敏感场景普通内部类隐式持有外部类实例引用而静态内部类没有引用因此不能依靠外部类实例独立创建也不能阻止外部类对象被引用 GC 回收。网上购物系统HTML静态版本网络趣味购物系统静态版支持网站一键静态生成采用动态进度条模式生成静态生成过程更加清晰。淘宝数据包的导入功能增加到商品管理中与淘宝数据同步更新采用领先的AJAXXML集成技术速度更快、更高效系统进行了大量的实用更新如优化核心算法、增加商品图片批量上传、谷歌地图浏览插入等。独特的静态生成算法技术可以随意控制静态生成过程从而大大减轻服务器的负担结合各种强大的SEO优化方法使这是一个容易被忽视的关键区别例如 Android 非静态内部类被误用作非静态内部类 Handler会导致 Activity 泄漏用静态内部类代替 WeakReference要安全得多。静态内部类可以直接访问外部类的静态成员但不能访问实例成员除非输入对象它可以声明其静态变量和静态方法普通内部类别不允许静态成员除常量外static final枚举的本质是静态内部语法糖每个例子都是这样的public static final字段静态代码块用于类初始化执行顺序严格遵循书写位置静态代码块static {}第一次主动使用在类(如第一次) new、当第一次调用静态方法和第一次访问静态字段时它只执行一次。它的执行时间比任何结构方法和实例代码块都早{}。多个静态代码块按源代码中出现的顺序执行并与静态变量初始化混合。例如public class Demo { static int a 1; static { System.out.println(block 1: a); // 输出 1 a 2; } static int b a; // 此时 a 已是 2 static { System.out.println(block 2: b); // 输出 2 } }一旦这种顺序依赖变得复杂就很容易出错。特别是当静态变量初始化依赖于未执行的静态代码块时它将获得默认值例如0、null而不是预期的结果。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2438569.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!