《《高级函数特性》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《高级函数特性》PPT课件.ppt(23页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、”如果十年前Sun没有做Java,人们便会写.Net程序,如果他们写.Net程序,他们就是为windows写程序,而不是为Sun的设备写程序”Scott McNealy(Sun首席执行官)第六课第六课高级函数特性高级函数特性”如果十年前Sun没有做Java,人们便会写.Net程序,如果他们写.Net程序,他们就是为windows写程序,而不是为Sun的设备写程序”Scott McNealy(Sun首席执行官)Java编译器根据什么来判断类中的两个方法为同一方法?方法重载需要满足什么条件?一个类如果没有定义构造方法则该类不能被实例化吗?一个类定义了带参数的构造方法之后还能调用默认的无参构造创建实
2、例吗?构造方法可以手动调用吗?构造方法中的this和实例方法中的this分别指代什么?Java中对象占用的内存空间可以被分配在Java栈上么?main方法可以被重载吗?回顾回顾”如果十年前Sun没有做Java,人们便会写.Net程序,如果他们写.Net程序,他们就是为windows写程序,而不是为Sun的设备写程序”Scott McNealy(Sun首席执行官)本课案例本课案例设计学生类(Student类),描述学生的姓名、年龄、身高在Student类中定义静态字段count,用于描述创建学生对象的数量的计数器在Student类中定义带姓名参数的构造方法,每创建一个学生对象则计数器增长1”如果
3、十年前Sun没有做Java,人们便会写.Net程序,如果他们写.Net程序,他们就是为windows写程序,而不是为Sun的设备写程序”Scott McNealy(Sun首席执行官)本章目标本章目标对象数组静态成员(静态属性、静态方法与静态块)使用package关键字定义包使用import关键字导入包”如果十年前Sun没有做Java,人们便会写.Net程序,如果他们写.Net程序,他们就是为windows写程序,而不是为Sun的设备写程序”Scott McNealy(Sun首席执行官)对象数组对象数组在Java中不但可以声明由原始数据组成的数组,还可以声明由对象组成的数组声明对象数组的方式如:
4、/假假设已已经定定义了一个了一个Student类/*声明由声明由5个个Student对象象组成的数成的数组*/Student stdAry=new Student5;”如果十年前Sun没有做Java,人们便会写.Net程序,如果他们写.Net程序,他们就是为windows写程序,而不是为Sun的设备写程序”Scott McNealy(Sun首席执行官)对象数组对象数组=引用数组引用数组错误的理解方式的理解方式学生学生对象的象的实例例学生学生对象的象的实例例学生学生对象的象的实例例学生学生对象的象的实例例学生学生对象的象的实例例01234堆堆栈stdAry堆堆栈stdAry正确的理解方式正确的理
5、解方式对象的引用象的引用01234对象的引用象的引用对象的引用象的引用对象的引用象的引用对象的引用象的引用”如果十年前Sun没有做Java,人们便会写.Net程序,如果他们写.Net程序,他们就是为windows写程序,而不是为Sun的设备写程序”Scott McNealy(Sun首席执行官)对象数组示例对象数组示例/*对象数象数组示例,假示例,假设已已经定定义了了Student类*/public static void main(String args)/*创建包含有建包含有5个个Student引用的数引用的数组*/Student stdAry=new Student5;/*逐一逐一为每个引
6、用每个引用创建建对象象实例例*/stdAry0=new Student(张三三,18);stdAry1=new Student(李四李四,20);stdAry2=new Student(王五王五,24);stdAry3=new Student(郑六六,21);stdAry4=new Student(田七田七,19);for(int i=0;i stdAry.length;i+)stdAryi.display();”如果十年前Sun没有做Java,人们便会写.Net程序,如果他们写.Net程序,他们就是为windows写程序,而不是为Sun的设备写程序”Scott McNealy(Sun首席执行
7、官)对象数组的存放形式对象数组的存放形式堆堆栈stdAry0123stdAry0stdAry1stdAry2stdAry3stdAry44张三三18李四李四20王五王五24郑六六21田七田七19”如果十年前Sun没有做Java,人们便会写.Net程序,如果他们写.Net程序,他们就是为windows写程序,而不是为Sun的设备写程序”Scott McNealy(Sun首席执行官)静态成员变量静态成员变量在成员变量前加static关键字,可以将其声明为静态成员变量如果类中成员变量被定义为静态,那么不论有多少个对象,静态成员变量只有一份内存拷贝,即所有对象共享该成员变量静态成员变量的作用域只在类内
8、部,但其生命周期却贯穿整个程序”如果十年前Sun没有做Java,人们便会写.Net程序,如果他们写.Net程序,他们就是为windows写程序,而不是为Sun的设备写程序”Scott McNealy(Sun首席执行官)静态成员变量示例静态成员变量示例class Dog public static int count=0;/静静态成成员变量量 public Dog()/构造方法构造方法 count+;public class Test public static void main(String args)(当前狗的数量是:当前狗的数量是:+Dog.count);Dog d1=new Dog()
9、;Dog d2=new Dog();(当前狗的数量是:当前狗的数量是:+Dog.count);”如果十年前Sun没有做Java,人们便会写.Net程序,如果他们写.Net程序,他们就是为windows写程序,而不是为Sun的设备写程序”Scott McNealy(Sun首席执行官)静态成员变量的注意事项静态成员变量的注意事项和程序同生命周期在没有实例化对象时,可以通过类名访问静态成员变量也可以通过对象访问静态成员变量,但不论使用的是哪个对象,访问到的都是同一个变量;静态成员变量在声明时最好初始化,如果不进行初始化,系统会默认初始化它。”如果十年前Sun没有做Java,人们便会写.Net程序,如
10、果他们写.Net程序,他们就是为windows写程序,而不是为Sun的设备写程序”Scott McNealy(Sun首席执行官)静态成员方法静态成员方法在成员方法前加static关键字,可以将其声明为静态成员方法静态成员方法只能对类的静态成员变量进行操作静态成员方法没有this引用在没有实例化对象时,可以通过类名访问静态成员方法。”如果十年前Sun没有做Java,人们便会写.Net程序,如果他们写.Net程序,他们就是为windows写程序,而不是为Sun的设备写程序”Scott McNealy(Sun首席执行官)静态成员方法示例静态成员方法示例class Dog private static
11、 int count=0;/静静态成成员变量量 public Dog()count+;/显示数量的方法,静示数量的方法,静态成成员方法方法 public static void displayCount()(当前狗的数量是:当前狗的数量是:+count);public class Test public static void main(String args)/没有没有实例化例化对象之前,直接通象之前,直接通过类名名调用静用静态成成员方法方法 Dog.displayCount();Dog d1=new Dog();Dog d2=new Dog();Dog.displayCount();”如果
12、十年前Sun没有做Java,人们便会写.Net程序,如果他们写.Net程序,他们就是为windows写程序,而不是为Sun的设备写程序”Scott McNealy(Sun首席执行官)静态成员小结静态成员小结静态成员包括静态成员变量和静态成员方法静态成员属于整个类而不是属于某个对象,它被该类的所有对象共享访问静态成员时一般通过类名访问,也可以通过对象访问静态成员也受访问权限的约束静态成员变量在使用之前应尽量初始化静态成员方法不能操作非静态成员静态成员方法没有this引用”如果十年前Sun没有做Java,人们便会写.Net程序,如果他们写.Net程序,他们就是为windows写程序,而不是为Sun
13、的设备写程序”Scott McNealy(Sun首席执行官)静态块静态块静态块是在类中使用static关键字标记的一个块,该块中的语句在类被初始化时将被执行一次(仅执行一次)在以下情况类将发生初始化:A、类是入口main类 B、使用new操作创建一个类的对象 C、使用类调用类中的静态成员(静态变量和静态方法)D、初始化一个类的子类 E、调用JavaAPI中特定的反射方法 ”如果十年前Sun没有做Java,人们便会写.Net程序,如果他们写.Net程序,他们就是为windows写程序,而不是为Sun的设备写程序”Scott McNealy(Sun首席执行官)静态块实例静态块实例class Dog
14、 public static String count=“这是静是静态变量量”;static(“这是静是静态块中的中的语句句”);public static void displayCount()(“这是静是静态方法方法);public class Test public static void main(String args)int count=Dog.count;/调用静态变量时首先执行静态块调用静态变量时首先执行静态块 Dog.displayCount();/调用静态方法时首先执行静态块调用静态方法时首先执行静态块 Dog d=new Dog();/创建创建Dog对象时首先执行静态块对
15、象时首先执行静态块 ”如果十年前Sun没有做Java,人们便会写.Net程序,如果他们写.Net程序,他们就是为windows写程序,而不是为Sun的设备写程序”Scott McNealy(Sun首席执行官)包包有时候,类和类的名称可能发生冲突;Java提供了把类名空间划分为更容易管理的块的机制,这就是包包允许将类组合成较小的单元,类似于文件夹有助于避免命名冲突,分属不同包的类即便名称相同也不会引起误会能在包与包之间对于类的访问权限提供更有力的约束”如果十年前Sun没有做Java,人们便会写.Net程序,如果他们写.Net程序,他们就是为windows写程序,而不是为Sun的设备写程序”Sco
16、tt McNealy(Sun首席执行官)使用使用package关键字打包关键字打包可以使用package关键字将源文件中的类定义在某个包中,语法是:package 包名;该语句必须是整个源文件的第一条语句包中还可以包含下一级子包,这与文件目录体系非常相似。/将本源文件中的所有将本源文件中的所有类打到打到mypkg包中包中package mypkg;class Student /定义学生类定义学生类 ”如果十年前Sun没有做Java,人们便会写.Net程序,如果他们写.Net程序,他们就是为windows写程序,而不是为Sun的设备写程序”Scott McNealy(Sun首席执行官)缺省包缺省
17、包如果省略了package语句,类将保存在一个缺省的没有名称的包中尽管缺省包很方便,但对于大型的程序,它是不恰当的请尽量为自己编写的类定义具体的包。”如果十年前Sun没有做Java,人们便会写.Net程序,如果他们写.Net程序,他们就是为windows写程序,而不是为Sun的设备写程序”Scott McNealy(Sun首席执行官)使用使用import关键字导入包关键字导入包如要使用到某个包中的类,就需要使用import关键字将包或类显式地包括到程序中,有如下两种情况一个程序中允许有多条import语句,导入多个包或多个类。/*导入入java包下的包下的io子包中的所有子包中的所有类*/im
18、port java.io.*;/*导入入mypkg包下的包下的Student类,但并不,但并不导入入该包包中的其它中的其它类*/import mypkg.Student;”如果十年前Sun没有做Java,人们便会写.Net程序,如果他们写.Net程序,他们就是为windows写程序,而不是为Sun的设备写程序”Scott McNealy(Sun首席执行官)总总 结结静态成员属于类而不是属于某个对象静态方法可以访问静态成员(静态属性和静态方法)、实例方法可以访问实例成员(实例属性和实例方法)和静态成员(静态属性和静态方法)静态块在类被初始化时执行一次且仅执行一次总是将自己定义的类打入到具体的包中
19、是良好的编程习惯可以使用import语句导入需要的包或类”如果十年前Sun没有做Java,人们便会写.Net程序,如果他们写.Net程序,他们就是为windows写程序,而不是为Sun的设备写程序”Scott McNealy(Sun首席执行官)作作 业业设计教师类(Teacher类),描述教师的姓名、年龄、身高在Teacher类中定义静态字段count,用于描述创建教师对象的数量的计数器在Teacher类中定义带姓名参数的构造方法,每创建一个教师对象则计数器增长1”如果十年前Sun没有做Java,人们便会写.Net程序,如果他们写.Net程序,他们就是为windows写程序,而不是为Sun的设备写程序”Scott McNealy(Sun首席执行官)