[工学]jaa程序设计

上传人:tia****nde 文档编号:71165414 上传时间:2019-01-19 格式:PPT 页数:140 大小:1.77MB
返回 下载 相关 举报
[工学]jaa程序设计_第1页
第1页 / 共140页
[工学]jaa程序设计_第2页
第2页 / 共140页
[工学]jaa程序设计_第3页
第3页 / 共140页
[工学]jaa程序设计_第4页
第4页 / 共140页
[工学]jaa程序设计_第5页
第5页 / 共140页
点击查看更多>>
资源描述

《[工学]jaa程序设计》由会员分享,可在线阅读,更多相关《[工学]jaa程序设计(140页珍藏版)》请在金锄头文库上搜索。

1、Java语言程序设计,第三章 类与对象,final class Trangle double sideA,sideB,sideC; void setSide(double a,double b,double c) sideA=a; sideB=b; sideC=c; double getSideA( ) return sideA; double getSideB( ) return sideB; double getSideC( ) return sideC; boolean isOrNotTrangle( ) if ( sideA+sideBsideC ,类修 饰符,类声明,成员变量,成员函

2、数,类声明 类名须遵守的原则 符合标识符规定 若使用拉丁字母,首字母大写 若由几个单词复合而成, 每个单词的首字母大写 类修饰符 public 该类可以被任何其它类使用 abstract 该类是抽象类(包含抽象方法) abstract不能和final叠用修饰类 不能有private成员变量和方法 final 该类不能被继承 缺省(友好类) 该类仅可被同一包中的类使用 static 内部类才允许声明为静态类,静态内部类 可直接作为一个普通类来使用,而不需实例一个外部类,class OuterCls public static class InnerCls InnerCls( ) System.o

3、ut.println(“this is inner class!“); public class InnerStatic public static void main(String args) OuterCls.InnerCls ic=new OuterCls.InnerCls( ); ,类声明(续) 说明继承的父类 class 类名 extends 父类名 所有类都是Object的直接或间接子类 说明实现的接口 class 类名 implements interface1,interface2,; 多个类可共享相同的接口 一个类可实现多个接口,类的成员变量,实例变量与类变量 实例变量 在对

4、象创建时分配内存空间,对象的空间回收时释放内存空间 对于每个对象都有不同的存储空间 只能通过对象名访问 类变量 static 类被加载到内存时为类变量分配存储空间,程序退出运行释放空间 该类的所有对象共享类变量 可通过类名或对象名访问,实例变量与类变量(续) 静态初始化器 static 初始化语句; 与构造函数的区别 构造函数是对每个新创建的对象初始化,而静态初始化器是对类自身的静态域进行初始化。 构造函数是在用new运算符产生新对象时由系统自动执行,而静态初始化器则是在它所属的类加载到内存时由系统调用执行。 静态初始化器不是方法,没有方法名、返回值和参数列表且仅执行一次。 不能出现非静态域或

5、调用非静态方法,class Point static int numberOfPoints ; int x; int y; int serialNumber; static numberOfPoints = 0; public Point(int newX, int newY) x = newX; y = newY; numberOfPoints+; serialNumber = numberOfPoints; void printStates() System.out.println(“x=“+x+“, y=“+y + “, 序号:“ + serialNumber); ,import jav

6、a.io.*; class PointDemo public static void main (String args) Point p1 = new Point(23, 94); p1.printStates(); System.out.println (“现在一共有“ + Point.numberOfPoints + “个点“); Point p2 = new Point(34,67); p2.printStates(); System.out.println(“现在一 共有“ + Point.numberOfPoints +“个点“); ,x=23, y=94, 序号:1 现在一共有1

7、个点 x=34, y=67, 序号:2 现在一共有2个点,0,1,2,1,2,成员变量的非访问控制符 static 静态域 final 最终域 (常量) 需说明常量的数据类型且必须初始化且仅一次 初始化必须在定义处或构造函数中 其值一经初始化就不可改变(对于对象和数组来说是引用不可改变) 由于所有类对象的常量成员,其数值都固定一 致,为了节省空间,常量通常声明为static volatile 易失域 在被几个并发线程共享时,可被几个线程控制和修改 transient 暂时域 当一个对象被串行化的时候,transient型变量的值不包括在串行化的表示中,示例1,示例,转向,public fina

8、l class FinallyTest private final int public FinallyTest() public FinallyTest(int para) public static void main(String args) FinallyTest ft=new FinallyTest( ); System.out.println(ft.params); ,this(5);,params=5;,params=para;,params;,params=5;,this.setParams(para);,public void setParams(int p) params=

9、p; ,不能调用函数进行初始化,无初始化,返回,在当前的Java内存模型下,线程可以把变量保存在本地内存(比如机器的寄存器)中,而不是直接在主存中进行读写。 容易造成共享变量的不一致性。 volatile指示JVM,这个变量是不稳定的,不能保存它的私有拷贝,而应直接与主存中的共享成员变量交互。 volatile强迫重读和回写 当要访问的共享变量已在synchronized代码块中, 或者为常量时,不必使用,共享变量,主存,6,线程1,线程2,寄存器,寄存器,6,8,8,共享变量,主存,6,线程1,线程2,6,8,8,volatile,8,8,public class TestRaceCondi

10、tion private volatile int i = 1; public void increase( ) i+; public int getValue() return i; ,共享变量,volatile,1,2,3,4,通过同步机制或硬件 原语CAS来解决!,返回,public class LoggingInfo implements java.io.Serializable private Date loggingDate = new Date(); private String uid; private transient String pwd; LoggingInfo(Str

11、ing user, String password) uid = user; pwd = password; public String toString( ) String password=null; if (pwd = null) password = “NOT SET“; else password = pwd; return “logon info: n “ + “user: “ + uid + “n logging date : “ + loggingDate.toString( ) + “n password: “ + password; ,public class B6 pub

12、lic static void main ( String args ) LoggingInfo logInfo = new LoggingInfo (“MIKE“, “MECHANICS“); System.out.println(logInfo.toString( ); try ObjectOutputStream o = new ObjectOutputStream( new FileOutputStream(“logInfo.out“); o.writeObject(logInfo); o.close( ); catch(Exception e) /deal with exceptio

13、n,try ObjectInputStream in =new ObjectInputStream( new FileInputStream(“logInfo.out“); LoggingInfo logInfo1 = (LoggingInfo)in.readObject( ); System.out.println(logInfo1.toString( ); catch(Exception e) /deal with exception ,logInfo,write,在方法中使用final型参数 可防止在方法中对形参的修改影响到实参 方法的内部类在用到方法中的形参时,此形参也必须声明为fin

14、al才可使用,public class INClass void innerClass(final String str) class IClass IClass() System.out.println(str); IClass ic=new IClass(); public static void main(String args) INClass inc=new INClass(); inc.innerClass(“Hello“); ,示例,类的成员方法,成员方法的非访问控制符 抽象方法 abstract 仅有方法声明而无方法实现 使所有子类对外具有一个统一的接口 所有抽象方法必须存在于

15、抽象类中 abstract不能与private、final、static叠用修饰方法 静态方法 static 实例方法属于对象,在不同对象空间中占用不同的空间;静态方法属于类,在类第一次被调用时被装载入内存,为类对象所共享,类方法在类的字节码被加载到内存时就分配了入口地址,而实例方法是为类创建对象后才被分配入口地址 子类不能重写父类的静态方法,但在子类中可以声明与父类静态方法相同的方法 仅能操纵类变量,不能操纵实例变量 仅能调用类方法,不能调用实例方法 可以使用类名调用静态方法,运行 结果,成员方法的非访问控制符(续) 最终方法 final 当前类的子类不能覆盖此方法,从而防止子类修改父类的关键方法 所有private方法和包含在final类中的方法都默认为是最终方法 定义为final、static、private的方法都可以得到运行时效率的优化 inline机制可使final方法被调用时直接将方法主体插入调用处 final方法可访问本类的非final成员和方法,final method.final Data not final data changed! Override Method!,本地方法 native 无方

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号