Java程序设计 北京大学 6 第5讲深入理解Java语言 (6.9.1) week5讲义

  • 格式:pdf
  • 大小:3.78 MB
  • 文档页数:78

下载文档原格式

  / 78
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Java程序设计

第5章深入理解JAVA语言

第5章深入理解JAVA语言

Java程序设计

•本章介绍Java语言中的一些机制及细节。

•5.1变量及其传递

•5.2 多态和虚方法调用

•5.3 对象构造与初始化

•5.4 对象清除与垃圾回收

•5.5 内部类与匿名类

•5.6 Lambda表达式

•5.7 装箱、枚举、注解

•5.8 没有指针的Java语言

Java程序设计

变量及其传递••••••••••••••••••••••••••••••••••••••

基本类型变量与引用型变量

Java程序设计

•基本类型(primitive type):其值直接存于变量中。“在这里”

•引用型(reference type) 的变量除占据一定的内存空间外,它所引用的对象实体(由new 创建)也要占据一定空间。“在那里”

Java 程序设计

引用型变量与对象实体的关系day month

year

m

n

示例

Java程序设计

•示例:MyDate.java

•MyDate m,n;

•m=new MyDate();

•n=m;

•n.addYear();

字段变量与局部变量

Java程序设计

•字段变量(field)与局部变量(Local variable)

☐前者是在类中,后者是方法中定义的变量或方法的参变量

•从内存角度看

☐存储位置,字段变量为对象的一部分、存在于堆中的,局部变量是存在于栈中。

☐生命周期不同

☐初始值:字段变量可以自动赋初值,局部变量则须显式赋值

class Test()

{

int a;

void m(){

int b;

System.out.println(b);//编译不能通过需要//初始化。

两种变量的区别

Java程序设计

•从语法角度看

☐字段变量属于类,可以用public,private,static,final修饰。

☐局部变量不能够被访问控制符及static修饰

☐都可以被final修饰

•调用对象方法时,要传递参数。在传递参数时,

•Java 是值传递,即,是将表达式的值复制给形式参数。•对于引用型变量,传递的值是引用值,而不是复制对象实体 可以改变对象的属性

•TransByValue.java

•方法的返回:

☐返回基本类型。

☐返回引用类型。它就可以存取对象实体。•Object getNewObject()

•{

•Object obj=new Object();•return obj;

•}

•调用时:Object p= GetNewObject();

补充:不定长参数

Java程序设计

•不定长参数(Variable length arguments),从JDK1.5开始

•用省略号表示, 并且是最后一个参数

•实际上Java当成一个数组

•int sum( int… nums){

☐int s=0;

☐for(int n : nums) s+=n;

☐return s;

•}

•调用:sum(1,2,3,4);

•又例如:public static void main( String…argv)

Java程序设计

多态和虚方法调用••••••••••••••••••••••••••••••••••••••

多态

Java程序设计

•多态(Polymorphism)是指一个程序中相同的名字表示不同的含义的情况。•多态有两种情形

☐编译时多态:

•重载(overload) (多个同名的不同方法)。

•如p.sayHello(); p.sayHello(“Wang”);

☐运行时多态:

•覆盖(override)(子类对父类方法进行覆盖)

•动态绑定(dynamic binding)----虚方法调用(virtual method invoking)

•在调用方法时,程序会正确地调用子类对象的方法。

•多态的特点大大提高了程序的抽象程度和简洁性

上溯造型

Java程序设计

•上溯造型(upcasting)

是把派生类型当作基本类型处理

•Person p = new Student();

•void fun(Person p ){…} fun(new Person());

•TestVirtualInvoke.java

•用虚方法调用,可以实现运行时的多态!

☐子类重载了父类方法时,运行时

☐运行时系统根据调用该方法的实例的类型来决定选择哪个方法调用☐所有的非final方法都会自动地进行动态绑定!

•示例TestVirtualInvoke.java •void doStuff(Shape s){•s.draw();

•}

•Circle c = new Circle();•Triangle t = new Triangle();•Line l = new Line();•doStuff(c);

•doStuff(t);

•doStuff(l);