0013 Java学习笔记-面向对象-static、静态变量、静态方法、静态块、单例类
2016-11-15 09:24
267 查看
static可以修饰哪些成员
成员变量---可以修饰构造方法---不可以
方法---可以修饰
初始化块---可以修饰
内部类(包括接口、枚举)---可以修饰
总的来说:静态成员不能访问非静态成员
静态变量
static修饰的变量为静态变量在创建对象时,静态变量位于方法区中,而非像实例变量一样,位于堆内存中
一个类的所有对象共用相同静态变量,通过类名来调用静态变量,通过实例来调用虽然也符合语法,但不推荐
示例:静态变量的一个用法
class Employee{ private static int nextId=1; private int id; public void setId{ id=nextId; nextId++; } } Employee harry=new Employee(); harry.setId();
静态常量
静态变量上再加个final修饰,则为静态常量比如,Math类的的E和PI
public final class Math { private Math() {} public static final double E = 2.7182818284590452354; public static final double PI = 3.14159265358979323846; . . . }
一般不要把实例变量设计为public,而是再写个set和get方法,但final修饰的变量却没关系,可以设置为public
静态方法
static修饰方法静态方法不能操作对象,因而不能调用实例变量,只能访问到静态变量
静态方法相当于没有this隐式参数的传递
通过类名调用方法,比如:Math.pow(x,a);通过对象调用静态方法,是符合语法规则的,但是不推荐
即使某个类型的引用为null,但也可以调用静态方法
什么时候用静态方法:
一个方法不需要访问对象的状态,所需的参数都通过方法签名(显式参数)传入
一个方法只需要访问静态变量
静态方法示例:
java.lang.Math的所有方法都是静态方法
静态初始化块
静态块用于类的初始化,在类的初始化阶段执行类获得初始化之后,静态块将永远不会获得执行的机会
关于静态块、非静态块、构造方法的执行顺序,参见:0023 Java学习笔记-面向对象-初始化代码块
单例类
什么是单例类:这个类从始至终最多只能创建一个实例
何时用:
不允许自由创建该类对象,只允许创建一个对象的场景
比如:可能只能有一个窗口管理器;一个数据库引擎访问点
如何设计该类:
将该类的所有构造器用private修饰,外部就不能用构造器随意构造实例了
提供一个public方法作为访问点,用来创建那么一个实例,但要用static修饰,因为调用该方法之前还不存在对象,只能通过类名调用类方法
再创建一个static变量来保存这个唯一的实例
示例代码:
public class T1{ public static void main(String[] args) { Singleton s1=Singleton.getInstance(); Singleton s2=Singleton.getInstance(); System.out.println("s1和s2是否指向同一个对象: "+(s1==s2)); } } class Singleton{ private static Singleton instance; // 3. 用private static变量保存唯一的实例 private Singleton(){} //1. 用private修饰构造方法 public static Singleton getInstance(){ //2. 提供一个public static方法返回实例 if (instance==null){ instance=new Singleton(); //方法体保证最多只有一个实例 } return instance; } }
其他
非静态方法,相当于有显式和隐式两个参数显式参数:从方法签名中传入的
隐式参数:对象调用方法时,传入的this
相关文章推荐
- Java学习笔记——static关键字与静态的使用方法
- java===java基础学习(13)---this,static(静态变量和静态方法)的使用
- java学习笔记(四)----对象、数组作为参数传递,静态变量、静态方法的使用,内部类,使用文档注释
- 什么是静态(static)?什么是静态方法,静态变量,静态块和静态类?
- Java学习:静态方法,静态变量和静态代码块
- java 静态方法和静态变量 static
- Java学习笔记-问问题?-->静态方法
- java学习之旅36--面向对象_09_static变量和方法_内存分析static
- 什么是静态(static)?什么是静态方法,静态变量,静态块和静态类?
- 学习笔记 Java_毕向东_面向对象_静态_异常 2014.8.2
- CoreJava笔记之JavaBean、静态方法static和final
- java学习笔记4--java 静态方法和实例方法的区别
- Java学习笔记1:考虑用静态工厂方法代替构造器
- PHP学习笔记【15】--全局变量,静态变量,静态方法,php方法重载
- java 静态方法和静态变量 static
- 什么是静态(static)?什么是静态方法,静态变量,静态块和静态类?
- 什么是静态(static)?什么是静态方法,静态变量,静态块和静态类?
- Java学习笔记1------面向对象的思维方法
- Java学习笔记1:考虑用静态工厂方法代替构造器
- 面向对象三大特征之封装与static——(Java学习笔记四)