《Java与面向对象程序》-3.3 static关键字_第1页
《Java与面向对象程序》-3.3 static关键字_第2页
《Java与面向对象程序》-3.3 static关键字_第3页
《Java与面向对象程序》-3.3 static关键字_第4页
《Java与面向对象程序》-3.3 static关键字_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

学习目标掌握掌握static关键字的三种用法主要内容静态变量静态方法静态代码块单例模式static表示“静态的”,可以用来修饰类的成员变量、成员方法和代码块(1)静态变量:static修饰的成员变量,可以直接通过类名或对象引用来访问(2)静态方法:static修饰的成员方法,可以直接通过类名或对象引用来访问(3)静态代码块:static修饰的程序代码块,当Java虚拟机加载类时会被执行1.静态变量类的成员变量有两种:静态变量、非静态变量静态变量也称类变量,被static修饰在内存中占用一份备份,运行时Java虚拟机只为静态变量分配一次内存在加载类的过程中完成内存空间的分配,可以直接通过类名访问非静态变量也称实例变量,没有被static修饰在内存中有多份备份,每创建一个实例,就会为实例变量分配一次内存必须通过对象名访问1.静态成员变量请看程序对象p1、p2在内存中的状态如图所示classPerson{

staticStringcountry;//类变量,代表人的国籍 Stringname;//实例变量,代表人的姓名}publicclassTest{publicstaticvoidmain(String[]args){ Personp1=newPerson(); Personp2=newPerson();Person.country=“中国”; =“张三”; ="李四";}}1.静态成员变量关于静态变量,注意两点:静态成员变量可以通过类名访问,也可以通过对象名访问如,将“Person.country=”中国“;”改为:“p1.country="中国";”程序也不会出错由于静态成员变量属于类,通过“类名.变量名”形式来访问更能代表其意义static只能修饰成员变量,不能修饰局部变量。如下面的代码是非法的voidf(){

staticintx=10;//出错,static不可以修饰局部变量}2.静态方法被static修饰的方法称为静态方法和静态变量一样,访问静态方法不需要创建类的实例,可以直接通过类名来访问;若已创建了对象,也可通过对象引用来访问。请看下面的程序:classPerson{

staticStringcountry;//类变量,代表人的国籍 Stringname;//实例变量,代表人的姓名

staticvoidprintInfo(){//静态方法 System.out.println("Person类的国籍是:"+country); }}publicclassTest{ publicstaticvoidmain(String[]args){ Personp1=newPerson(); Person.country="中国";

Person.printInfo();//通过类名调用静态方法 p1.printInfo(); //通过对象引用调用静态方法 }2.静态方法关于静态方法,注意两点:静态方法中只能访问类中用static修饰的成员,如果访问了类的非静态成员,将出现错误静态方法不能以任何方式引用this和super关键字。静态方法可以通过类名直接调用,这时,可能还没有任何对象产生。所以,代表当前对象和父类对象的this和super都是不存在的。classPerson{stringname;

staticvoidprintInfo(){ System.out.println(name);//错误,静态方法中不能访问类的非静态成员}}3.静态代码块用一对大括号包围起来的若干行代码称为一个代码块.静态代码块是指用static关键字修饰的代码块,通常用来对类的静态成员变量进行初始化。如:classA{staticintid;//静态代码块static{ id=100;}}

注意:类的静态代码块中不可以访问类的非静态成员类被加载时,类的静态代码块会执行。由于类只加载一次,因此静态代码块只执行一次;非静态代码块在创建对象时会被多次执行3.静态代码块【例3-5】静态代码块、构造方法、非静态代码块的执行顺序程序的运行结果4.单例模式单例模式指在设计一个类时,保证在整个程序运行期间只存在一个该类的实例单例模式的三个特点:单例类只能有一个对象实例单例类必须自己创建自己的唯一实例单例类必须给所有其他对象提供这一实例一个单例模式的例子publicclassSingle{ //属性私有化

privatestaticSingleinstance=newSingle();//构造方法私有化

privateSingle(){}//静态工厂方法为其他使用者提供本类的唯一实例

publicstaticSinglegetInstance(){ returninstance; }}4.单例模式下面的程序段输出什么?将输出:创建的是同一个对象实例。Singles1=Single.getInstance();Singles2=Single.getInstance();if(s1.equals(s2)){ System.out.println("创建的是同一个对象实例"); }else{ System.out.println("不是同一个对象实例"); }本节介绍了Java中static关键字的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论