public class Phone { String brand; double price; void call(){ System.out.println("hi,how are you doing"); 案例 3-2 对象的创建及对象内存图 1 考核知识点对象的创建和引用 掌握创建对象的方式

Size: px
Start display at page:

Download "public class Phone { String brand; double price; void call(){ System.out.println("hi,how are you doing"); 案例 3-2 对象的创建及对象内存图 1 考核知识点对象的创建和引用 掌握创建对象的方式"

Transcription

1 第三章补充案例 案例 3-1 类的定义 1 考核知识点类的定义 掌握类定义的格式 掌握如何在类中定义成员变量和成员方法 3 需求分析在程序中, 设计一个表示学生的类, 该类具有以下属性和方法 : 该类具有表示姓名的属性 name 该类具有表示年龄的属性 age 该类具有表示说话行为的方法 speak, 并且用于输出学生的姓名和年龄 1) 使用 class 关键字定义一个表示学生类型的类, 类名为 Student 2) 在 Student 类中定义两个成员变量 name 和 age, 分别用来表示姓名和年龄 其中,name 的数 据类型为 String, 变量 age 的数据类型为 int 3) 在 Student 类中定义一个表示说话行为的 speak() 方法, 用于输出学生的姓名和年龄 class Student{ String name; int age; void speak() { System.out.println(" 我的名字是 "+name+", 今年 "+age+" 岁 "); 1 Java 语言严格区分大小写,class 和 Class 是不同的, 在定义类是只能使用 class 关键字 2 在例程中, 成员变量 name 是 String 类型,String 表示一个字符串, 后面的章节会详细讲解 3 思考一下: 自己定义一个手机 (Phone) 类, 在类中定义品牌 (brand) 和价格 (price) 属性, 定义打电话的 call() 方法, 代码如下所示 1

2 public class Phone { String brand; double price; void call(){ System.out.println("hi,how are you doing"); 案例 3-2 对象的创建及对象内存图 1 考核知识点对象的创建和引用 掌握创建对象的方式 了解对象在内存中的状态 3 需求分析根据定义的 Student 类, 创建一个学生对象, 该学生对象的姓名为张三, 年龄为 18, 然后调用 speak 方法输出所创建对象的姓名和年龄 1) 定义一个类 Example01 对象 2) 在 Example01 类的 main() 方法中, 使用 new 关键字创建一个学生对象, 并定义变量 s1 引用该 3) 为变量 s1 所引用的学生对象赋值, 其中,name 属性的值为张三,age 属性的值为 19. 4) 通过变量 s1 调用 speak 方法, 输出 s1 对象的姓名和年龄 定义 Example01 类, 其代码如下 : public class Example01 { public static void main(string [] args) { Student s1 = new Student(); s1.name=" 张三 "; s1.age=19; s1.speak(); 2

3 1 创建类的实例对象使用 new 关键字, 其格式为 : 类名变量名 = new 类名 () 2 在代码 Student s1 = new Student(); 中,new Student() 的作用是创建一个 Student 类的实例对象, 虚拟机会在内存中为这个对象开辟一块空间, 并给这块空间分配一个地址, = 的作用是将 Student 对象所占用内存空间的地址赋值给变量 s1, 这样 s1 便持有了 Student 对象的引用, 可以通过 s1 来访问该对象的成员并进行赋值 为了更加深刻地了解这句代码的含义, 下面通过一张内存图来演示, 具体如下所示 : Student s1 内存 ( 对象的地址 ) 0x3000 0x3000 new Student() name= 张三 age=19 speak() 案例 3-3 一个类创建多个对象 1 考核知识点对象的创建和引用 理解根据同一个类创建的不同实例对象, 各自拥有的成员变量和成员方法是独立的, 互不影 响的 3 需求分析根据定义的 Student 类, 在例程 3-2 的基础上, 创建第二个学生对象, 该学生对象的姓名为李四, 年龄为 20, 然后通过调用 speak 方法输出第二个学生对象的姓名和年龄 1) 在 Example 类中创建第二个 Student 对象, 并使用变量 s2 引用该对象 2) 为变量 s2 所引用的学生对象赋值, 其中,name 的值为李四,age 的值为 20 3) 通过变量 s2 调用 speak 方法, 输出 s2 对象的姓名和年龄 3

4 1 对案例 3-2 中的代码进行修改, 如下所示 : public class Example01 { public static void main(string [] args) { Student s1 = new Student(); s1.name=" 张三 "; s1.age=18; s1.speak(); Student s2 = new Student(); s1.name=" 李四 "; s1.age=20; s1.speak(); 一个类可以创建多个对象, 虚拟机会为每一个对象分配一块内存空间, 在各自独立的空间中, 每个对象都拥有各自独立成员变量和成员方法, 彼此互不影响 在上面的代码中, 创建了两个 Student 的实例对象, 由于每个对象拥有各自独立的属性, 因此在程序中使用 s2.name = " 李四 " 和 s2.age = 20 语句只是修改了第二个 Student 对象的属性, 对第一个 Student 对象的属性值没有任何影响 为了更加直观地了解代码的运行情况, 下面我们画出两个 Student 实例对象在内存中的状态图, 如下所示 : s1 s2 内存 new Student() name= 张三 age=19 speak() new Student() name= 李四 age=20 speak() 4

5 案例 3-4 不同变量引用同一个对象 1 考核知识点对象的引用 掌握使用两个或者多个变量引用同一个实例对象 3 需求分析在程序中, 一个对象可能在多处使用, 这样就可能需要有多个变量来引用这个对象 例如, 在案 例 3-2 的基础上, 创建第三个学生对象, 该对象使用变量 s3 引用, 请思考, 如果将 s2 对象赋值给 s3,s3 对象调用 speak() 方法后, 程序的运行结果是什么? 1) 在 Example01 类中创建第三个 Student 对象, 并使用变量 s3 引用该对象 2) 将 s2 的值赋给 s3, 然后使用 s3 调用 speak() 方法 1 对案例 3-3 中的代码进行修改, 如下所示 : public class Example01 { public static void main(string [] args) { Student s1 = new Student(); s1.name=" 张三 "; s1.age=18; s1.speak(); Student s2 = new Student(); s2.name=" 李四 "; s2.age=20; s2.speak(); Student s3 = new Student(); s3=s2; s3.speak(); 5

6 1 Student s3 = s2 这句代码的作用是将 s2 引用的内存地址赋值给 s3, 换句话说, 就是使变量 s3 和 s2 引用了同一个 Student 对象, 因此 s3.speak() 方法和 s2.speak() 方法打印的结果相同 为了更加深刻地了解这 句代码的含义, 下面通过一张内存图来演示, 具体如下所示 : s1 s2 s3 内存 new Student() name= 张三 age=19 speak() new Student() name= 李四 age=20 speak() 2 可以使用两个或者多个变量引用同一个实例对象, 只要通过其中一个变量对该对象的属性进行修 改, 使用其它引用变量访问时, 访问的都是修改后的属性 案例 3-5 垃圾对象 1 考核知识点垃圾对象 理解对象不被任何对象引用时, 就会变成垃圾对象 3 需求分析每个创建的对象都有自己的生命周期, 对象只有在有效的生命周期内被使用 请思考, 变量 s1 在指向 Student 对象和 null 两种情况下, 调用 speak() 方法有什么不同? 1) 定义测试类 Example02, 并在 main() 方法中创建一个 Student 对象, 该对象使用变量 s1 引用 2) 通过变量 s1 调用 speak() 方法 3) 将 s1 的值设置为 null 4) 再次通过 s1 调用 speak() 方法 6

7 定义 Example02 类, 代码如下所示 : public class Example02 { Student s1 = new Student(); s1.speak(); s1 = null; s1.speak(); 程序编译时发生了错误, 如下所示 : 1 null 是一种特殊的常量, 当一个变量的值为 null 时, 表示该变量不引用任何一个对象 因此, 当执 行完 s1 = null 语句后,s1 不再引用 Student 对象, 这时 Student 对象就变成了垃圾对象, 如果再次通过 s1 变量去调用它的 speak() 方法就会发生异常 上面程序的运行过程, 可以通过一张图例来表示, 如下所示 : Student s1 = new Student();... s1 = null;... s1 s1 null Student 对象 Student 对象 2 思考一下 : 如果有两个 Student 类型的变量 s2 和 s3 引用同一个 Student 对象, 这时如果把 s2 置为 null, 那么这个 Student 对象会变成垃圾对象吗? 下面通过一张图例对这种情况进行演示, 如下所示 : Student s2 = new Student(); s2 Student 对象 Student s3 = s2; s3 s2 Student 对象 s2 = null; s3 s2 null Student 对象 从图中可以看出, 当将变量 s2 置为 null 后, 变量 s3 仍然引用 Student 对象, 因此这个对象不会变成垃 7

8 圾对象 3 异常简单来说就是在程序执行过程中发生的错误, 空指针异常是异常的一种 在本案例中, 大家 不需要对异常进行深究, 后面的章节会进行详细地讲解 案例 3-6 垃圾回收机制 1 考核知识点垃圾回收机制 掌握垃圾回收机制的特点 掌握垃圾回收相关的方法 3 需求分析垃圾对象会占用一定的内存空间, 当垃圾对象积累到一定程度后,Java 虚拟机会自动进行垃圾回 收 但是, 如果希望程序可以及时通知 Java 虚拟机回收垃圾对象, 可以通过 System.gc() 方法强制启动垃圾 回收器回收垃圾 需要注意的是, 在调用 System.gc() 方法之前, 还会调用 finalize() 方法 请对 Student 类 进行修改, 编写一个测试类观察 System.gc() 和 finalize() 方法的执行情况 1) 对 Student 类进行修改, 该类中对 finalize() 方法进行重写 2) 编写测试类 Example02, 创建若干个 Student 对象, 然后调用 System.gc() 方法通知垃圾回收 期回收垃圾 3) 为了延长程序的执行时间, 可以编写一个简单的循环语句 1 对 Student 类进行修改, 代码如下所示 : class Student { public void finalize() { System.out.println(" 垃圾对象被回收了 "); 2 对 Example02 类进行修改, 代码如下所示 : public class Example02 { new Student(); new Student(); System.gc(); for (int i = 0; i < ; i++) { // 延长程序结束时间 8

9 1 从运行结果可以看到, 两个 Student 对象的 finalize() 方法都被调用了, 这表示两个对象作为垃圾被回收了 如果把 System.gc() 这行代码注释, 会发现命令行窗口不会打印任何内容, 这说明对象在变成垃圾后不会被立即回收, 同时也验证了 System.gc() 方法的作用 2 由于 System.gc() 方法只是通知 Java 虚拟机尽快进行垃圾回收, 这意味着垃圾回收器也可能不会马上运行, 因此, 在程序的最后使用了一个 for 循环来延长程序运行的时间, 从而确保能够看到垃圾对象被回收的过程 3 Student 类中定义的 finalize() 方法其签名必须是 public(protected) void finalize()[throw Throwable]{, 这样做的原因会涉及到后面的一些知识, 比如类的继承 Object 类 方法的重写 异常等等, 同学们在学完这些内容后就会明白其中的道理 案例 3-7 类的封装 1 考核知识点类的封装 了解为什么要对类进行封装 了解如何实现类的封装 3 需求分析在案例 3-2 中,s1 对象的年龄是可以随便赋值的, 如果将 age 的值赋值为 -30, 显然违背了事实 请根据需求, 对 Student 类进行修改, 通过封装来实现对年龄的限制 1) 编写测试类 Example03, 将属性 age 的值设为 -30, 演示不合理现象 2) 对 Student 类进行修改, 将 name 和 age 属性使用 private 修饰, 然后定义 getname() setname(string n) getage() 和 setage(int a) 四个对外访问 name 和 age 的方法 3) 在 setage(int a) 方法中对传入的参数进行检查, 如果输入值为负数, 则打印出 设置的年龄不 合法, 如果不为负数, 才将其设置为 age 属性的值 4) 对 Example03 类进行修改, 在 main() 方法中创建 Student 类的实例对象, 通过调用对象的 setname(string n) 和 setage(int a) 方法来设置的 name 属性和 age 属性值, 并调用 speak() 方法 9

10 1 定义 Example03 类, 代码如下所示 : public class Example03 { Student s1 = new Student(); s1.name = " 小新 "; s1.age = -30; s1.speak(); 从上图可以看出, 当将 age 的值设置为 -30 后, 程序不会报错, 但却违背了现实 2 对 Student 类进行封装, 其代码如下 : class Student { private String name = " 张三 "; private int age = 19; public String getname() { return name; public void setname(string n) { name = n; public int getage() { return age; public void setage(int a) { // 对传入的参数进行检查 if(a < 0){ System.out.println(" 设置的年龄不合法 "); else{ age = a; void speak() { System.out.println(" 我的名字是 " + name + ", 今年 " + age + " 岁 "); 10

11 3 对 Example03 类进行修改, 代码如下所示 : public class Example03 { Student s1 = new Student(); s1.setname(" 小新 "); s1.setage(-30); s1.speak(); 4 运行程序, 结果如下图所示 : 1 Student 的 name 和 age 属性使用 private 关键字修饰为私有后, 在 Example03 类中不能再使用 s1.name 和 s1.age 的方式访问这两个属性, 只能通过 public 类型的 setname(string n) 和 setage(int a) 方法进行访问 在上面的代码中, 调用 setage(int a) 方法时的传入参数为 -30, 由于参数小于 0, 会打印出 设置的年龄不合法, 并不会被将负数赋值给 age 属性 由此可见, 只要实现了封装就能对外界的访问进行控制, 避免对私有变量随意修改而引发问题 2 思考一下: 定义一个 Division 类 ( 除法 ), 类中定义两个 int 类型的私有成员变量 dividend( 被除数 ) 和 divisor( 除数 ), 默认值都为 1 定义四个公有方法 setdividend(int mdividend ) getdividend() setdivisor(int mdivisor) 和 getdivisor() 对这两个私有属性进行访问 在 setdivisor(int mdivisor) 方法中对传入的参数进行检查, 如果传入值为零则打印 除数不能为零, 如果不为零, 才将其设置为 divisor 属性的值 定义 Example04 类, 在类的 main() 方法中创建 Division 对象, 分别调用 setdividend(int mdividend) 和 setdivisor(int mdivisor) 方法给两个私有属性 dividend 和 divisor 赋值, 然后打印出 dividend/divisor 的结果 (1) 定义 Division 类, 代码如下所示 : public class Division { private int dividend = 1; private int divisor = 1; public void setdividend(int mdividend) { dividend = mdividend; public int getdividend() { return dividend; public void setdivisor(int mdivisor) { if (mdivisor == 0) { System.out.println(" 除数不能为零 "); else { divisor = mdivisor; 11

12 public int getdivisor() { return divisor; (2) 定义 Example04 类, 代码如下所示 : public class Example04 { Division division = new Division(); division.setdividend(10); division.setdivisor(0); int dividend = division.getdividend(); int divisor = division.getdivisor(); System.out.println(dividend / divisor); 从运行结果可以看出, 由于实现了 Division 类的封装, 在 setdivisor(int mdivision) 方法中对传入的除 数值进行检查, 从而避免了程序中出现除数为 0 的错误 案例 3-8 定义无参的构造方法 1 考核知识点构造方法的定义 掌握如何定义构造方法 掌握构造方法的执行情况 3 需求分析当通过 new 关键字创建对象的时候, 都会调用类的构造方法 请在 Student 类中定义一个无参的 构造方法, 编写一个测试类, 演示创建 Student 对象时, 构造方法的调用情况 1) 定义一个 Student 类, 并在类中定义一个无参的构造方法 2) 编写一个测试类 Example05, 在 main() 方法中创建一个对象 12

13 1 对 Student 类进行修改, 代码如下所示 : class Student { public Student() { System.out.println(" 构造方法被调用了 "); 2 定义 Example05 类, 代码如下所示 : public class Example05 { Student s1 = new Student(); 1 代码 new Student() 会创建一个 Student 的实例对象, 同时会调用构造方法 Student(), 因此程序打印 出了 构造方法被调用了 2 构造方法名的前面没有返回值类型的声明, 也不能有 void 关键字 案例 3-9 定义有参的构造方法 1 考核知识点构造方法的定义 掌握有参构造方法的定义方式 理解系统自动分配无参的构造方法 3 需求分析如果希望创建对象的时候, 可以为属性赋值, 可以定义有参的构造方法 请在 Student 类中定义 一个有参数的构造方法, 编写测试类 Example06, 并在创建 Student 对象时, 为对象的 age 属性赋值 1) 定义一个 Student 类, 并在类中定义一个有参数的构造方法, 该参数用于为 age 属性赋值 2) 编写一个测试类 Example06, 在 main() 方法中创建一个对象, 并为 age 属性赋值 13

14 1 对 Student 类进行修改, 代码如下所示 : class Student { int age; public Student(int mage) { age = mage; 2 定义 Example06 类, 代码如下所示 : public class Example06 { Student s1 = new Student(20); System.out.println("age 属性的值为 :"+s1.age); 1 从运行结果可以看出,new Student(20) 语句调用了有参的构造方法 Student(int mage), 动态地将 20 传递给了 age 属性 和普通方法一样, 构造方法中同样可以接收多个参数, 只要在使用 new 关键字创建对象时, 传入数量相同和类型一致的参数, 就可以自动地调用对应的构造方法 2 思考一下: 在 Example06 的 main() 方法中是否能够使用 new Student() 创建对象呢? 答案是否定的, 因为 new Student() 会调用无参的构造方法, 而本案例的 Student 类中并没有定义无参的构造方法 有些同学肯定会问, 案例 3-9 之前的 Student 类都没有定义无参的构造方法, 却能使用 new Student() 创建对象, 本案例为什么不行呢? 这是因为一个类中如果没有定义构造方法, 系统会默认为其分配一个方法体为空的无参构造方法, 而一旦定义了构造方法, 系统就不再提供默认的构造方法 本案例中由于我们定义了一个有参的构造方法, 所以系统不会默认分配无参的构造方法, 如果通过 new Student() 去调用无参的构造方法, 程序就会发生错误 案例 3-10 构造方法的重载 1 考核知识点构造方法的重载 14

15 掌握如何在类中定义重载的构造方法 3 需求分析和普通方法一样, 构造方法也可以重载 通过调用不同的构造方法, 可以为不同的属性进行赋值 请在 Student 类中定义三个重载的构造方法, 编写测试类 Example07, 通过创建对象的方式演示不同 构造方法的调用情况 1) 对 Student 类进行修改, 在类中定义三个重载的构造方法, 包括无参的构造方法, 接收一个 String 类型参数的构造方法, 接收 String 类型和 int 类型两个参数的构造方法 象 2) 编写测试类 Example07, 在 mian() 方法中, 分别使用三个重载的构造方法创建三个 Student 对 1 对 Student 类进行修改, 代码如下所示 : class Student { public Student() { System.out.println(" 无参的构造方法 "); public Student(String name) { System.out.println(" 一个参数的构造方法 "); public Student(String name, int age) { System.out.println(" 两个参数的构造方法 "); 2 定义 Example07 类, 代码如下所示 : public class Example07 { Student s1 = new Student(); Student s2 = new Student("Rose"); Student s3 = new Student("Rose", 23); 15

16 法 在一个类中可以定义多个重载的构造方法, 在创建对象时, 根据传入参数的不同会调用相应的构造方 案例 3-11 this 关键字访问类的成员 1 考核知识点 this 关键字访问类的成员 掌握使用 this 关键字访问类的成员 3 需求分析在定义的方法中, 难免会出现局部变量和成员变量重名的现象, 为了避免这种现象, 可以使用 this 关键字 例如, 在案例 3-7 定义的 setname(string n){name = n 方法中, 如果将参数 n 的名称修改为 name, 势必会造成参数名与成员变量名发生冲突 请对案例 3-7 中 Student 类进行修改, 使用 this 关键字将 setname() 方法中的成员变量和局部变量加以区分 1) 对 Student 类进行修改, 将 setname() 方法中的参数名改为 name, 使用 this.name=name 区分成 员变量和局部变量 2) 编写测试类 Example08, 在 main() 方法中创建 Student 对象, 并调用 setname() 方法和 getname() 测试程序 1 对 Student 类进行修改, 代码如下所示 : class Student { private String name; public void setname(string name) { this.name = name; public String getname() { return name; 2 定义 Example08 类, 代码如下所示 : public class Example08 { Student s1 = new Student(); s1.setname("lily"); 16

17 String name = s1.getname(); System.out.println(" 我的名字叫 " + name); 1 setname(string name) 方法中的参数名和成员变量相同, 为了区分两者, 在方法中使用了 this 关键字,this 可以理解为是调用这个方法的对象的引用, 因此 this.name 表示这个对象的成员变量 name 2 在 getname() 方法中, 使用 return 语句返回了一个 name 变量的值, 而在该方法中并没有定义名为 name 的局部变量, 因此, 返回的是成员变量 name, 即 this.name 由于在 getname() 方法中不存在同名的成员变量和局部变量的冲突,this 关键字是可以省略的 3 思考一下: 在一个方法中如何去访问其它的成员方法呢? 这和在方法中访问成员变量是一样的, 也可以使用 this 关键字 例如在 Student 类中定义两个方法 sleep() 和 snore(), 如果要在 sleep() 方法中访问 snore() 方法, 可以通过 this.snore() 的方式, 代码如下所示 : class Student { void sleep() { this.snore(); void snore() { Java 语言中, 由于在方法中不能再定义方法, 所以不会出现类似成员变量和局部变量冲突的问题, 因此在一个方法中访问其它成员方法,this 关键字都可以省略 案例 3-12 this 关键字访问构造方法 1 考核知识点 this 关键字访问构造方法 掌握如何在构造方法中使用 this 关键字访问重载的构造方法 3 需求分析如果一个类中定义了多个重载的构造方法, 为了避免在重载的构造方法中书写重复的代码, 可以 在一个构造方法中使用 this 关键字调用其它的构造方法 请在 Student 类中创建多个重载的构造方法, 编写一个测试类演示如何使用 this 关键字访问构造方法 17

18 1) 在 Student 类中创建多个重载的构造方法, 2) 在重载的构造方法中使用 this 关键字调用其它的构造方法 3) 编写测试类 Example09, 在 mian() 方法中, 调用其中的一个构造方法创建对象, 演示使用 this 关键字访问构造方法的执行顺序 1 对 Student 类进行修改, 代码如下所示 : class Student { public Student() { System.out.println(" 无参的构造方法 "); public Student(String name) { this(); System.out.println(" 一个参数的构造方法 "); public Student(String name, int age) { this(name); System.out.println(" 两个参数的构造方法 "); 2 定义 Example09 类, 代码如下所示 : public class Example09 { Student s1 = new Student("Jack", 22); 1 从运行结果可以看出, 三个构造方法都被调用了, 为了更加清楚地了解三个构造方法的执行顺序, 下面通过一张图例进行说明 : 18

19 new Student("Jack",23) Student() this() Student(String name) this(name) Student(String name,int age) 执行顺序 2 在构造方法中, 使用 this 调用重载构造方法的代码必须放在第一行, 否则程序不能编译通过, 这就限定了在一个构造方法中只能调用一次重载的构造方法 3 在构造方法中可以通过 this. 方法名 ([ 参数 ]) 的方式调用普通的成员方法, 但是在普通的成员方法中不能使用 this([ 参数 ]) 的方式来调用构造方法 案例 3-13 静态变量 1 考核知识点静态变量 了解静态变量的作用 掌握静态变量的定义和使用方式 3 需求分析当多个对象存储的数据相同时, 可以使用静态变量的方式存储 例如, 有一个 Student 类具有 name classname 属性, 请根据该类创建出三个 Student 对象, 并将这些对象的 classname 值都设置为 三年 级二班 1) 定义 Student 类, 并在类中定义 name 和 classname 属性 2) 编写测试类 Example10, 在 main() 方法中创建三个学生对象, 并分别为这些对象的 name 和 classname 属性赋值, 然后输出这些对象的 name 和 classname 值 3) 对 Student 类进行修改, 将 classname 定义为静态变量 4) 修改测试类, 在 main() 方法中使用 Student.className = 三年级二班 语句为静态变量 classname 进行赋值 然后输出这些对象的 name 和 classname 值 为了更好地理解 Student 类中静态变量 classname 和 Student 实例对象的关系, 下面通过一个图例 进行演示, 如下所示 : Student { classname 三年级二班 Student 实例对象 { name name name s1 s2 s3 19

20 1 定义 Student 类, 代码如下所示 : class Student{ String name; String classname; 2 定义 Example10 类, 代码如下所示 : public class Example10 { Student s1 = new Student(); s1.name = " 张三 "; s1.classname = " 三年级二班 "; Student s2 = new Student(); s2.name = " 李四 "; s2.classname = " 三年级二班 "; Student s3 = new Student(); s3.name = " 王五 "; s3.classname = " 三年级二班 "; System.out.println(" 我的名字是 " + s1.name + ", 来自 " + s1.classname); System.out.println(" 我的名字是 " + s2.name + ", 来自 " + s2.classname); System.out.println(" 我的名字是 " + s3.name + ", 来自 " + s3.classname); 3 对 Student 类进行修改, 代码如下所示 : class Student { String name; static String classname; 4 对 Example10 类进行修改, 代码如下所示 : public class Example10 { Student.className = " 三年级二班 "; Student s1 = new Student(); s1.name = " 张三 "; Student s2 = new Student(); 20

21 s2.name = " 李四 "; Student s3 = new Student(); s3.name = " 王五 "; System.out.println(" 我的名字是 " + s1.name + ", 来自 " + s1.classname); System.out.println(" 我的名字是 " + s2.name + ", 来自 " + s2.classname); System.out.println(" 我的名字是 " + s3.name + ", 来自 " + s3.classname); 1 本案例中, 三个 Student 对象的 classname 属性值均为 三年级二班, 对于这样的相同数据, 没有必要在每个对象中都开辟一块空间存储, 完全可以在内存中只用一块空间存储, 并使之被一个类的所有实例对象所共享 在 Java 中提供了一个 static 关键字, 使用 static 关键字修饰的成员变量称为静态变量, 静态变量能被该类所有实例对象共享 2 静态变量可以使用 类名. 静态方法名 的方式访问, 也可以通过 对象引用变量. 静态方法名 的方式访问, 例如本例中的静态变量 classname, 通过 Student.className 或者 s2.classname 这两种方式访问都是可以的, 不过更推荐使用前一种方式 3 思考一下: 定义一个 Person 类, 在类中定义两个 String 类型的成员变量 name 和 nationality( 国籍 ), 变量 nationality 使用 static 关键字修饰为静态变量, 其值为 中国 定义 StaticExample 类, 在类的 main() 方法中创建 Person 类的两个实例对象, 并打印出这两个对象的姓名和国籍 (1) 定义 Person 类, 代码如下所示 : class Person { String name; static String nationality = " 中国 "; (2) 定义 StaticExample 类, 代码如下所示 : public class StaticExample { Person lily = new Person(); lily.name = " 丽丽 "; Person lucy = new Person(); lucy.name = " 露西 "; System.out.println(lily.name + " 的国籍是 " + lily.nationality); System.out.println(lucy.name + " 的国籍是 " + lucy.nationality); 21

22 案例 3-14 静态方法的定义和调用 1 考核知识点静态方法 掌握静态方法的定义和使用 3 需求分析同静态变量类似, 静态方法的访问方式是 类名. 静态方法名 或 对象引用变量. 静态方法名 请对案例 3-13 进行修改, 在 Student 类中定义一个 sayhello() 的静态方法, 编写测试类, 演示如何调用 该方法 1) 对 Student 类进行修改, 在类中定义一个 sayhello() 方法, 该方法使用 static 关键字修饰 2) 编写测试类 Example11, 在 main() 方法中创建一个 Student 对象, 该对象使用变量 s1 引用, 分 别通过 Student.sayHello() 和 s1.sayhello() 的方式调用静态方法 sayhello, 观察程序的运行结果 1 对 Student 类进行修改, 代码如下所示 : class Student{ static void sayhello(){ System.out.println(" 马年大吉 "); 2 定义 Example11 类, 代码如下所示 : public class Example11 { Student s1 = new Student(); Student.sayHello(); s1.sayhello(); 22

23 和静态变量一样, 静态方法也推荐使用 类名. 静态方法名 的形式访问 案例 3-15 静态方法中访问类的成员 1 考核知识点静态方法 了解在静态方法中只能访问类的静态成员, 而不能访问非静态成员 3 需求分析在程序中经常需要方法间的互相访问, 对于静态方法之间 静态方法和非静态方法之间, 它们是 否能够互相调用呢? 请编写一个测试类, 在类中定义若干个静态方法和非静态方法, 通过方法之间的 相关调用, 演示静态方法和非静态方法的调用情况 (1) 设计原理 由于静态方法在没有创建对象时就可以通过类名直接访问, 而非静态方法只有通过对象或者对象 的引用变量访问, 因此在静态方法中不能访问非静态方法, 只能访问静态方法 而在非静态方法中, 既可以访问静态方法, 也可以访问非静态方法 (2) 设计思路 1) 定义 Example12 类, 在类中定义两个静态方法 staticmethod1() staticmethod2(), 两个非 静态方法 nonstaticmethod1() nonstaticmethod2() 2) 将 Example13 类中的四个方法进行交叉访问 1 定义 Example12 类, 在类中定义上述的四个方法和一个 main() 方法, 代码如下所示 : public class Example12 { static void staticmethod1() { System.out.println(" 静态方法 1"); static void staticmethod2() { System.out.println(" 静态方法 2"); 23

24 void nonstaticmethod1() { System.out.println(" 非静态方法 1"); void nonstaticmethod2() { System.out.println(" 非静态方法 2"); 2 对静态方法 staticmethod1() 进行修改, 在方法中访问静态方法 staticmethod2() 在 main() 方法中调用静态方法 staticmethod1(), 代码如下所示 : public class Example12 { static void staticmethod1() { System.out.println(" 静态方法 1"); staticmethod2(); Example12.staticMethod1(); 从运行结果可以看到, 程序正常执行, 这说明在静态方法中可以方法静态方法 3 对静态方法 staticmethod1() 进行修改, 在方法中访问非静态方法 nonstaticmethod1(), 代码如下所示 : public class Example12 { static void staticmethod1() { System.out.println(" 静态方法 1"); nonstaticmethod1(); Example12.staticMethod1(); 程序编译时发生了错误, 如下所示 : 24

25 从错误提示信息可以清楚地看到, 发生错误的原因是在静态方法中访问了非静态的方法 4 在 staticmethod1() 方法中注释发生错误的代码 nonstaticmethod1(), 并对非静态方法 nonstaticmethod1() 进行修改, 在方法中分别调用静态方法 statimethod1() 和非静态方法 nonstaticmethod2() 在 main() 方法中创建 Example12 的实例对象, 调用 nonstaticmethod1() 方法, 代码如下所示 : public class Example12 { static void staticmethod1() { System.out.println(" 静态方法 1"); // nonstaticmethod1(); void nonstaticmethod1() { System.out.println(" 非静态方法 1"); staticmethod1(); nonstaticmethod2(); Example12 e = new Example12(); e.nonstaticmethod1(); 从运行结果可以看到, 程序正常执行, 这说明在非静态方法中既可以方法静态方法, 也可以访问非静 态方法 1 在静态方法中只能访问静态方法, 在非静态方法中可以访问静态方法和非静态方法 2 思考一下: 在静态方法中是否能够访问静态变量和非静态变量? 其实和上面的讲解一样, 非静态变量只能通过对象或者对象的引用变量访问, 而静态方法在创建对象之前就可以通过类名直接访问, 因此在静态方法中不能访问非静态变量, 只能访问静态变量 25

26 案例 3-16 代码块 1 考核知识点代码块 理解代码块的不同分类 掌握不同代码块的作用及其执行时机 3 需求分析有时候, 需要将某一段关联紧密的或者实现了某一功能的代码封装的一个代码块中 请定义一个 包含了静态代码块, 局部代码和构造代码块的类, 演示不同代码之间的执行时机 (1) 设计原理 在 Java 中, 代码块一般来说可以分为三种, 局部代码块 构造代码块和静态代码块 定义在一个 方法内部的代码块称为局部代码块 ; 定义在方法外的代码块称为构造代码块 ; 使用 static 关键字修饰 的构造代码块称为静态代码块, 这三种代码块的作用和执行时机各不相同 (2) 设计思路 1) 定义 Example13 类, 在类中定义一个静态代码块 一个构造代码块 一个无参的构造方 法和一个成员方法 localblock(), 在 localblock() 方法中定义一个局部代码块 2) 创建 Example13 类的两个实例对象, 使用 Example13 类型的变量 e1 和 e2 引用, 并通过 变量 e1 和 e2 调用这两个对象的 localblock() 方法 定义 Example13 类, 代码如下所示 : public class Example13 { static { { System.out.println(" 静态代码块 "); System.out.println(" 构造代码块 "); public Example13() { System.out.println(" 构造方法 "); void localblock() { { System.out.println(" 局部代码块 "); 26

27 Example13 e = new Example13(); e.localblock(); 1 静态代码块在加载类的时候执行, 由于类只在第一次使用时被加载, 且只加载一次, 因此静态代码块只执行一次 从运行结果可以看到, 虽然创建了两个 Example13 的实例对象, 由于 Example13 类只会加载一次, 所以 静态代码块 只打印一次 在实际开发中, 经常有一些代码需要在类加载时就执行, 比如加载数据库驱动, 这些代码就应该放在静态代码块中 2 构造代码块在创建类的实例对象时执行, 也就是说每创建类的一个实例对象, 都会执行一次构造代码块 从运行结果可以看到, 构造代码块先于构造方法执行, 因此在实际开发中, 可以把重载构造方法中重复的代码抽取到构造代码块中执行 3 局部代码块定义在方法中, 它在方法被调用的时候执行 使用局部代码块是为了限制变量的生命周期, 使得变量在使用完毕后会被尽快回收, 从而节省内存空间, 前面学习的 if 语句 for 语句都使用了局部代码块 案例 3-17 单例设计模式 1 考核知识点单例设计模式 了解什么是单例设计模式 掌握单例设计模式的特点 掌握饿汉式单例设计模式的代码格式 3 需求分析在程序开发中, 经常需要保证类的实例对象只有一个, 这时, 可以将类设计为单例设计模式 请 编写一个实现了单例设计模式的类 1) 定义一个类 Singleton, 为了保证外界只创建一个该类的实例对象, 在类中定义一个私有的构 27

28 造方法 2) 在类中创建一个该类的实例对象, 并且定义一个静态变量 INSTANCE( 变量名随意 ) 引用此实例对象 3) 为了防止外界使用 Singleton.INSTANCE 的方式直接访问该实例对象, 将 INSTANCE 变量使用 private 关键字修饰为私有, 同时提供一个静态方法将这个实例对象返回 1 定义 Singleton 类, 在类中定义一个私有, 无参的构造方法, 代码如下 : public class Singleton { private Singleton() { 2 创建 Singleton 的一个实例对象, 定义一个私有的静态变量 INSTANCE 引用这个对象, 代码如下所示 : public class Singleton { private Singleton() { private static Singleton INSTANCE = new Singleton(); 3 定义一个静态方法 getinstance() 将实例对象返回, 代码如下 : public class Singleton { private Singleton() { private static Singleton INSTANCE = new Singleton(); public static Singleton getinstance() { return INSTANCE; 4 定义 Example14 类, 在类的 main() 方法中调用两次 getinstance() 方法, 获得两个 Singleton 的实例对象, 使用 == 比较这两个对象是否相等, 代码如下所示 : public class Example14 { Singleton s1 = Singleton.getInstance(); Singleton s2 = Singleton.getInstance(); System.out.println(s1 == s2); 从运行结果可以看到, 两个对象使用 == 比较的结果为 true, 说明两次获得的是同一个 Singleton 的实例对象 28

29 1 为了更加深刻的理解单例设计模式, 下面对单例设计模式的特点进行归纳 : 类中定义一个无参的构造方法, 并且声明为私有 在类的内部创建该类的一个实例对象, 使用私有的静态变量引用该实例对象 定义静态方法返回该实例对象 2 本案例中这种代码格式的单例设计模式被形象的称为饿汉式单例设计模式, 这是因为在程序中, 无 论是否需要该类的实例对象, 在类加载时都会创建一个实例对象 后面我们还会学习懒汉式单例设计模式, 懒汉式单例设计模式会在第一次需要时创建该类的实例对象 案例 3-18 静态内部类成员的定义和访问 1 考核知识点静态内部类 理解在静态内部类中可以定义静态成员和非静态成员 掌握访问静态内部类中静态成员和非静态成员的方式 3 需求分析静态内部类中可以定义静态成员和非静态成员, 这两者的访问方式有所不同 请设计一个静态内 部类, 编写测试类演示如何访问静态内部类中的静态成员和非静态成员 1) 定义外部类 Outer, 在 Outer 类中定义一个静态内部类 Inner 2) 在 Inner 中定义两个 String 类型变量, 一个静态变量 staticfield, 其值为 静态内部类的静态变 量, 一个非静态变量 nonstaticfield, 其值为 静态内部类的非静态变量 定义两个方法, 一个静态 方法 staticmethod(), 方法中打印 静态内部类的静态方法, 一个非静态方法 nonstaticmethod(), 方 法中打印 静态内部类的非静态方法 3) 定义 Example15 类, 在类的 main() 方法中调用 Inner 类中的变量和方法 1 定义外部类 Outer 和静态内部类 Inner, 代码如下所示 : class Outer { static class Inner { static String staticfield = " 静态内部类的静态变量 "; String nonstaticfield = " 静态内部类的非静态变量 "; static void staticmethd() { System.out.println(" 静态内部类的静态方法 "); 29

30 void nonstaticmethod() { System.out.println(" 静态内部类的非静态方法 "); 2 定义 Example15 类, 在类的 main() 方法中, 通过 外部类. 内部类. 静态成员 的方式访问静态变量 staticfield 和静态方法 staticmethod(), 代码如下所示 : public class Example15 { System.out.println(Outer.Inner.staticField); Outer.Inner.staticMethd(); 3 对 Example15 类进行修改, 在 main() 方法中创建静态内部类 Inner 的实例对象, 使用 Outer.Inner 类型的变量 inner 引用, 通过变量 inner 访问非静态变量 nonstaticfield 和非静态方法 nonstaticmethod(), 代码如下所示 : public class Example15 { Outer.Inner inner = new Outer.Inner(); System.out.println(inner.nonStaticField); inner.nonstaticmethod(); 静态内部类中可以定义静态成员和非静态成员, 如果要访问非静态成员, 必须通过静态内部类的对象 或者对象的引用变量 如果要访问静态成员, 则可以直接通过 外部类. 静态内部类. 静态成员 的方式, 不需要创建静态内部类的实例对象 30

31 案例 3-19 方法内部类访问局部变量 1 考核知识点方法内部类 掌握方法内部类中访问的局部变量需要使用 final 关键字修饰 3 需求分析在方法内部类中可以访问外部类的成员变量, 同样, 在方法内部类中也可以访问其所在方法中定 义的局部变量, 但是局部变量必须使用 final 关键字来修饰 请编写一个方法内部类, 演示如何在方法 内部类中访问局部变量 1) 定义 Example16 类, 在类中定义一个 test() 方法,test() 方法中定义一个 int 类型的局部变量 num, 其值为 5 2) 在 test() 方法中定义一个方法内部类 Inner, 在 Inner 类中定义一个 show() 方法, 方法中访问局 部变量 num 在 test() 方法中创建内部类 Inner 的实例对象, 调用其 show() 方法 3) 在 Example16 的 main() 方法中, 创建 Example16 的实例对象, 使用变量 e 引用该对象, 通过 变量 e 调用 test() 方法 1 定义 Example16 类, 代码如下所示 : public class Example16 { void test() { int num = 5; class Inner { void show() { System.out.println(" 局部变量 num 的值为 " + num); ; Inner inner = new Inner(); inner.show(); Example16 e = new Example16(); e.test(); 程序编译时发生错误, 如下所示 : 31

32 从错误提示信息可以看到, 发生错误的原因是方法内部类中访问的局部变量 num 没有被声明为最终类 型, 即没有使用 final 关键字修饰 对程序进行修改, 将局部变量 num 使用 final 关键字修饰, 再次 方法内部中访问的局部变量必须使用 final 关键字修饰, 否则程序在编译时会发生错误 32

教案模板4-2

教案模板4-2 传智播客 Java 基础入门 教学设计 课程名称 : Java 基础入门 授课年级 : 2014 年级 授课学期 : 2014 学年第一学期 教师姓名 : 某某老师 2014 年 02 月 09 日 课题名称第 3 章面向对象上 计划学时 6 课时 Java 是一种面向对象的语言, 认识面向对象的编程思想对于 Java 学习至关重 内容分析 要 在面向对象中, 有两个重要的概念, 分别是类和对象,

More information

Microsoft Word - word模板-教师.doc

Microsoft Word - word模板-教师.doc 传智播客 Java 基础入门 教学设计 课程名称 : Java 基础入门 授课年级 : 2014 年级 授课学期 : 2014 学年第一学期 教师姓名 : 某某老师 2014 年 02 月 09 日 课题名称内容分析教学目标及基本要求重点及措施难点及措施 计划第 3 章面向对象上 6 课时学时 Java 是一种面向对象的语言, 认识面向对象的编程思想对于 Java 学习至关重要 在面向对象中, 有两个重要的概念,

More information

OOP with Java 通知 Project 4: 4 月 18 日晚 9 点 关于抄袭 没有分数

OOP with Java 通知 Project 4: 4 月 18 日晚 9 点 关于抄袭 没有分数 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 4: 4 月 18 日晚 9 点 关于抄袭 没有分数 复习 类的复用 组合 (composition): has-a 关系 class MyType { public int i; public double d; public char c; public void set(double

More information

エスポラージュ株式会社 住所 : 東京都江東区大島 東急ドエルアルス大島 HP: ******************* * 关于 Java 测试试题 ******

エスポラージュ株式会社 住所 : 東京都江東区大島 東急ドエルアルス大島 HP:  ******************* * 关于 Java 测试试题 ****** ******************* * 关于 Java 测试试题 ******************* 問 1 运行下面的程序, 选出一个正确的运行结果 public class Sample { public static void main(string[] args) { int[] test = { 1, 2, 3, 4, 5 ; for(int i = 1 ; i System.out.print(test[i]);

More information

OOP with Java 通知 Project 4: 4 月 19 日晚 9 点

OOP with Java 通知 Project 4: 4 月 19 日晚 9 点 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 4: 4 月 19 日晚 9 点 复习 类的复用 组合 (composition): has-a 关系 class MyType { public int i; public double d; public char c; public void set(double x) { d

More information

Microsoft Word - 新1-12.doc

Microsoft Word - 新1-12.doc 实训 5 面向对象编程练习 实训 5 面向对象编程练习 5.1 实训目的 通过编程和上机实验理解 Java 语言是如何体现面向对象编程基本思想 以及如何创建类 和对象 了解成员变量和成员方法的特性 5.2 实训要求 编写一个体现面向对象思想的程序 编写一个创建对象和使用对象的方法的程序 5.3 实训内容 5.3.1 创建对象并使用对象 1 定义一个 Person 类 可以在应用程序中使用该类 成员属性

More information

OOP with Java 通知 Project 3 提交时间 3 月 29 日晚 9 点 Piazza Project 2 投票

OOP with Java 通知 Project 3 提交时间 3 月 29 日晚 9 点 Piazza Project 2 投票 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 3 提交时间 3 月 29 日晚 9 点 Piazza Project 2 投票 复习 创建对象 构造函数 函数重载 : 函数 = 函数名 + 参数列表 public class MyType { int i; double d; char c; void set(double x)

More information

软件工程文档编制

软件工程文档编制 实训抽象类 一 实训目标 掌握抽象类的定义 使用 掌握运行时多态 二 知识点 抽象类的语法格式如下 : public abstract class ClassName abstract void 方法名称 ( 参数 ); // 非抽象方法的实现代码 在使用抽象类时需要注意如下几点 : 1 抽象类不能被实例化, 实例化的工作应该交由它的子类来完成 2 抽象方法必须由子类来进行重写 3 只要包含一个抽象方法的抽象类,

More information

无类继承.key

无类继承.key 无类继承 JavaScript 面向对象的根基 周爱 民 / aimingoo aiming@gmail.com https://aimingoo.github.io https://github.com/aimingoo rand = new Person("Rand McKinnon",... https://docs.oracle.com/cd/e19957-01/816-6408-10/object.htm#1193255

More information

1 下列类头定义中, 正确的是 面向对象程序设计网络课程 A class x { } B public x extends y { } C public class x extends y {.} D class x extends y implements y1 { } 2 现有两个类 A B,

1 下列类头定义中, 正确的是 面向对象程序设计网络课程 A class x { } B public x extends y { } C public class x extends y {.} D class x extends y implements y1 { } 2 现有两个类 A B, 1 下列类头定义中, 正确的是 A class x B public x extends y C public class x extends y. D class x extends y implements y1 2 现有两个类 A B, 以下描述中表示 B 继承自 A 的是 (D ) A) class A extends B B) class B implements A C) class A

More information

模板

模板 制作人 : 张刚 目录 类和对象 面向对象程序设计基本特征 类的声明 构造方法 成员变量和方法 封装 继承 多态 包 访问控制 final static 抽象类和接口 内部类 沈阳工业大学软件学院 Java 课程教研组 Page 2 核心知识点 类 对象 三个基本特征 类的基本结构 成员变量 构造方法 成员方法 类实例 对象创建和操作 沈阳工业大学软件学院 Java 课程教研组 Page 3 1.

More information

Microsoft Word - 第2章.doc

Microsoft Word - 第2章.doc 2 第第 2 章 学习第 1 章后, 读者已经对 Java 语言有了初步的了解, 本章将具体解析 Java 类的组成元素 任何一个 Java 类, 都有 5 种基本组成元素 : 属性 方法 构造方法 块和内部类 其中属性 方法 构造方法是使用最多的元素, 而块 内部类使用较少 本章将对各种元素进行学习 Java 类基本结构 2.1 类 类 Java 类的声明形式 访问权限修饰符 修饰符 class

More information

OOP with Java 通知 Project 4: 5 月 2 日晚 9 点

OOP with Java 通知 Project 4: 5 月 2 日晚 9 点 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 4: 5 月 2 日晚 9 点 复习 类的复用 组合 (composition): has-a 关系 class MyType { public int i; public double d; public char c; public void set(double x) { d =

More information

SDK 概要 使用 Maven 的用户可以从 Maven 库中搜索 "odps-sdk" 获取不同版本的 Java SDK: 包名 odps-sdk-core odps-sdk-commons odps-sdk-udf odps-sdk-mapred odps-sdk-graph 描述 ODPS 基

SDK 概要 使用 Maven 的用户可以从 Maven 库中搜索 odps-sdk 获取不同版本的 Java SDK: 包名 odps-sdk-core odps-sdk-commons odps-sdk-udf odps-sdk-mapred odps-sdk-graph 描述 ODPS 基 开放数据处理服务 ODPS SDK SDK 概要 使用 Maven 的用户可以从 Maven 库中搜索 "odps-sdk" 获取不同版本的 Java SDK: 包名 odps-sdk-core odps-sdk-commons odps-sdk-udf odps-sdk-mapred odps-sdk-graph 描述 ODPS 基础功能的主体接口, 搜索关键词 "odpssdk-core" 一些

More information

OOP with Java 通知 Project 3: 3 月 29 日晚 9 点 4 月 1 日上课

OOP with Java 通知 Project 3: 3 月 29 日晚 9 点 4 月 1 日上课 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 3: 3 月 29 日晚 9 点 4 月 1 日上课 复习 Java 包 创建包 : package 语句, 包结构与目录结构一致 使用包 : import restaurant/ - people/ - Cook.class - Waiter.class - tools/ - Fork.class

More information

使 用 Java 语 言 模 拟 保 险 箱 容 量 门 板 厚 度 箱 体 厚 度 属 性 锁 具 类 型 开 保 险 箱 关 保 险 箱 动 作 存 取 款

使 用 Java 语 言 模 拟 保 险 箱 容 量 门 板 厚 度 箱 体 厚 度 属 性 锁 具 类 型 开 保 险 箱 关 保 险 箱 动 作 存 取 款 JAVA 程 序 设 计 ( 肆 ) 徐 东 / 数 学 系 使 用 Java 语 言 模 拟 保 险 箱 容 量 门 板 厚 度 箱 体 厚 度 属 性 锁 具 类 型 开 保 险 箱 关 保 险 箱 动 作 存 取 款 使 用 Java class 代 表 保 险 箱 public class SaveBox 类 名 类 类 体 实 现 封 装 性 使 用 class SaveBox 代 表 保

More information

C++ 程序设计 告别 OJ1 - 参考答案 MASTER 2019 年 5 月 3 日 1

C++ 程序设计 告别 OJ1 - 参考答案 MASTER 2019 年 5 月 3 日 1 C++ 程序设计 告别 OJ1 - 参考答案 MASTER 2019 年 月 3 日 1 1 INPUTOUTPUT 1 InputOutput 题目描述 用 cin 输入你的姓名 ( 没有空格 ) 和年龄 ( 整数 ), 并用 cout 输出 输入输出符合以下范例 输入 master 999 输出 I am master, 999 years old. 注意 "," 后面有一个空格,"." 结束,

More information

博学谷 让 IT 教学更简单, 让 IT 学习更有效 第五章补充案例 案例 5-1 声明类 一 案例描述 1 考核知识点类的声明 2 练习目标 掌握声明一个类的语法格式 掌握如何在类中声明成员变量和成员方法 3 需求分析在程序中, 设计一个表示学生的类, 该类具有以下属性和方法 : 该类具有表示姓名

博学谷 让 IT 教学更简单, 让 IT 学习更有效 第五章补充案例 案例 5-1 声明类 一 案例描述 1 考核知识点类的声明 2 练习目标 掌握声明一个类的语法格式 掌握如何在类中声明成员变量和成员方法 3 需求分析在程序中, 设计一个表示学生的类, 该类具有以下属性和方法 : 该类具有表示姓名 第五章补充案例 案例 5-1 声明类 1 考核知识点类的声明 掌握声明一个类的语法格式 掌握如何在类中声明成员变量和成员方法 3 需求分析在程序中, 设计一个表示学生的类, 该类具有以下属性和方法 : 该类具有表示姓名的属性 该类具有表示性别的属性 该类具有表示说话行为的 sayhello() 方法, 并且用于输出学生的姓名 1) 使用 class 关键字定义一个表示学生类型的类, 类名为 Student

More information

Microsoft Word - 第3章.doc

Microsoft Word - 第3章.doc 第 3 章 lambda 表达式及其应用 lambda 表达式是 Java 8 提供的一种新特性, 它使得 Java 也能像 C# 和 C++ 语言一样进行简单的 函数式编程, 这不仅简化了某些通用结构的实现方式, 也大大增强了 Java 语言的表达功能 3.1 lambda 表达式简介 lambda 表达式是基于数学中的 λ 演算得名, 本质上就是一个没有方法名的匿名方法 例如, 有一个方法定义如下

More information

姓名 : 年级专业 : 学号 : 凡年级专业 姓名 学号错写 漏写或字迹不清者, 成绩按零分记 密 封 线 java 较难 试卷 总分 题号 一 二 三 四 五 题分 得分 D 国际通信协议 4 下面选项中, 不是面向对象的特征的是 ( ) A 封装 B 继承 得分 一 单选题 ( 每题 3 分,

姓名 : 年级专业 : 学号 : 凡年级专业 姓名 学号错写 漏写或字迹不清者, 成绩按零分记 密 封 线 java 较难 试卷 总分 题号 一 二 三 四 五 题分 得分 D 国际通信协议 4 下面选项中, 不是面向对象的特征的是 ( ) A 封装 B 继承 得分 一 单选题 ( 每题 3 分, java 较难 试卷 总分 题号 一 二 三 四 五 题分 D 国际通信协议 4 下面选项中, 不是面向对象的特征的是 ( ) A 封装 B 继承 一 单选题 ( 每题 3 分, 共计 15 分 ) 1 下列修饰符中, 成员内部类被 ( ) 修饰后, 可以被外界访问 C 多态 D 重构 5 下列关于构造方法重载的说法中, 错误的是 () A 不同构造方法中调用本类其它的构造方法时, 需要使用 this([

More information

新・解きながら学ぶJava

新・解きながら学ぶJava 481! 41, 74!= 40, 270 " 4 % 23, 25 %% 121 %c 425 %d 121 %o 121 %x 121 & 199 && 48 ' 81, 425 ( ) 14, 17 ( ) 128 ( ) 183 * 23 */ 3, 390 ++ 79 ++ 80 += 93 + 22 + 23 + 279 + 14 + 124 + 7, 148, 16 -- 79 --

More information

KillTest 质量更高 服务更好 学习资料 半年免费更新服务

KillTest 质量更高 服务更好 学习资料   半年免费更新服务 KillTest 质量更高 服务更好 学习资料 http://www.killtest.cn 半年免费更新服务 Exam : 310-065Big5 Title : Sun Certified Programmer for the Java 2 Platform, SE 6.0 Version : Demo 1 / 14 1. 35. String #name = "Jane Doe"; 36. int

More information

Microsoft Word - 第3章.doc

Microsoft Word - 第3章.doc Java C++ Pascal C# C# if if if for while do while foreach while do while C# 3.1.1 ; 3-1 ischeck Test() While ischeck while static bool ischeck = true; public static void Test() while (ischeck) ; ischeck

More information

Guava学习之Resources

Guava学习之Resources Resources 提供提供操作 classpath 路径下所有资源的方法 除非另有说明, 否则类中所有方法的参数都不能为 null 虽然有些方法的参数是 URL 类型的, 但是这些方法实现通常不是以 HTTP 完成的 ; 同时这些资源也非 classpath 路径下的 下面两个函数都是根据资源的名称得到其绝对路径, 从函数里面可以看出,Resources 类中的 getresource 函数都是基于

More information

<4D6963726F736F667420506F776572506F696E74202D20332D322E432B2BC3E6CFF2B6D4CFF3B3CCD0F2C9E8BCC6A1AAD6D8D4D8A1A2BCCCB3D0A1A2B6E0CCACBACDBEDBBACF2E707074>

<4D6963726F736F667420506F776572506F696E74202D20332D322E432B2BC3E6CFF2B6D4CFF3B3CCD0F2C9E8BCC6A1AAD6D8D4D8A1A2BCCCB3D0A1A2B6E0CCACBACDBEDBBACF2E707074> 程 序 设 计 实 习 INFO130048 3-2.C++ 面 向 对 象 程 序 设 计 重 载 继 承 多 态 和 聚 合 复 旦 大 学 计 算 机 科 学 与 工 程 系 彭 鑫 pengxin@fudan.edu.cn 内 容 摘 要 方 法 重 载 类 的 继 承 对 象 引 用 和 拷 贝 构 造 函 数 虚 函 数 和 多 态 性 类 的 聚 集 复 旦 大 学 计 算 机 科 学

More information

Chapter 9: Objects and Classes

Chapter 9: Objects and Classes Fortran Algol Pascal Modula-2 BCPL C Simula SmallTalk C++ Ada Java C# C Fortran 5.1 message A B 5.2 1 class Vehicle subclass Car object mycar public class Vehicle extends Object{ public int WheelNum

More information

内 容 简 介 本 书 是 一 本 关 于 语 言 程 序 设 计 的 教 材, 涵 盖 了 语 言 的 基 本 语 法 和 编 程 技 术, 其 中 包 含 了 作 者 对 语 言 多 年 开 发 经 验 的 总 结, 目 的 是 让 初 学 的 读 者 感 受 到 语 言 的 魅 力, 并 掌

内 容 简 介 本 书 是 一 本 关 于 语 言 程 序 设 计 的 教 材, 涵 盖 了 语 言 的 基 本 语 法 和 编 程 技 术, 其 中 包 含 了 作 者 对 语 言 多 年 开 发 经 验 的 总 结, 目 的 是 让 初 学 的 读 者 感 受 到 语 言 的 魅 力, 并 掌 语 言 程 序 设 计 郑 莉 胡 家 威 编 著 清 华 大 学 逸 夫 图 书 馆 北 京 内 容 简 介 本 书 是 一 本 关 于 语 言 程 序 设 计 的 教 材, 涵 盖 了 语 言 的 基 本 语 法 和 编 程 技 术, 其 中 包 含 了 作 者 对 语 言 多 年 开 发 经 验 的 总 结, 目 的 是 让 初 学 的 读 者 感 受 到 语 言 的 魅 力, 并 掌 握 语

More information

OOP with Java 通知 Project 2 提交时间 : 3 月 14 日晚 9 点 另一名助教 : 王桢 学习使用文本编辑器 学习使用 cmd: Power shell 阅读参考资料

OOP with Java 通知 Project 2 提交时间 : 3 月 14 日晚 9 点 另一名助教 : 王桢   学习使用文本编辑器 学习使用 cmd: Power shell 阅读参考资料 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 2 提交时间 : 3 月 14 日晚 9 点 另一名助教 : 王桢 Email: 51141201063@ecnu.cn 学习使用文本编辑器 学习使用 cmd: Power shell 阅读参考资料 OOP with Java Java 类型 引用 不可变类型 对象存储位置 作用域 OOP

More information

拦截器(Interceptor)的学习

拦截器(Interceptor)的学习 二 拦截器 (Interceptor) 的学习 拦截器可以监听程序的一个或所有方法 拦截器对方法调用流提供了细粒度控制 可以在无状态会话 bean 有状态会话 bean 和消息驱动 bean 上使用它们 拦截器可以是同一 bean 类中的方法或是一个外部类 下面介绍如何在 Session Bean 类中使用外部拦截器类 @Interceptors 注释指定一个或多个在外部类中定义的拦截器 下面拦截器

More information

chap07.key

chap07.key #include void two(); void three(); int main() printf("i'm in main.\n"); two(); return 0; void two() printf("i'm in two.\n"); three(); void three() printf("i'm in three.\n"); void, int 标识符逗号分隔,

More information

Microsoft PowerPoint - 8. 运算符重载 Operator Overloading.pptx

Microsoft PowerPoint - 8. 运算符重载 Operator Overloading.pptx 运算符重载 Operator Overloading class Point { public: ; double x_, y_; Why Operator Overloading? Point (double x =0, double y = 0):x_(x),y_(y) { int main(){ Point a(1., 2), b(3,4); Point c = a + b; return 0;

More information

OOP with Java 通知 Project 4: 5 月 2 日晚 9 点

OOP with Java 通知 Project 4: 5 月 2 日晚 9 点 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 4: 5 月 2 日晚 9 点 复习 Java 包 创建包 : package 语句, 包结构与目录结构一致 使用包 : import restaurant/ - people/ - Cook.class - Waiter.class - tools/ - Fork.class - Table.class

More information

OOP with Java 通知 : Project 2 提交时间 : 3 月 14 日晚 9 点 另一名助教 : 王桢

OOP with Java 通知 : Project 2 提交时间 : 3 月 14 日晚 9 点 另一名助教 : 王桢 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 : Project 2 提交时间 : 3 月 14 日晚 9 点 另一名助教 : 王桢 Email: 51141201063@ecnu.cn 复习 : Java 类型 基本类型 boolean, char, 封装 (wrappers) 类 (class) 定义 class MyType { int i;

More information

OOP with Java 通知 : Project 2 提交时间 : 3 月 15 日晚 9 点

OOP with Java 通知 : Project 2 提交时间 : 3 月 15 日晚 9 点 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 : Project 2 提交时间 : 3 月 15 日晚 9 点 复习 : Java 类型 基本类型 boolean, char, 封装 (wrappers) 类 (class) 定义 class MyType { int i; double d; 数据 (Fields) char c; void set(double

More information

Microsoft PowerPoint - 6. 用户定义类型User-defined Datatypes.ppt [兼容模式]

Microsoft PowerPoint - 6. 用户定义类型User-defined Datatypes.ppt [兼容模式] 用户定义类型 User-defined Datatypes classes and structs 几何向量 (Geometry Vector) 二维平面上的向量由起点和终点构成 每个点包含两个坐标 (x, y), 因此一个向量需要四个实数表示 Start= (0.9,1.5) Start= (0.4,0.8) int main() { double xstart = 0.4; double xend

More information

C++ 程序设计 OJ1 - 参考答案 MASTER 2019 年 5 月 3 日 1

C++ 程序设计 OJ1 - 参考答案 MASTER 2019 年 5 月 3 日 1 C++ 程序设计 OJ1 - 参考答案 MASTER 2019 年 5 月 3 日 1 1 CIRCLE 1 Circle 描述 编写一个圆类 Circle, 实现半径的输入 面积的计算和输出 输入 圆的半径 (double 类型 ) 输出 圆的面积 ( 保留小数点后两位 ) 样例输入 3 样例输出 28.27 提示 圆周率的取值需要比较精确, 以保证计算结果的精度 #include

More information

untitled

untitled 1 Outline 數 料 數 數 列 亂數 練 數 數 數 來 數 數 來 數 料 利 料 來 數 A-Z a-z _ () 不 數 0-9 數 不 數 SCHOOL School school 數 讀 school_name schoolname 易 不 C# my name 7_eleven B&Q new C# (1) public protected private params override

More information

2009年3月全国计算机等级考试二级Java语言程序设计笔试试题

2009年3月全国计算机等级考试二级Java语言程序设计笔试试题 2009 年 3 月 全 国 计 算 机 等 级 考 试 笔 试 试 卷 二 级 Java 语 言 程 序 设 计 ( 考 试 时 间 90 分 钟, 满 分 100 分 ) 一 选 择 题 ( 每 题 2 分, 共 70 分 ) 下 列 各 题 A) B) C) D) 四 个 选 项 中, 只 有 一 个 选 项 是 正 确 的 请 将 正 确 选 项 填 涂 在 答 题 卡 相 应 位 置 上,

More information

個 人 的 手, 拉 著 瞎 子 的 手 把 他 帶 往 村 外 的 時 候, 對 於 瞎 子 來 講, 那 個 人 的 手 和 耶 穌 的 手 有 沒 有 區 別? 沒 有! 為 什 麼 沒 有 區 別? 因 為 對 於 一 個 瞎 子 來 說, 手 和 耳 朵 就 是 他 接 觸 世 界, 瞭

個 人 的 手, 拉 著 瞎 子 的 手 把 他 帶 往 村 外 的 時 候, 對 於 瞎 子 來 講, 那 個 人 的 手 和 耶 穌 的 手 有 沒 有 區 別? 沒 有! 為 什 麼 沒 有 區 別? 因 為 對 於 一 個 瞎 子 來 說, 手 和 耳 朵 就 是 他 接 觸 世 界, 瞭 課 目 : 講 道 法 學 生 : 楊 建 偉 老 師 : 汪 院 長 時 間 :2009 年 8 月 1 日 靈 命 三 階 ( 可 8:22-26) 在 四 部 福 音 書 中, 這 是 一 段 很 特 別 的 記 載 特 別 在 什 麼 地 方 呢? 是 不 是 特 別 在 耶 穌 基 督 對 一 個 病 人 的 醫 治? 不, 在 耶 穌 三 年 半 的 服 侍 當 中, 曾 經 醫 治 數

More information

chp6.ppt

chp6.ppt Java 软 件 设 计 基 础 6. 异 常 处 理 编 程 时 会 遇 到 如 下 三 种 错 误 : 语 法 错 误 (syntax error) 没 有 遵 循 语 言 的 规 则, 出 现 语 法 格 式 上 的 错 误, 可 被 编 译 器 发 现 并 易 于 纠 正 ; 逻 辑 错 误 (logic error) 即 我 们 常 说 的 bug, 意 指 编 写 的 代 码 在 执 行

More information

2. AOP 底层技术实现 小风 Java 实战系列教程 关键词 : 代理模式 代理模型分为两种 : 1) 接口代理 (JDK 动态代理 ) 2) 子类代理 (Cglib 子类代理 ) 需求 :CustomerService 业务类, 有 save,update 方法, 希望在 save,updat

2. AOP 底层技术实现 小风 Java 实战系列教程 关键词 : 代理模式 代理模型分为两种 : 1) 接口代理 (JDK 动态代理 ) 2) 子类代理 (Cglib 子类代理 ) 需求 :CustomerService 业务类, 有 save,update 方法, 希望在 save,updat 本章学习目标 小风 Java 实战系列教程 AOP 思想概述 AOP 底层技术实现 AOP 术语介绍 SpringAOP 的 XML 方式 HelloWorld SpringAOP 的 XML 方式配置细节 SpringAOP 的注解方式 SpringAOP 的零配置方式 1. AOP 思想概述 1.1. AOP 思想简介 1.2. AOP 的作用 2. AOP 底层技术实现 小风 Java 实战系列教程

More information

untitled

untitled 1 Outline 類别 欄 (1) 類 類 狀 更 易 類 理 若 類 利 來 利 using 來 namespace 類 ; (2) namespace IBM class Notebook namespace Compaq class Notebook 類别 類 來 類 列 欄 (field) (property) (method) (event) 類 例 立 來 車 類 類 立 車 欄 料

More information

Guava学习之CharSequenceReader

Guava学习之CharSequenceReader CharSequenceReader 类是以 CharSequence 的形式读取字符 CharSequenceReader 类继承自 Reader 类, 除了 remaining() hasremaining() 以及 checkopen() 函数之后, 其他的函数都是重写 Reader 类中的函数 CharSequenceReader 类声明没有用 public 关键字, 所以我们暂时还不能调用这个类

More information

Mac Java import com.apple.mrj.*;... public class MyFirstApp extends JFrame implements ActionListener, MRJAboutHandler, MRJQuitHandler {... public MyFirstApp() {... MRJApplicationUtils.registerAboutHandler(this);

More information

《大话设计模式》第一章

《大话设计模式》第一章 第 1 章 代 码 无 错 就 是 优? 简 单 工 厂 模 式 1.1 面 试 受 挫 小 菜 今 年 计 算 机 专 业 大 四 了, 学 了 不 少 软 件 开 发 方 面 的 东 西, 也 学 着 编 了 些 小 程 序, 踌 躇 满 志, 一 心 要 找 一 个 好 单 位 当 投 递 了 无 数 份 简 历 后, 终 于 收 到 了 一 个 单 位 的 面 试 通 知, 小 菜 欣 喜

More information

C++ 程序设计 告别 OJ2 - 参考答案 MASTER 2019 年 5 月 3 日 1

C++ 程序设计 告别 OJ2 - 参考答案 MASTER 2019 年 5 月 3 日 1 C++ 程序设计 告别 OJ2 - 参考答案 MASTER 2019 年 5 月 3 日 1 1 TEMPLATE 1 Template 描述 使用模板函数求最大值 使用如下 main 函数对程序进行测试 int main() { double a, b; cin >> a >> b; cout c >> d; cout

More information

PowerPoint 演示文稿

PowerPoint 演示文稿 The BitCoin Scripting Language 交易实例 交易结构 "result": { "txid": "921a dd24", "hash": "921a dd24", "version": 1, "size": 226, "locktime": 0, "vin": [ ], "vout": [ ], "blockhash": "0000000000000000002c510d

More information

获取 Access Token access_token 是接口的全局唯一票据, 接入方调用各接口时都需使用 access_token 开发者需要进行妥善保存 access_token 的存储至少要保留 512 个字符空间 access_token 的有效期目前为 2 个小时, 需定时刷新, 重复

获取 Access Token access_token 是接口的全局唯一票据, 接入方调用各接口时都需使用 access_token 开发者需要进行妥善保存 access_token 的存储至少要保留 512 个字符空间 access_token 的有效期目前为 2 个小时, 需定时刷新, 重复 获取 Access Token access_token 是接口的全局唯一票据, 接入方调用各接口时都需使用 access_token 开发者需要进行妥善保存 access_token 的存储至少要保留 512 个字符空间 access_token 的有效期目前为 2 个小时, 需定时刷新, 重复 获取将导致上次获取的 access_token 失效 接入方可以使用 AppID 和 AppSecret

More information

Chapter 9: Objects and Classes

Chapter 9: Objects and Classes Java application Java main applet Web applet Runnable Thread CPU Thread 1 Thread 2 Thread 3 CUP Thread 1 Thread 2 Thread 3 ,,. (new) Thread (runnable) start( ) CPU (running) run ( ) blocked CPU sleep(

More information

1 1 大概思路 创建 WebAPI 创建 CrossMainController 并编写 Nuget 安装 microsoft.aspnet.webapi.cors 跨域设置路由 编写 Jquery EasyUI 界面 运行效果 2 创建 WebAPI 创建 WebAPI, 新建 -> 项目 ->

1 1 大概思路 创建 WebAPI 创建 CrossMainController 并编写 Nuget 安装 microsoft.aspnet.webapi.cors 跨域设置路由 编写 Jquery EasyUI 界面 运行效果 2 创建 WebAPI 创建 WebAPI, 新建 -> 项目 -> 目录 1 大概思路... 1 2 创建 WebAPI... 1 3 创建 CrossMainController 并编写... 1 4 Nuget 安装 microsoft.aspnet.webapi.cors... 4 5 跨域设置路由... 4 6 编写 Jquery EasyUI 界面... 5 7 运行效果... 7 8 总结... 7 1 1 大概思路 创建 WebAPI 创建 CrossMainController

More information

PowerPoint 演示文稿

PowerPoint 演示文稿 友乾营 报表的 SQL 植入风险 规避风险 : 让你的报表变的安全起来 SQL 植入的概念 恶意的 SQL 归根结底 : 执行了不该允许执行的 SQL 命令, 达到非法的目的 常见案例 骗过登录验证非法获取账号信息篡改 删除数据 为什么存在 SQL 植入 植入原理 如何攻击 特殊的输入参数 未处理特殊字符 -- # 数据库配置不合理 植入原理 : 案例 1, 特殊输入参数 union or 猜表名

More information

Microsoft PowerPoint - 08_OO_CJC.ppt

Microsoft PowerPoint - 08_OO_CJC.ppt C++ 中的 Hello World! C 程序设计语言 第 8 章 OO 与 C++ Java C# 孙志岗 sun@hit.edu.cn http://sunner.cn 兼容 C 语言的 : #include int main() printf("hello,, world!\n"); return 0; 更具 C++ 味道的 : #include int

More information

本章学习目标 小风 Java 实战系列教程 SpringMVC 简介 SpringMVC 的入门案例 SpringMVC 流程分析 配置注解映射器和适配器 注解的使用 使用不同方式的跳转页面 1. SpringMVC 简介 Spring web mvc

本章学习目标 小风 Java 实战系列教程 SpringMVC 简介 SpringMVC 的入门案例 SpringMVC 流程分析 配置注解映射器和适配器 注解的使用 使用不同方式的跳转页面 1. SpringMVC 简介 Spring web mvc 本章学习目标 SpringMVC 简介 SpringMVC 的入门案例 SpringMVC 流程分析 配置注解映射器和适配器 配置视图解析器 @RequestMapping 注解的使用 使用不同方式的跳转页面 1. SpringMVC 简介 Spring web mvc 和 Struts2 都属于表现层的框架, 它是 Spring 框架的一部分, 我们可 以从 Spring 的整体结构中看得出来 :

More information

OOP with Java 通知 Project 4: 推迟至 4 月 25 日晚 9 点

OOP with Java 通知 Project 4: 推迟至 4 月 25 日晚 9 点 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 4: 推迟至 4 月 25 日晚 9 点 复习 Protected 可以被子类 / 同一包中的类访问, 不能被其他类访问 弱化的 private 同时赋予 package access class MyType { public int i; public double d; public

More information

KillTest 质量更高 服务更好 学习资料 半年免费更新服务

KillTest 质量更高 服务更好 学习资料   半年免费更新服务 KillTest 质量更高 服务更好 学习资料 http://www.killtest.cn 半年免费更新服务 Exam : 310-055Big5 Title : Sun Certified Programmer for the Java 2 Platform.SE 5.0 Version : Demo 1 / 22 1. 11. public static void parse(string str)

More information

Microsoft Word - JCS5.doc

Microsoft Word - JCS5.doc 第 5 章进一步讨论对象和类 5.1 抽象数据类型 5.1.1 概述 绝大多数程序设计语言都预定义了一些基本数据类型, 并相应定义了对那些类型的实例执行的操作 比如, 对整型 实型等数值类型, 有加 减 乘 除等操作 ; 对逻辑类型, 有逻辑与 逻辑或 逻辑非等操作 对于用户自定义的复合数据类型, 需要由程序员自己定义一些方法, 对该类型的实例进行所需的操作 在早期许多程序设计语言中, 复合数据类型及其相关操作的代码之间没有特殊的联系

More information

PowerPoint Presentation

PowerPoint Presentation 对象与对象的内存模型 北京理工大学计算机学院 金旭亮 对象的内存模型 对象与类的静态成员 装箱和拆箱 主要内容 提示 : 本讲以 C# 为主介绍, 但所讲内容同样适用于 Java 2 一 对象的内存模型 对象是如何 活 在内存中的? 我们如何访问内存中的这个对象? 代码中定义一个对象变量的含义是什么? 对象变量 与 对象 对象变量用于 引用 一个真实的对象 类 引用 new 对象变量 对象 对象变量保存在线程堆栈中

More information

Microsoft Word - ch04三校.doc

Microsoft Word - ch04三校.doc 4-1 4-1-1 (Object) (State) (Behavior) ( ) ( ) ( method) ( properties) ( functions) 4-2 4-1-2 (Message) ( ) ( ) ( ) A B A ( ) ( ) ( YourCar) ( changegear) ( lowergear) 4-1-3 (Class) (Blueprint) 4-3 changegear

More information

chp4

chp4 Java 软件开发基础 4. 面向对象的程序设计基础 4.1 面向对象基础 对象 现实世界中复杂的对象是由许多小的 简单的对象组成的 客观存在的物体就是最基本的对象 不同的物体有共性, 共性存在于个性之中, 物体的个性又继承了共性 对象的状态属性 对象蕴含着许多信息, 可以用一组状态来表征 对象的行为操作 对象内部含有对数据的操作, 即对象的行为操作 某类事物的抽象 某类对象是对现实世界具有共同特性的某类事物的抽象

More information

EJB-Programming-3.PDF

EJB-Programming-3.PDF :, JBuilder EJB 2.x CMP EJB Relationships JBuilder EJB Test Client EJB EJB Seminar CMP Entity Beans Value Object Design Pattern J2EE Design Patterns Value Object Value Object Factory J2EE EJB Test Client

More information

untitled

untitled 1 行 行 行 行.NET 行 行 類 來 行 行 Thread 類 行 System.Threading 來 類 Thread 類 (1) public Thread(ThreadStart start ); Name 行 IsAlive 行 行狀 Start 行 行 Suspend 行 Resume 行 行 Thread 類 (2) Sleep 行 CurrentThread 行 ThreadStart

More information

幻灯片 1

幻灯片 1 第三课类和对象 ( 封装 ) 互联网新技术在线教育领航者 1 内容概述 1. 封装的概念 2. 访问控制 3. 栈类的封装 4. 构造与析构 5.myString 构造函数 6. 构造与析构的次序 7. 类文件写法 8. 对象的内存 9.this 指针初探 10. 构造函数初始值列表 11. 拷贝构造和赋值运算符重载 12. 浅拷贝 13. 深拷贝 14. 成员函数内联 15. 友元 16.const

More information

帝国CMS下在PHP文件中调用数据库类执行SQL语句实例

帝国CMS下在PHP文件中调用数据库类执行SQL语句实例 帝国 CMS 下在 PHP 文件中调用数据库类执行 SQL 语句实例 这篇文章主要介绍了帝国 CMS 下在 PHP 文件中调用数据库类执行 SQL 语句实例, 本文还详细介绍了帝国 CMS 数据库类中的一些常用方法, 需要的朋友可以参考下 例 1: 连接 MYSQL 数据库例子 (a.php)

More information

<4D F736F F F696E74202D20A1B64A617661B8DFBCB6BCBCCAF5A1B7B5DA31312E35BDB220B6AFCCACC0E0D0CDBCECB2E92E707074>

<4D F736F F F696E74202D20A1B64A617661B8DFBCB6BCBCCAF5A1B7B5DA31312E35BDB220B6AFCCACC0E0D0CDBCECB2E92E707074> Java 高级技术 课程 Java 语言的高级特性 (8) 李戈 北京大学信息科学技术学院软件研究所 2008 年 5 月 11 日 运行期类型识别 RTTI ( Run-Time Type Identification ) 在运行期间, 识别一个对象的类型 运行期类型识别 RTTI 的三种方法 强制类型转换 利用 Class 对象 通过比较识别类型 (1) 利用强制类型转换判别运行期类型 class

More information

javaexample-02.pdf

javaexample-02.pdf n e w. s t a t i c s t a t i c 3 1 3 2 p u b l i c p r i v a t e p r o t e c t e d j a v a. l a n g. O b j e c t O b j e c t Rect R e c t x 1 y 1 x 2 y 2 R e c t t o S t r i n g ( ) j a v a. l a n g. O

More information

untitled

untitled 1 Outline 料 類 說 Tang, Shih-Hsuan 2006/07/26 ~ 2006/09/02 六 PM 7:00 ~ 9:30 聯 ives.net@gmail.com www.csie.ntu.edu.tw/~r93057/aspnet134 度 C# 力 度 C# Web SQL 料 DataGrid DataList 參 ASP.NET 1.0 C# 例 ASP.NET 立

More information

OOP with Java 通知 Project 4: 4 月 19 日晚 9 点

OOP with Java 通知 Project 4: 4 月 19 日晚 9 点 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 4: 4 月 19 日晚 9 点 复习 Protected 可以被子类 / 同一包中的类访问, 不能被其他类访问 弱化的 private 同时赋予 package access class MyType { public int i; public double d; public char

More information

使用MapReduce读取XML文件

使用MapReduce读取XML文件 使用 MapReduce 读取 XML 文件 XML( 可扩展标记语言, 英语 :extensible Markup Language, 简称 : XML) 是一种标记语言, 也是行业标准数据交换交换格式, 它很适合在系统之间进行数据存储和交换 ( 话说 Hadoop H ive 等的配置文件就是 XML 格式的 ) 本文将介绍如何使用 MapReduce 来读取 XML 文件 但是 Had oop

More information

(TestFailure) JUnit Framework AssertionFailedError JUnit Composite TestSuite Test TestSuite run() run() JUnit

(TestFailure) JUnit Framework AssertionFailedError JUnit Composite TestSuite Test TestSuite run() run() JUnit Tomcat Web JUnit Cactus JUnit Java Cactus JUnit 26.1 JUnit Java JUnit JUnit Java JSP Servlet JUnit Java Erich Gamma Kent Beck xunit JUnit boolean JUnit Java JUnit Java JUnit Java 26.1.1 JUnit JUnit How

More information

The Embedded computing platform

The Embedded computing platform 嵌入式系統及實驗 Embedded System and Experiment 詹曉龍 長庚大學電機系 Java 的類別與物件 : 宣告類別 建構子 public class Customer { private String name; private String address; // Customer 類別宣告 // 成員資料 public int age; // 建構子 : 使用參數設定成員資料初始值

More information

EJB-Programming-4-cn.doc

EJB-Programming-4-cn.doc EJB (4) : (Entity Bean Value Object ) JBuilder EJB 2.x CMP EJB Relationships JBuilder EJB Test Client EJB EJB Seminar CMP Entity Beans Session Bean J2EE Session Façade Design Pattern Session Bean Session

More information

Microsoft Word - 第5章.doc

Microsoft Word - 第5章.doc 第 5 章 面向对象编程 除了基本的类和对象,Java 语言的面向对象编程还包括抽象类 接口 内部类及包等高级特性 通过对这些高级特性的支持,Java 语言全面实现了面向对象的编程 本章将进一步深入介绍 Java 语言面向对象编程方面的知识 5.1 类的三大特性 第 4 章介绍了有关类定义的基本知识 面向对象中的类还具有封装 继承与多态的特性, 这也是面向对象编程所具有的重要特点 Java 语言对类的封装

More information

Microsoft Word - 第3章.doc

Microsoft Word - 第3章.doc 第 3 章 对象和类 在当今的计算机大型应用软件开发领域, 面向对象技术正在逐步取代面向过程的程序设计技术 本章将介绍面向对象的基本知识和 Java 实现面向对象程序设计的主要工具 类 如果读者缺乏关于面向对象程序设计的背景, 一定要仔细阅读本章 如果读者有 C++ 编程经验, 也要注意二者之间的区别, 毕竟 Java 在类的具体实现上与 C++ 有较大的差别 学习本章面向对象的相关知识, 主要内容有以下几点

More information

Java java.lang.math Java Java.util.Random : ArithmeticException int zero = 0; try { int i= 72 / zero ; }catch (ArithmeticException e ) { // } 0,

Java java.lang.math Java Java.util.Random : ArithmeticException int zero = 0; try { int i= 72 / zero ; }catch (ArithmeticException e ) { // } 0, http://debut.cis.nctu.edu.tw/~chi Java java.lang.math Java Java.util.Random : ArithmeticException int zero = 0; try { int i= 72 / zero ; }catch (ArithmeticException e ) { // } 0, : POSITIVE_INFINITY NEGATIVE_INFINITY

More information

java 难 试卷 总分 题号 一 二 三 四 五 题分 得分 得分 一 单选题 ( 每题 3 分, 共计 15 分 ) 1 下面选项中, 关于 PrintStream 类描述错误的是 ( ) A PrintStream 可以实现将基本数据类型的数据或引用数据类型的对象格式化成字符串后再输出 B P

java 难 试卷 总分 题号 一 二 三 四 五 题分 得分 得分 一 单选题 ( 每题 3 分, 共计 15 分 ) 1 下面选项中, 关于 PrintStream 类描述错误的是 ( ) A PrintStream 可以实现将基本数据类型的数据或引用数据类型的对象格式化成字符串后再输出 B P java 难 试卷 总分 题号 一 二 三 四 五 题分 一 单选题 ( 每题 3 分, 共计 15 分 ) 1 下面选项中, 关于 PrintStream 类描述错误的是 ( ) A PrintStream 可以实现将基本数据类型的数据或引用数据类型的对象格式化成字符串后再输出 B PrintStream 类位于 IO 包中, 是字符输出流的子类 C 调用 println() 方法和 print()

More information

CHAPTER 1

CHAPTER 1 CHAPTER 1 1-1 System Development Life Cycle; SDLC SDLC Waterfall Model Shelly 1995 1. Preliminary Investigation 2. System Analysis 3. System Design 4. System Development 5. System Implementation and Evaluation

More information

Microsoft PowerPoint - 07 派生数据类型

Microsoft PowerPoint - 07 派生数据类型 能源与动力工程学院 目录 派生类型 陈 斌 固有数据类型 数值型 (numerical) 整型 INTEGER 实型 REAL 复数型 COMPLEX 非数值型 字符型 CHARACTER 逻辑型 ( 布尔型 )LOGICAL 自定义数据类型 ( 派生类型, derived type) 派生类型是指用户利用 Fortran 系统内部类型, 如整型 实型 复数型 逻辑型 字符型等的组合自行创建出一个新的数据类型,

More information

JAVA 单元 2.1 四则运算机 ( 一 ) 单元教学进度设计 教学环节 教学内容 教师学生活动活动 反馈 反馈课前作业完成情况 反馈加分 1. 下面哪些是合法的变量名? ( ) A.2variable 答案 :DEG B..variable2 解答 : C.._whatavariable A:/

JAVA 单元 2.1 四则运算机 ( 一 ) 单元教学进度设计 教学环节 教学内容 教师学生活动活动 反馈 反馈课前作业完成情况 反馈加分 1. 下面哪些是合法的变量名? ( ) A.2variable 答案 :DEG B..variable2 解答 : C.._whatavariable A:/ 单元 2.1 四则运算机 ( 一 ) 单元教学进度设计 教学环节 教学内容 教师学生活动活动 反馈 反馈课前作业完成情况 反馈加分 1. 下面哪些是合法的变量名? ( ) A.2variable 答案 :DEG B..variable2 解答 : C.._whatavariable A:// 不能以数字开头 D._3_ B:// 不能用点和空格 提问 抢答 E.$anothervar C: // 不能用点和空格

More information

<4D F736F F D204A617661B3CCD0F2C9E8BCC6D3EBCAB5BCF9BDCCB3CCA3A8B5DA32B0E6A3A920B5DA35D5C22E646F63>

<4D F736F F D204A617661B3CCD0F2C9E8BCC6D3EBCAB5BCF9BDCCB3CCA3A8B5DA32B0E6A3A920B5DA35D5C22E646F63> 第 5 章 类类和对象和对象 教学目标 : 掌握类的构造方法的定义 作用, 以及如何实现类的构造方法 掌握如何创建类对象 如何使用类对象 掌握静态成员和实例成员的使用方法, 以及二者之间的区别 掌握类成员的访问权限的设置方法以及使用原则 教学重点 : 本章首先要求读者掌握对象的定义和引用的方法, 在此基础上深入理解静态成员和实例成员的定义及其应用 方法重载及其作用, 类的封装和访问控制权限 5.1

More information

第 5 章面向对象编程 学习目标 熟悉面向对象思想 掌握类与对象的使用 掌握构造方法与析构方法的使用 掌握继承与多态的使用 掌握接口与抽象类的使用 和一些面向对象的语言有所不同,PHP 并不是一种纯面向对象的语言 但 PHP 也支持面向对象的程序设计, 并可以用于开发大型的商业程序 因此学好面向对象

第 5 章面向对象编程 学习目标 熟悉面向对象思想 掌握类与对象的使用 掌握构造方法与析构方法的使用 掌握继承与多态的使用 掌握接口与抽象类的使用 和一些面向对象的语言有所不同,PHP 并不是一种纯面向对象的语言 但 PHP 也支持面向对象的程序设计, 并可以用于开发大型的商业程序 因此学好面向对象 第 5 章面向对象编程 学习目标 熟悉面向对象思想 掌握类与对象的使用 掌握构造方法与析构方法的使用 掌握继承与多态的使用 掌握接口与抽象类的使用 和一些面向对象的语言有所不同,PHP 并不是一种纯面向对象的语言 但 PHP 也支持面向对象的程序设计, 并可以用于开发大型的商业程序 因此学好面向对象编程对 PHP 程序员来说也是至关重要的 本章将针对面向对象编程在 PHP 语言中的使用进行详细地讲解

More information

public String getsex() { return ssex; public int getage() { return sage; public int getjava() { return sjava; public static void main(string[] args) {

public String getsex() { return ssex; public int getage() { return sage; public int getjava() { return sjava; public static void main(string[] args) { 第七章类和对象 实验目的 (1) 熟练掌握类 类方法的定义 (2) 明确类与对象的关系掌握关键字 new 的引用 (3) 掌握对象的引用 (4) 掌握构造方法及一般方法的使用 实验范例 例 1:( 类的构造 ) 定义一个表示学生信息的类 Student, 要求如下 :( 有关类的编程 ) (1) 类 Student 的成员变量 : sno 表示学号 ;sname 表示姓名 ;ssex 表示性别 ;sage

More information

CHAPTER VC#

CHAPTER VC# 1. 2. 3. 4. CHAPTER 2-1 2-2 2-3 2-4 VC# 2-5 2-6 2-7 2-8 Visual C# 2008 2-1 Visual C# 0~100 (-32768~+32767) 2 4 VC# (Overflow) 2-1 2-2 2-1 2-1.1 2-1 1 10 10!(1 10) 2-3 Visual C# 2008 10! 32767 short( )

More information

38 47995529 威 福 髮 藝 店 桃 園 市 蘆 竹 區 中 山 里 福 祿 一 街 48 號 地 下 一 樓 50,000 獨 資 李 依 純 105/04/06 府 經 登 字 第 1059003070 號 39 47995534 宏 品 餐 飲 桃 園 市 桃 園 區 信 光 里 民

38 47995529 威 福 髮 藝 店 桃 園 市 蘆 竹 區 中 山 里 福 祿 一 街 48 號 地 下 一 樓 50,000 獨 資 李 依 純 105/04/06 府 經 登 字 第 1059003070 號 39 47995534 宏 品 餐 飲 桃 園 市 桃 園 區 信 光 里 民 1 08414159 惠 鴻 眼 鏡 行 桃 園 市 中 壢 區 福 德 里 中 華 路 一 段 186 號 1 樓 30,000 獨 資 宋 耀 鴻 105/04/27 府 經 登 字 第 1059003866 號 2 17891110 承 元 冷 氣 空 調 工 程 行 桃 園 市 桃 園 區 中 德 里 國 際 路 1 段 98 巷 50 號 2 樓 之 4 200,000 獨 資 詹 安 平

More information

停止混流接口 请注意 : 该功能需要联系 ZEGO 技术支持开通 1 接口调用说明 http 请求方式 : POST/FORM, 需使用 https 正式环境地址 access_token=access_token (http

停止混流接口 请注意 : 该功能需要联系 ZEGO 技术支持开通 1 接口调用说明 http 请求方式 : POST/FORM, 需使用 https 正式环境地址   access_token=access_token (http 停止混流接口 请注意 : 该功能需要联系 ZEGO 技术支持开通 1 接口调用说明 http 请求方式 : POST/FORM, 需使用 https 正式环境地址 https://webapi.zego.im/cgi/stop-mix? access_token=access_token (https://webapi.zego.im/cgi/stop-mix? access_token=access_token)

More information

untitled

untitled 4.1AOP AOP Aspect-oriented programming AOP 來說 AOP 令 理 Cross-cutting concerns Aspect Weave 理 Spring AOP 來 AOP 念 4.1.1 理 AOP AOP 見 例 來 例 錄 Logging 錄 便 來 例 行 留 錄 import java.util.logging.*; public class HelloSpeaker

More information

// 获取并集 // set1.addall(set2); // 获取交集 set1.retainall(set2); // 打印操作结果 set1.foreach(o -> System.out.println(o)); 运行结果如图 6-1 所示 图 6-1 运行结果 三 案例总结 1 Coll

// 获取并集 // set1.addall(set2); // 获取交集 set1.retainall(set2); // 打印操作结果 set1.foreach(o -> System.out.println(o)); 运行结果如图 6-1 所示 图 6-1 运行结果 三 案例总结 1 Coll 第 6 章集合 案例 6-1 Collection 单列集合的操作 一 案例描述 1 考核知识点编号 :063006002~063006008 063006018 名称 :Collection 单列集合 Arrays 工具类 2 练习目标 掌握 Collection 单列集合方法的使用 3 需求分析 Collection 是所有单列集合的根接口, 在 Collection 中定义了单列集合 (List

More information

OOP with Java 通知 Project 2 提交时间 : 3 月 21 日晚 9 点 作业提交格式 学习使用 文本编辑器 cmd, PowerShell (Windows), terminal(linux, Mac)

OOP with Java 通知 Project 2 提交时间 : 3 月 21 日晚 9 点 作业提交格式 学习使用 文本编辑器 cmd, PowerShell (Windows), terminal(linux, Mac) OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 2 提交时间 : 3 月 21 日晚 9 点 作业提交格式 学习使用 文本编辑器 cmd, PowerShell (Windows), terminal(linux, Mac) 复习 面向对象编程 将实际问题分解成不同的对象 不的对象提供不同的服务 对象之间可以传递消息 例子小李深夜

More information

Fun Time (1) What happens in memory? 1 i n t i ; 2 s h o r t j ; 3 double k ; 4 char c = a ; 5 i = 3; j = 2; 6 k = i j ; H.-T. Lin (NTU CSIE) Referenc

Fun Time (1) What happens in memory? 1 i n t i ; 2 s h o r t j ; 3 double k ; 4 char c = a ; 5 i = 3; j = 2; 6 k = i j ; H.-T. Lin (NTU CSIE) Referenc References (Section 5.2) Hsuan-Tien Lin Deptartment of CSIE, NTU OOP Class, March 15-16, 2010 H.-T. Lin (NTU CSIE) References OOP 03/15-16/2010 0 / 22 Fun Time (1) What happens in memory? 1 i n t i ; 2

More information

1 Framework.NET Framework Microsoft Windows.NET Framework.NET Framework NOTE.NET NET Framework.NET Framework 2.0 ( 3 ).NET Framework 2.0.NET F

1 Framework.NET Framework Microsoft Windows.NET Framework.NET Framework NOTE.NET NET Framework.NET Framework 2.0 ( 3 ).NET Framework 2.0.NET F 1 Framework.NET Framework Microsoft Windows.NET Framework.NET Framework NOTE.NET 2.0 2.0.NET Framework.NET Framework 2.0 ( 3).NET Framework 2.0.NET Framework ( System ) o o o o o o Boxing UnBoxing() o

More information

在Spring中使用Kafka:Producer篇

在Spring中使用Kafka:Producer篇 在某些情况下, 我们可能会在 Spring 中将一些 WEB 上的信息发送到 Kafka 中, 这时候我们就需要在 Spring 中编写 Producer 相关的代码了 ; 不过高兴的是,Spring 本身提供了操作 Kafka 的相关类库, 我们可以直接通过 xml 文件配置然后直接在后端的代码中使用 Kafka, 非常地方便 本文将介绍如果在 Spring 中将消息发送到 Kafka 在这之前,

More information

输入 project name 选择完成

输入 project name 选择完成 JAVA 程序访问 HighGo DB 的环境准备 山东瀚高科技有限公司版权所有仅允许不作任何修改的转载和转发 Hibernate 的配置 MyEclipse 中创建新项目 : 选择菜单栏 file---new---project 选择 web project 进行下一步 输入 project name 选择完成 4. 单击 " 添加 JAR/ 文件夹 ", 会如下图出现 JDBC 下载 Hibernate

More information

KillTest 质量更高 服务更好 学习资料 半年免费更新服务

KillTest 质量更高 服务更好 学习资料   半年免费更新服务 KillTest 质量更高 服务更好 学习资料 http://www.killtest.cn 半年免费更新服务 Exam : 70-536Chinese(C++) Title : TS:MS.NET Framework 2.0-Application Develop Foundation Version : DEMO 1 / 10 1. Exception A. Data B. Message C.

More information

JavaIO.PDF

JavaIO.PDF O u t p u t S t ream j a v a. i o. O u t p u t S t r e a m w r i t e () f l u s h () c l o s e () public abstract void write(int b) throws IOException public void write(byte[] data) throws IOException

More information

res/layout 目录下的 main.xml 源码 : <?xml version="1.0" encoding="utf 8"?> <TabHost android:layout_height="fill_parent" xml

res/layout 目录下的 main.xml 源码 : <?xml version=1.0 encoding=utf 8?> <TabHost android:layout_height=fill_parent xml 拓展训练 1- 界面布局 1. 界面布局的重要性做应用程序, 界面是最基本的 Andorid 的界面, 需要写在 res/layout 的 xml 里面, 一般情况下一个 xml 对应一个界面 Android 界面布局有点像写 html( 连注释代码的方式都一样 ), 要先给 Android 定框架, 然后再在框架里面放控件,Android 提供了几种框架,AbsoluteLayout,LinearLayout,

More information

跟我学mysql存储过程.doc

跟我学mysql存储过程.doc 目录 1.1 CREATE PROCEDURE ( 创建 ) ---------------------------------------------------- 2 1.2 ALTER PROCEDURE ( 修改 ) ------------------------------------------------------- 2 1.3 DROP PROCEDURE ( 删除 ) -------------------------------------------------------

More information

第3 章 类 对象与方法 3.1 类 类的定义 在 Objective-C 中 每个类的定义包括两个部分 接口 interface 和实现 implementation 接口部 分定义在.h 文件中 包含类的声明 属性以及方法 主要作用是对外提供访问接口 实现部分定义在.m 文件中 主要

第3 章 类 对象与方法 3.1 类 类的定义 在 Objective-C 中 每个类的定义包括两个部分 接口 interface 和实现 implementation 接口部 分定义在.h 文件中 包含类的声明 属性以及方法 主要作用是对外提供访问接口 实现部分定义在.m 文件中 主要 第3 章 类 对象与方法 3.1 类 3.1.1 类的定义 在 Objective-C 中 每个类的定义包括两个部分 接口 interface 和实现 implementation 接口部 分定义在.h 文件中 包含类的声明 属性以及方法 主要作用是对外提供访问接口 实现部分定义在.m 文件中 主要用于方法的功能实现 这种定义类的方法 好处在于将公共声明 接口 与代码实现分开 对外屏蔽了功能实现的细节

More information

ExcelUtility 类库使用说明 ( 续 ) 开发 / 设计 : 左文俊 第一个新增功能, 列宽自适应, 当超过 30 个字符则将单元格内容设为换行 任意一个无模板的导出方法均支持该功能, 示例代码如下 : /// <summary> /// 测试方法

ExcelUtility 类库使用说明 ( 续 ) 开发 / 设计 : 左文俊 第一个新增功能, 列宽自适应, 当超过 30 个字符则将单元格内容设为换行 任意一个无模板的导出方法均支持该功能, 示例代码如下 : /// <summary> /// 测试方法 ExcelUtility 类库使用说明 ( 续 ) 开发 / 设计 : 左文俊 第一个新增功能, 列宽自适应, 当超过 0 个字符则将单元格内容设为换行 任意一个无模板的导出方法均支持该功能, 示例代码如下 : 0 /// 测试方法 : 测试将 DataTable 导出到 EXCEL, 无模板 public void TestExportToExcelByDataTable() string excelpath

More information

OOP with Java 通知 Project 4: 5 月 2 日晚 9 点

OOP with Java 通知 Project 4: 5 月 2 日晚 9 点 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 4: 5 月 2 日晚 9 点 复习 Protected 可以被子类 / 同一包中的类访问, 不能被其他类访问 弱化的 private 同时赋予 package access class MyType { public int i; public double d; public char

More information

《计算概论》课程 第十九讲 C 程序设计语言应用

《计算概论》课程 第十九讲  C 程序设计语言应用 Java 高级技术 课程第二讲 Java 语言的面向对象特性 (2) 李戈 北京大学信息科学技术学院软件研究所 2010 年 3 月 21 日 课程助教 : 前言 黎育龙 (10817195@pub.ss.pku.edu.cn) Email 标题 :Java 高级技术 + 题目 请不要把作业发到我的信箱 ; 新的课程网站 http://www.ontoedu.pku.edu.cn/index.jsp

More information