网站首页 > java教程 正文
static关键字修饰的成员就是类成员,其中有类变量Field、类方法、静态初始化块。static修饰的类成员属于整个类,不属于单个实例。
6.3.1 理解类成员
在Java类里只能包含Field、方法、构造器、初始化块、内部类(接口、枚举)5种成员,其中static可以修饰Field、方法、初始化块、内部类。用static修饰的成员就是类成员。类成员属于整个类,而不是属于单个对象。
类Field既可以通过类来访问,也可以通过类的对象来访问。但是通过类的对象来访问类Field时,实际上访问的并不是该对象所拥有的Field,而是类所拥有的Field。可以理解为:当通过对象来访问类Field时,系统会在底层转换为通过该类来访问类Field。
举例1:
public class Test {
public static int a = 1;
public void run(){
a++;
System.out.println(a);
}
public static void main(String[] args) {
Test t1 = new Test();
t1.run(); //
Test t2 = new Test();
t2.run(); //
}
}
类方法也是类成员的一种,类方法属于类的,通常直接使用类作为调用者来调用类方法,但是可以使用对象来调用类方法,与类Field类似。
静态初始化块也是类成员的一种,静态初始化块用于执行类的初始化动作,在类的初始化阶段,系统会调用该类的静态初始化块来对类进行初始化。一旦该类初始化结束后,静态初始化块将永远不会获得执行的机会。
对于static关键字而言,有一条非常重要的规则:类成员不能访问实例成员。因为类成员是属于类的,类成员的作用域比实例成员更大,完全可能出现类成员已经初始化完成,但实例成员还不曾初始化的情况。如果允许类成员访问实例成员将会引发大量的错误。
6.3.2 单例类
在Java中,类的构造器默认为public的权限,允许任何类自由的创建该类的对象。但是在某些情况下一些类自由的创建该类的实例对象没有任何意义,比如说:一个系统的窗口管理器、一个数据库引擎访问点,此时如果在系统中为这些类创建多个对象就没有太大的实际意义。
所以在这种情况下,可以设计一个类只能创建一个实例,则这个类被称为单例类。
创建单例类的步骤:
1、 使用private关键字修饰构造器
2、 提供一个public的static的类方法调用构造器
3、 创建一个static的成员变量来保存类对象,同时判断对象是否已经创建
举例1:
package com.langsin.test;
public class Singleton {
private Singleton(){
}
private static Singleton single = null;
public static Singleton getInstance(){
if(single==null){
single = new Singleton();
}
return single;
}
public static void main(String[] args) {
Singleton s1 = Singleton.getInstance();
Singleton s2 = Singleton.getInstance();
System.out.println(s1==s2);
}
}
猜你喜欢
- 2025-03-24 面试题之Java内存模型(java内存模型happens before)
- 2025-03-24 Java连接Zookeeper以及书写简单增删改查的方法
- 2025-03-24 面试必备!Java核心技术面试100题(java核心面试精讲)
- 2025-03-24 Java虚拟机的类加载机制剖析(java虚拟机类加载器)
- 2025-03-24 java常见异常机制(java的异常处理机制的简单原理和应用)
- 2025-03-24 全网首发!马士兵内部共享—1658页《Java面试突击核心讲》
- 2025-03-24 JAVA知识体系,初学者java入门必备知识基础,及学习体系
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)