SlideShare uma empresa Scribd logo
1 de 31
面向对象编程
Agenda
•   OOP简介 - 1
•   OOP简介 - 2
•   类 和 对象
•   Java包
•   import static
•   Java包 - 编译及运行
•   属性和方法
•   属性: 原语类型

1/22/2013      Course - J2SE Basic
•   属性: 非原语类型
•   static关键字
•   static块
•   类访问控制
•   成员访问控制
•   属性声明
•   方法声明
•   属性初始化

1/22/2013       Course - J2SE Basic
OOP-1
• 面向对象编程, 简称OOP;
• OOP在于对问题域进行抽象和分解,生成领
  域模型. 比如制造一辆汽车:




1/22/2013   Course - J2SE Basic
OOP-2
• 一切都是对象;
• 程序由相互交互的对象组成;
• 每个对象都有自己的内存空间, 并引用其他
  的对象;
• 每个对象都有自己的类型;
• 同一种类型的对象具有相同的接口.



1/22/2013   Course - J2SE Basic
类和对象
• 类是对象的模板; 根据类的定义, 从而创建相应的对象;
• 类的定义
关键字class, 用于在java中声明一个类, 一个
源文件中只能有一个public访问类型的类,
并且该类的名称与源文件名称相同. 比如:
Integer.java对应public class Integer {……}
• 示例
Light表示一个类, 对应的是现实生活中的
灯泡.Light有价格(price), 大小规格(size)等属性; 并提供了打开(on),
关闭(off), 加亮(brighten), 减暗(dim)等接口供调用;
• 对象的定义
关键字new, 用于创建一个对象, 示例:
Light lt = new Light(); // 这里lt就是一个对象

1/22/2013           Course - J2SE Basic
类和对象
• 可以在一个java源文件中定义多个类, 如果
  有public类, 则该类的名称必须与文件名相同.
• 参考: demo/Demo1.java




1/22/2013   Course - J2SE Basic
Java包
• Java包机制的好处:
1, 避免名字空间污染;
2, 可以根据不同的模块/组件定义相应的包名;
• 关键字package, 出现在java原文件开头, 声明java包; 如果包有多个层次使用”.”分割;
• 关键字import
用于引用某个包下面的类:
1, import java.util.Map; 引用单个类
2, import java.util.*;   引用该包下面所有的类
默认情况下会自动引入java.lang包, 因此该包下面的Integer/Double等类可以被直接使用.
• 示例:
package demo;

public class HelloWorld {

    public static void main(String[] args) {
      System.out.println("hello world");
    }

}




1/22/2013                                      Course - J2SE Basic
import static
• 这是在jdk5中引入的一个新特性, 用于
  import某个类下面的static方法, 这样在调用
  该方法时可以直接写成methodCall()的形式,
  而无需写成someClass.methodCall()的形式;
• 通过.*的写法引入类下面的所有static方法;
• 约定: 在以后的示例中经常会引入util.Print.*,
  以简化程序;
• 示例: demo/Demo7.java

1/22/2013      Course - J2SE Basic
Java包
            编译及运行
• 将该java源文件放在包声明的子目录下面,
  这里的包名是demo, 因此放在demo子目录
  下面; 如果是包分了多个层次, 则需要创建
  相应的目录层次. 比如, java.util包对应的目
  录是java/util
• 按照如下方式编译运行:



1/22/2013    Course - J2SE Basic
属性和方法
• Java类由两部分组成: 属性和方法. 示例:
public class Light {
 double price; // 价格属性
 double size;       // 大小属性
 public void on() {}       //方法: 打开
 public void off() {}      //方法: 关闭
 public void brighten() {} //方法: 加亮
 public void dim() {}      //方法: 变暗
………….
• 属性可以是基本的数据类型, 比如整型, bool型; 也可以是其他对象的引
   用;
• Light类的属性: price, size;
• Light类的方法: on, off, brighten, dim;
• 参考: demo/Light.java


1/22/2013       Course - J2SE Basic
属性: 原语类型
•   原语类型属性是指整型, 长整型, 浮点型, 双精度浮点型等基本数据类型, 比如:
    int i = 5;                     // 整型原语类型
    boolean isCertified = false;   // 布尔型原语类型
•   每个原语类型对应一个包装类, 比如int对应java.lang.Integer. 原语类型的数据范
    围:




1/22/2013                              Course - J2SE Basic
属性:非原语类型
• 非原语类型有:
1, 对象
String s = “abc”; // 字符串对象
Map map = null; // 键值对象
2, 数组对象
表示某个原语类型或者对象的集合.
1), Java中声明一个数组, eg:
int[] ia = {1,2,3,4};         // 也可以写成int ia[] = ......
int[] ia = new int[4];        // 数组长度为4, 各个元素的值均为0
Object[] objs = new Object[8]; // 数组长度为8, 各个元素均为null
示例: demo/Demo10.java
2), 数组在声明时不能指定长度, 不能写为:
int[4] ia = {1,2,3,4}; // error
3), 数组的长度使用数组的属性length得到, 比如上面的
ia.length等于4
1/22/2013                  Course - J2SE Basic
static关键字
• static关键字用于修饰属性或者方法, 表示该成员是
  class级别的; static成员通常使用类名进行引用, 比如:
MyClassName.SOME_STATIC_MEMBER;
• static成员通常用于声明某些常量, 比如:
public static final String CNT_CUSTOMER = “someone”;
• static方法
  静态方法, 典型的static方法是main方法:
public static void main(String[] args) {…}
• 非static成员是对象级别的, 在对象初始化时会进行
  初始化;

1/22/2013             Course - J2SE Basic
static块
• static块用于在类的第一个对象被初始化或
  者static成员被访问时执行一些初始化工作,
  比如:
    static {
         System.out.println("i'm a static block");
     }

• 参考: demo/Demo2.java



1/22/2013                 Course - J2SE Basic
类访问控制
• public
该类为一个公共类, 可以在仸何地方被引用;
注意: 在一个源文件中只能有一个声明为
public的类; 示例:
public class YourClassName {….}
• N/A
没有修饰符, 该类为包访问权限, 表示该类只
能在当前包下面被引用; 示例:
class YourClassName {….}

1/22/2013     Course - J2SE Basic
类访问控制
• public
该类为一个公共类, 可以在仸何地方被引用;
注意: 在一个源文件中只能有一个声明为
public的类; 示例:
public class YourClassName {….}
• N/A
没有修饰符, 该类为包访问权限, 表示该类只
能在当前包下面被引用; 示例:
class YourClassName {….}

1/22/2013     Course - J2SE Basic
成员访问控制
Java提供了4种成员访问级别: 私有/受保护/公开/默认
• 私有访问级别
private关键字对成员进行修饰, 只允许在当前
类中访问该成员;
• 受保护访问级别
protected关键字, 允许在当前类及子类中访问;
• 公开访问级别
public关键字, 可以在仸何地方访问;
• 默认访问级别
也称包访问级别, 允许当前类和包下面的其他类访问.

1/22/2013    Course - J2SE Basic
属性声明
• 根据已经讲到的成员访问控制和static关键
  字, 可以对一个属性进行声明.
• 示例:
private int i; // 私有访问整型
public static int REFERENCE_COUNT; // 静态公共整型
protected String name; // 受保护字符串类型



1/22/2013          Course - J2SE Basic
方法声明
• 方法声明遵循如下格式:
Modifier ReturnType methodName( /* Argument list */ ){
/* Method body */
}
• Modifier 修饰符, 包括成员访问控制修饰符, 是否为静态方法
  (static);
• ReturnType 返回值类型, 方法可以返回原语类型(int, double,
  long), 也可以返回对象的引用; void表示方法没有返回值;
• methodName 方法名称
• Argument list 方法参数列表
• 示例:
public String getCustomerName() {……}
public void calcSum(int max) {…}



1/22/2013                                   Course - J2SE Basic
属性初始化
•   对于原语类型, 如果不指定初始化的值, 则按如下赋予初始化值:

      boolean               false
      char                  ‘u0000’ (null)
      byte                  (byte)0
      short                 (short)0
      int                   0
      long                  0L
      float                 0.0f
      double                0.0d
• 示例:
1, int i = 5; // 属性i已经指定了初始值
2, int i;     // 属性i没有指定初始值, 默认初始化为0




1/22/2013                       Course - J2SE Basic
属性初始化(续)
• 对于对象类型的属性, 如果没有指定初始值
  则初始化为null值;
• 示例:
String s; // 没有指定初始值, 初始化为null
String s = “abc”; // 初始值abc




1/22/2013     Course - J2SE Basic
null和空指针异常
• 空指针异常在java语言中臭名远播, 导致该
  异常的原因是在对象正确初始化之前(此时
  对象的值是null), 调用了该对象上的方法. eg:
String s = null;
System.out.println(s.toString()); // 空指针异常
• 在java中空指针异常是一种很常见的异常,
  通常可以认为是程序的bug, 需要尽力避免.


1/22/2013        Course - J2SE Basic
引用 &赋值
• Java语言中的对象实际上是指向该对象的一个引用. eg:
ClassA obj1 = new ClassA();
new关键字会导致一个ClassA对象被初始化,
并在堆上分配相应的内存区域; 对象创建完成
之后会返回一个指向该对象的引用及obj;
            Ref: obj1
                               int            long   String
• Java中对象的赋值操作传递的是对象引用. eg:
ClassA obj2 = obj1;
赋值之后obj2与obj1指向同一块内存区域
            Ref: obj1
                             int
                        Course - J2SE Basic   long   String
            Ref: obj2

1/22/2013
引用 &赋值
                  数组
• Java中数组的赋值操作与对象类似, 赋值后
  的数组引用将指向同一个数组对象, eg:
int[] ia1 = ...;
int[] ia2 = ia1; // ia1, ia2指向同一个数组对象
• 示例: demo/Demo20.java




1/22/2013       Course - J2SE Basic
封装(encapsulation)
• 类可以被认为是一种service, 提供给使用者
  调用;
• 封装指的是类只暴露出相关的接口, 而屏蔽
  其内部的实现; 这样带来的好处是: 在保持
  外部接口不变的情况下, 能够更改内部实现;
• 封装是OO的一个基本概念. Java通过包, 类/
  属性/方法访问权限等提供对封装的支持.


1/22/2013         Course - J2SE Basic
继承(inherition)
• 继承提供了一种方式用于实现现有类的重用, Java中
  的继承通过extends关键字实现. eg:
public ClassA extends ClassB {…}
在此类中ClassA是ClassB的子类, 后者是前者的父类. ClassA继
承了父类的所有public方法, 比如某方发是ClassB中定义的, 在
继承之后可以在ClassA上直接调用该方法.
• 继承表示的是一种is-a关系, 上例中ClassA的对象是
  一个ClassB, 在代码中这种is-a关系可以表示为: ClassA
    obj = new ClassB();
• Java中所有的类, 包括自定义的类, 都继承自
  java.lang.Object, 该类包含了一些很重要的方法以后
  会讲到.
• 示例: demo/Demo3.java
1/22/2013                 Course - J2SE Basic
覆盖和重载
               (override & overload)
• 方法的覆盖(override)是指子类重新实现父类已
  有的方法, 方法的签名(包含方法名称和参数列
  表)保持一致;
• 方法的重载(overload)是指 在同一个类中有多
  个名称相同的方法, 但是它们的参数签名不同.
  eg:
public void method1(String s);
public void method1(int i);
• 注意: 仅更改方法的返回类型不能构成重载, 这
  样会导致编译错误.
• 示例: demo/Demo4.java

1/22/2013                        Course - J2SE Basic
组合
• 组合是区别于继承的另一种重用技术, 通过
  将现有的类作为当前类的一个成员, 进而重
  用该类的功能; eg:
      class ClassA …
      class ClassB {
          ClassA reference;
          …
      }

• 组合表达的是一种has-a关系, 在很多情况下
  组合被认为是优于继承(is-a)的重用技术;
• 示例: demo/Demo5.java
1/22/2013                     Course - J2SE Basic
多态(polymorphic)
•     多态是指在运行时决定具体方法的调用.

                        Client                   Base
                                                service()



                                   Service1                 Service2


在Client中编写如下代码, 哪一个类的service方
法会被调用呢?
Base obj = getServiceImpl();
obj.service();
•     多态性决定了具体service方法的调用由运行时返回哪一个Base的实现决定, 如
      果返回Base则调用Base上的实现, 如果返回Service1则调用Service1的实现;
•     多态性是面向对象编程的一大基石, 为模块化开发/可插拔式开发提供了基础.
•     示例: demo/Demo6.java



1/22/2013                            Course - J2SE Basic
The END
1/22/2013     Course - J2SE Basic

Mais conteúdo relacionado

Mais procurados

Java SE 7 技術手冊投影片第 16 章 - 自訂泛型、列舉與標註
Java SE 7 技術手冊投影片第 16 章 - 自訂泛型、列舉與標註Java SE 7 技術手冊投影片第 16 章 - 自訂泛型、列舉與標註
Java SE 7 技術手冊投影片第 16 章 - 自訂泛型、列舉與標註Justin Lin
 
Java SE 8 技術手冊第 15 章 - 通用API
Java SE 8 技術手冊第 15 章 - 通用APIJava SE 8 技術手冊第 15 章 - 通用API
Java SE 8 技術手冊第 15 章 - 通用APIJustin Lin
 
Java SE 7 技術手冊投影片第 06 章 - 繼承與多型
Java SE 7 技術手冊投影片第 06 章 - 繼承與多型Java SE 7 技術手冊投影片第 06 章 - 繼承與多型
Java SE 7 技術手冊投影片第 06 章 - 繼承與多型Justin Lin
 
Java SE 7 技術手冊投影片第 14 章 - 整合資料庫
Java SE 7 技術手冊投影片第 14 章 - 整合資料庫Java SE 7 技術手冊投影片第 14 章 - 整合資料庫
Java SE 7 技術手冊投影片第 14 章 - 整合資料庫Justin Lin
 
從模組到類別
從模組到類別從模組到類別
從模組到類別Justin Lin
 
Java SE 7 技術手冊第二章草稿 - 從 JDK 到 IDE
Java SE 7 技術手冊第二章草稿 - 從 JDK 到 IDEJava SE 7 技術手冊第二章草稿 - 從 JDK 到 IDE
Java SE 7 技術手冊第二章草稿 - 從 JDK 到 IDEJustin Lin
 
Java Script 引擎技术
Java Script 引擎技术Java Script 引擎技术
Java Script 引擎技术bigqiang zou
 
Java SE 8 技術手冊第 10 章 - 輸入輸出
Java SE 8 技術手冊第 10 章 - 輸入輸出Java SE 8 技術手冊第 10 章 - 輸入輸出
Java SE 8 技術手冊第 10 章 - 輸入輸出Justin Lin
 
Java SE 7 技術手冊投影片第 05 章 - 物件封裝
Java SE 7 技術手冊投影片第 05 章  - 物件封裝Java SE 7 技術手冊投影片第 05 章  - 物件封裝
Java SE 7 技術手冊投影片第 05 章 - 物件封裝Justin Lin
 
《Python 3.5 技術手冊》第六章草稿
《Python 3.5 技術手冊》第六章草稿《Python 3.5 技術手冊》第六章草稿
《Python 3.5 技術手冊》第六章草稿Justin Lin
 
Java SE 7 技術手冊投影片第 09 章 - Collection與Map
Java SE 7 技術手冊投影片第 09 章 - Collection與MapJava SE 7 技術手冊投影片第 09 章 - Collection與Map
Java SE 7 技術手冊投影片第 09 章 - Collection與MapJustin Lin
 
Java SE 8 技術手冊第 4 章 - 認識物件
Java SE 8 技術手冊第 4 章 - 認識物件Java SE 8 技術手冊第 4 章 - 認識物件
Java SE 8 技術手冊第 4 章 - 認識物件Justin Lin
 
Java SE 8 技術手冊第 3 章 - 基礎語法
Java SE 8 技術手冊第 3 章 - 基礎語法Java SE 8 技術手冊第 3 章 - 基礎語法
Java SE 8 技術手冊第 3 章 - 基礎語法Justin Lin
 
Ecma script edition5-小试
Ecma script edition5-小试Ecma script edition5-小试
Ecma script edition5-小试lydiafly
 
Java SE 8 技術手冊第 2 章 - 從JDK到IDE
Java SE 8 技術手冊第 2 章 - 從JDK到IDEJava SE 8 技術手冊第 2 章 - 從JDK到IDE
Java SE 8 技術手冊第 2 章 - 從JDK到IDEJustin Lin
 
Java SE 8 技術手冊第 6 章 - 繼承與多型
Java SE 8 技術手冊第 6 章 - 繼承與多型Java SE 8 技術手冊第 6 章 - 繼承與多型
Java SE 8 技術手冊第 6 章 - 繼承與多型Justin Lin
 
Java SE 8 技術手冊第 14 章 - NIO 與 NIO2
Java SE 8 技術手冊第 14 章 - NIO 與 NIO2Java SE 8 技術手冊第 14 章 - NIO 與 NIO2
Java SE 8 技術手冊第 14 章 - NIO 與 NIO2Justin Lin
 
Java SE 8 技術手冊第 11 章 - 執行緒與並行API
Java SE 8 技術手冊第 11 章 - 執行緒與並行APIJava SE 8 技術手冊第 11 章 - 執行緒與並行API
Java SE 8 技術手冊第 11 章 - 執行緒與並行APIJustin Lin
 
IOS入门分享
IOS入门分享IOS入门分享
IOS入门分享zenyuhao
 

Mais procurados (20)

Java SE 7 技術手冊投影片第 16 章 - 自訂泛型、列舉與標註
Java SE 7 技術手冊投影片第 16 章 - 自訂泛型、列舉與標註Java SE 7 技術手冊投影片第 16 章 - 自訂泛型、列舉與標註
Java SE 7 技術手冊投影片第 16 章 - 自訂泛型、列舉與標註
 
Java SE 8 技術手冊第 15 章 - 通用API
Java SE 8 技術手冊第 15 章 - 通用APIJava SE 8 技術手冊第 15 章 - 通用API
Java SE 8 技術手冊第 15 章 - 通用API
 
Java SE 7 技術手冊投影片第 06 章 - 繼承與多型
Java SE 7 技術手冊投影片第 06 章 - 繼承與多型Java SE 7 技術手冊投影片第 06 章 - 繼承與多型
Java SE 7 技術手冊投影片第 06 章 - 繼承與多型
 
Java SE 7 技術手冊投影片第 14 章 - 整合資料庫
Java SE 7 技術手冊投影片第 14 章 - 整合資料庫Java SE 7 技術手冊投影片第 14 章 - 整合資料庫
Java SE 7 技術手冊投影片第 14 章 - 整合資料庫
 
從模組到類別
從模組到類別從模組到類別
從模組到類別
 
Java SE 7 技術手冊第二章草稿 - 從 JDK 到 IDE
Java SE 7 技術手冊第二章草稿 - 從 JDK 到 IDEJava SE 7 技術手冊第二章草稿 - 從 JDK 到 IDE
Java SE 7 技術手冊第二章草稿 - 從 JDK 到 IDE
 
Java Script 引擎技术
Java Script 引擎技术Java Script 引擎技术
Java Script 引擎技术
 
Java SE 8 技術手冊第 10 章 - 輸入輸出
Java SE 8 技術手冊第 10 章 - 輸入輸出Java SE 8 技術手冊第 10 章 - 輸入輸出
Java SE 8 技術手冊第 10 章 - 輸入輸出
 
Java 網路程式
Java 網路程式Java 網路程式
Java 網路程式
 
Java SE 7 技術手冊投影片第 05 章 - 物件封裝
Java SE 7 技術手冊投影片第 05 章  - 物件封裝Java SE 7 技術手冊投影片第 05 章  - 物件封裝
Java SE 7 技術手冊投影片第 05 章 - 物件封裝
 
《Python 3.5 技術手冊》第六章草稿
《Python 3.5 技術手冊》第六章草稿《Python 3.5 技術手冊》第六章草稿
《Python 3.5 技術手冊》第六章草稿
 
Java SE 7 技術手冊投影片第 09 章 - Collection與Map
Java SE 7 技術手冊投影片第 09 章 - Collection與MapJava SE 7 技術手冊投影片第 09 章 - Collection與Map
Java SE 7 技術手冊投影片第 09 章 - Collection與Map
 
Java SE 8 技術手冊第 4 章 - 認識物件
Java SE 8 技術手冊第 4 章 - 認識物件Java SE 8 技術手冊第 4 章 - 認識物件
Java SE 8 技術手冊第 4 章 - 認識物件
 
Java SE 8 技術手冊第 3 章 - 基礎語法
Java SE 8 技術手冊第 3 章 - 基礎語法Java SE 8 技術手冊第 3 章 - 基礎語法
Java SE 8 技術手冊第 3 章 - 基礎語法
 
Ecma script edition5-小试
Ecma script edition5-小试Ecma script edition5-小试
Ecma script edition5-小试
 
Java SE 8 技術手冊第 2 章 - 從JDK到IDE
Java SE 8 技術手冊第 2 章 - 從JDK到IDEJava SE 8 技術手冊第 2 章 - 從JDK到IDE
Java SE 8 技術手冊第 2 章 - 從JDK到IDE
 
Java SE 8 技術手冊第 6 章 - 繼承與多型
Java SE 8 技術手冊第 6 章 - 繼承與多型Java SE 8 技術手冊第 6 章 - 繼承與多型
Java SE 8 技術手冊第 6 章 - 繼承與多型
 
Java SE 8 技術手冊第 14 章 - NIO 與 NIO2
Java SE 8 技術手冊第 14 章 - NIO 與 NIO2Java SE 8 技術手冊第 14 章 - NIO 與 NIO2
Java SE 8 技術手冊第 14 章 - NIO 與 NIO2
 
Java SE 8 技術手冊第 11 章 - 執行緒與並行API
Java SE 8 技術手冊第 11 章 - 執行緒與並行APIJava SE 8 技術手冊第 11 章 - 執行緒與並行API
Java SE 8 技術手冊第 11 章 - 執行緒與並行API
 
IOS入门分享
IOS入门分享IOS入门分享
IOS入门分享
 

Destaque

Destaque (14)

Informatie, Middel Voor Gezonde Sturing
Informatie, Middel Voor Gezonde SturingInformatie, Middel Voor Gezonde Sturing
Informatie, Middel Voor Gezonde Sturing
 
Harsh Pershad (Innovate UK) presenting 'Funding Opportunities from Innovate U...
Harsh Pershad (Innovate UK) presenting 'Funding Opportunities from Innovate U...Harsh Pershad (Innovate UK) presenting 'Funding Opportunities from Innovate U...
Harsh Pershad (Innovate UK) presenting 'Funding Opportunities from Innovate U...
 
7, reusing classes
7, reusing classes7, reusing classes
7, reusing classes
 
01 Gedda Jfk2009
01 Gedda Jfk200901 Gedda Jfk2009
01 Gedda Jfk2009
 
Copia de experiencia de aula
Copia de experiencia de aulaCopia de experiencia de aula
Copia de experiencia de aula
 
cv
cvcv
cv
 
Handleiding Forecast Solution Shared
Handleiding Forecast Solution SharedHandleiding Forecast Solution Shared
Handleiding Forecast Solution Shared
 
4, grep
4, grep4, grep
4, grep
 
Каталог Bravolli
Каталог BravolliКаталог Bravolli
Каталог Bravolli
 
Master Genzyme Presentation
Master Genzyme PresentationMaster Genzyme Presentation
Master Genzyme Presentation
 
Formation Gestalt IFFP 2017
Formation Gestalt IFFP 2017Formation Gestalt IFFP 2017
Formation Gestalt IFFP 2017
 
Seo in raipur
Seo in raipurSeo in raipur
Seo in raipur
 
три дерева - Three Trees
три дерева - Three Treesтри дерева - Three Trees
три дерева - Three Trees
 
Welcome To Deep Tissue Massage
Welcome To Deep Tissue MassageWelcome To Deep Tissue Massage
Welcome To Deep Tissue Massage
 

Semelhante a 2, object oriented programming

5, initialization & cleanup
5, initialization & cleanup5, initialization & cleanup
5, initialization & cleanupted-xu
 
[圣思园][Java SE]Jdk5
[圣思园][Java SE]Jdk5[圣思园][Java SE]Jdk5
[圣思园][Java SE]Jdk5ArBing Xie
 
GDSC FCU 第2堂 Kotlin
GDSC FCU 第2堂 KotlinGDSC FCU 第2堂 Kotlin
GDSC FCU 第2堂 KotlinFCUGDSC
 
Ecmascript
EcmascriptEcmascript
Ecmascriptjay li
 
10, inner classes
10, inner classes10, inner classes
10, inner classested-xu
 
中远公司 Java培训资料
中远公司  Java培训资料中远公司  Java培训资料
中远公司 Java培训资料yiditushe
 
Java面试笔试题大汇总
Java面试笔试题大汇总Java面试笔试题大汇总
Java面试笔试题大汇总yiditushe
 
Java相关基础知识
Java相关基础知识Java相关基础知识
Java相关基础知识yiditushe
 
12, string
12, string12, string
12, stringted-xu
 
Python面向对象开发基础篇
Python面向对象开发基础篇Python面向对象开发基础篇
Python面向对象开发基础篇modou li
 
2. java introduction
2. java introduction2. java introduction
2. java introductionnetdbncku
 
模块一-Go语言特性.pdf
模块一-Go语言特性.pdf模块一-Go语言特性.pdf
模块一-Go语言特性.pdfczzz1
 
Java程序员面试之葵花宝典
Java程序员面试之葵花宝典Java程序员面试之葵花宝典
Java程序员面试之葵花宝典yiditushe
 
Java面试题集
Java面试题集Java面试题集
Java面试题集yiditushe
 
Notes of jcip
Notes of jcipNotes of jcip
Notes of jcipDai Jun
 
9, interfaces
9, interfaces9, interfaces
9, interfacested-xu
 
[圣思园][Java SE]Reflection
[圣思园][Java SE]Reflection[圣思园][Java SE]Reflection
[圣思园][Java SE]ReflectionArBing Xie
 

Semelhante a 2, object oriented programming (20)

5, initialization & cleanup
5, initialization & cleanup5, initialization & cleanup
5, initialization & cleanup
 
[圣思园][Java SE]Jdk5
[圣思园][Java SE]Jdk5[圣思园][Java SE]Jdk5
[圣思园][Java SE]Jdk5
 
GDSC FCU 第2堂 Kotlin
GDSC FCU 第2堂 KotlinGDSC FCU 第2堂 Kotlin
GDSC FCU 第2堂 Kotlin
 
Ecmascript
EcmascriptEcmascript
Ecmascript
 
10, inner classes
10, inner classes10, inner classes
10, inner classes
 
Sun java
Sun javaSun java
Sun java
 
中远公司 Java培训资料
中远公司  Java培训资料中远公司  Java培训资料
中远公司 Java培训资料
 
Java面试笔试题大汇总
Java面试笔试题大汇总Java面试笔试题大汇总
Java面试笔试题大汇总
 
Java相关基础知识
Java相关基础知识Java相关基础知识
Java相关基础知识
 
12, string
12, string12, string
12, string
 
Python面向对象开发基础篇
Python面向对象开发基础篇Python面向对象开发基础篇
Python面向对象开发基础篇
 
2. java introduction
2. java introduction2. java introduction
2. java introduction
 
模块一-Go语言特性.pdf
模块一-Go语言特性.pdf模块一-Go语言特性.pdf
模块一-Go语言特性.pdf
 
Jdk5
Jdk5Jdk5
Jdk5
 
Java程序员面试之葵花宝典
Java程序员面试之葵花宝典Java程序员面试之葵花宝典
Java程序员面试之葵花宝典
 
Excel VBA
Excel VBAExcel VBA
Excel VBA
 
Java面试题集
Java面试题集Java面试题集
Java面试题集
 
Notes of jcip
Notes of jcipNotes of jcip
Notes of jcip
 
9, interfaces
9, interfaces9, interfaces
9, interfaces
 
[圣思园][Java SE]Reflection
[圣思园][Java SE]Reflection[圣思园][Java SE]Reflection
[圣思园][Java SE]Reflection
 

Mais de ted-xu

11, OCP - awr & alert system
11, OCP - awr & alert system11, OCP - awr & alert system
11, OCP - awr & alert systemted-xu
 
10, OCP - flashback
10, OCP - flashback10, OCP - flashback
10, OCP - flashbackted-xu
 
9, OCP - restore and recovery with rman
9, OCP - restore and recovery with rman9, OCP - restore and recovery with rman
9, OCP - restore and recovery with rmanted-xu
 
8, OCP - backup with rman
8, OCP - backup with rman8, OCP - backup with rman
8, OCP - backup with rmanted-xu
 
7, OCP - configure database for backup and recovery
7, OCP - configure database for backup and recovery7, OCP - configure database for backup and recovery
7, OCP - configure database for backup and recoveryted-xu
 
6, OCP - oracle security
6, OCP - oracle security6, OCP - oracle security
6, OCP - oracle securityted-xu
 
5, OCP - oracle storage
5, OCP - oracle storage5, OCP - oracle storage
5, OCP - oracle storageted-xu
 
4, OCP - oracle networking
4, OCP - oracle networking4, OCP - oracle networking
4, OCP - oracle networkingted-xu
 
3, OCP - instance management
3, OCP - instance management3, OCP - instance management
3, OCP - instance managementted-xu
 
2, OCP - installing and creating a database
2, OCP - installing and creating a database2, OCP - installing and creating a database
2, OCP - installing and creating a databaseted-xu
 
1, OCP - architecture intro
1, OCP - architecture intro1, OCP - architecture intro
1, OCP - architecture introted-xu
 
12, OCP - performance tuning
12, OCP - performance tuning12, OCP - performance tuning
12, OCP - performance tuningted-xu
 
7, business event system
7, business event system7, business event system
7, business event systemted-xu
 
6, workflow miscellaneous
6, workflow miscellaneous6, workflow miscellaneous
6, workflow miscellaneousted-xu
 
5, workflow function activity
5, workflow function activity5, workflow function activity
5, workflow function activityted-xu
 
4, workflow tables & api
4, workflow tables & api4, workflow tables & api
4, workflow tables & apited-xu
 
3, workflow in ebs
3, workflow in ebs3, workflow in ebs
3, workflow in ebsted-xu
 
2, a simple workflow
2, a simple workflow2, a simple workflow
2, a simple workflowted-xu
 
1, workflow intro
1, workflow intro1, workflow intro
1, workflow introted-xu
 
8, bes tables & api
8, bes tables & api8, bes tables & api
8, bes tables & apited-xu
 

Mais de ted-xu (20)

11, OCP - awr & alert system
11, OCP - awr & alert system11, OCP - awr & alert system
11, OCP - awr & alert system
 
10, OCP - flashback
10, OCP - flashback10, OCP - flashback
10, OCP - flashback
 
9, OCP - restore and recovery with rman
9, OCP - restore and recovery with rman9, OCP - restore and recovery with rman
9, OCP - restore and recovery with rman
 
8, OCP - backup with rman
8, OCP - backup with rman8, OCP - backup with rman
8, OCP - backup with rman
 
7, OCP - configure database for backup and recovery
7, OCP - configure database for backup and recovery7, OCP - configure database for backup and recovery
7, OCP - configure database for backup and recovery
 
6, OCP - oracle security
6, OCP - oracle security6, OCP - oracle security
6, OCP - oracle security
 
5, OCP - oracle storage
5, OCP - oracle storage5, OCP - oracle storage
5, OCP - oracle storage
 
4, OCP - oracle networking
4, OCP - oracle networking4, OCP - oracle networking
4, OCP - oracle networking
 
3, OCP - instance management
3, OCP - instance management3, OCP - instance management
3, OCP - instance management
 
2, OCP - installing and creating a database
2, OCP - installing and creating a database2, OCP - installing and creating a database
2, OCP - installing and creating a database
 
1, OCP - architecture intro
1, OCP - architecture intro1, OCP - architecture intro
1, OCP - architecture intro
 
12, OCP - performance tuning
12, OCP - performance tuning12, OCP - performance tuning
12, OCP - performance tuning
 
7, business event system
7, business event system7, business event system
7, business event system
 
6, workflow miscellaneous
6, workflow miscellaneous6, workflow miscellaneous
6, workflow miscellaneous
 
5, workflow function activity
5, workflow function activity5, workflow function activity
5, workflow function activity
 
4, workflow tables & api
4, workflow tables & api4, workflow tables & api
4, workflow tables & api
 
3, workflow in ebs
3, workflow in ebs3, workflow in ebs
3, workflow in ebs
 
2, a simple workflow
2, a simple workflow2, a simple workflow
2, a simple workflow
 
1, workflow intro
1, workflow intro1, workflow intro
1, workflow intro
 
8, bes tables & api
8, bes tables & api8, bes tables & api
8, bes tables & api
 

2, object oriented programming

  • 2. Agenda • OOP简介 - 1 • OOP简介 - 2 • 类 和 对象 • Java包 • import static • Java包 - 编译及运行 • 属性和方法 • 属性: 原语类型 1/22/2013 Course - J2SE Basic
  • 3. 属性: 非原语类型 • static关键字 • static块 • 类访问控制 • 成员访问控制 • 属性声明 • 方法声明 • 属性初始化 1/22/2013 Course - J2SE Basic
  • 4. OOP-1 • 面向对象编程, 简称OOP; • OOP在于对问题域进行抽象和分解,生成领 域模型. 比如制造一辆汽车: 1/22/2013 Course - J2SE Basic
  • 5. OOP-2 • 一切都是对象; • 程序由相互交互的对象组成; • 每个对象都有自己的内存空间, 并引用其他 的对象; • 每个对象都有自己的类型; • 同一种类型的对象具有相同的接口. 1/22/2013 Course - J2SE Basic
  • 6. 类和对象 • 类是对象的模板; 根据类的定义, 从而创建相应的对象; • 类的定义 关键字class, 用于在java中声明一个类, 一个 源文件中只能有一个public访问类型的类, 并且该类的名称与源文件名称相同. 比如: Integer.java对应public class Integer {……} • 示例 Light表示一个类, 对应的是现实生活中的 灯泡.Light有价格(price), 大小规格(size)等属性; 并提供了打开(on), 关闭(off), 加亮(brighten), 减暗(dim)等接口供调用; • 对象的定义 关键字new, 用于创建一个对象, 示例: Light lt = new Light(); // 这里lt就是一个对象 1/22/2013 Course - J2SE Basic
  • 7. 类和对象 • 可以在一个java源文件中定义多个类, 如果 有public类, 则该类的名称必须与文件名相同. • 参考: demo/Demo1.java 1/22/2013 Course - J2SE Basic
  • 8. Java包 • Java包机制的好处: 1, 避免名字空间污染; 2, 可以根据不同的模块/组件定义相应的包名; • 关键字package, 出现在java原文件开头, 声明java包; 如果包有多个层次使用”.”分割; • 关键字import 用于引用某个包下面的类: 1, import java.util.Map; 引用单个类 2, import java.util.*; 引用该包下面所有的类 默认情况下会自动引入java.lang包, 因此该包下面的Integer/Double等类可以被直接使用. • 示例: package demo; public class HelloWorld { public static void main(String[] args) { System.out.println("hello world"); } } 1/22/2013 Course - J2SE Basic
  • 9. import static • 这是在jdk5中引入的一个新特性, 用于 import某个类下面的static方法, 这样在调用 该方法时可以直接写成methodCall()的形式, 而无需写成someClass.methodCall()的形式; • 通过.*的写法引入类下面的所有static方法; • 约定: 在以后的示例中经常会引入util.Print.*, 以简化程序; • 示例: demo/Demo7.java 1/22/2013 Course - J2SE Basic
  • 10. Java包 编译及运行 • 将该java源文件放在包声明的子目录下面, 这里的包名是demo, 因此放在demo子目录 下面; 如果是包分了多个层次, 则需要创建 相应的目录层次. 比如, java.util包对应的目 录是java/util • 按照如下方式编译运行: 1/22/2013 Course - J2SE Basic
  • 11. 属性和方法 • Java类由两部分组成: 属性和方法. 示例: public class Light { double price; // 价格属性 double size; // 大小属性 public void on() {} //方法: 打开 public void off() {} //方法: 关闭 public void brighten() {} //方法: 加亮 public void dim() {} //方法: 变暗 …………. • 属性可以是基本的数据类型, 比如整型, bool型; 也可以是其他对象的引 用; • Light类的属性: price, size; • Light类的方法: on, off, brighten, dim; • 参考: demo/Light.java 1/22/2013 Course - J2SE Basic
  • 12. 属性: 原语类型 • 原语类型属性是指整型, 长整型, 浮点型, 双精度浮点型等基本数据类型, 比如: int i = 5; // 整型原语类型 boolean isCertified = false; // 布尔型原语类型 • 每个原语类型对应一个包装类, 比如int对应java.lang.Integer. 原语类型的数据范 围: 1/22/2013 Course - J2SE Basic
  • 13. 属性:非原语类型 • 非原语类型有: 1, 对象 String s = “abc”; // 字符串对象 Map map = null; // 键值对象 2, 数组对象 表示某个原语类型或者对象的集合. 1), Java中声明一个数组, eg: int[] ia = {1,2,3,4}; // 也可以写成int ia[] = ...... int[] ia = new int[4]; // 数组长度为4, 各个元素的值均为0 Object[] objs = new Object[8]; // 数组长度为8, 各个元素均为null 示例: demo/Demo10.java 2), 数组在声明时不能指定长度, 不能写为: int[4] ia = {1,2,3,4}; // error 3), 数组的长度使用数组的属性length得到, 比如上面的 ia.length等于4 1/22/2013 Course - J2SE Basic
  • 14. static关键字 • static关键字用于修饰属性或者方法, 表示该成员是 class级别的; static成员通常使用类名进行引用, 比如: MyClassName.SOME_STATIC_MEMBER; • static成员通常用于声明某些常量, 比如: public static final String CNT_CUSTOMER = “someone”; • static方法 静态方法, 典型的static方法是main方法: public static void main(String[] args) {…} • 非static成员是对象级别的, 在对象初始化时会进行 初始化; 1/22/2013 Course - J2SE Basic
  • 15. static块 • static块用于在类的第一个对象被初始化或 者static成员被访问时执行一些初始化工作, 比如: static { System.out.println("i'm a static block"); } • 参考: demo/Demo2.java 1/22/2013 Course - J2SE Basic
  • 16. 类访问控制 • public 该类为一个公共类, 可以在仸何地方被引用; 注意: 在一个源文件中只能有一个声明为 public的类; 示例: public class YourClassName {….} • N/A 没有修饰符, 该类为包访问权限, 表示该类只 能在当前包下面被引用; 示例: class YourClassName {….} 1/22/2013 Course - J2SE Basic
  • 17. 类访问控制 • public 该类为一个公共类, 可以在仸何地方被引用; 注意: 在一个源文件中只能有一个声明为 public的类; 示例: public class YourClassName {….} • N/A 没有修饰符, 该类为包访问权限, 表示该类只 能在当前包下面被引用; 示例: class YourClassName {….} 1/22/2013 Course - J2SE Basic
  • 18. 成员访问控制 Java提供了4种成员访问级别: 私有/受保护/公开/默认 • 私有访问级别 private关键字对成员进行修饰, 只允许在当前 类中访问该成员; • 受保护访问级别 protected关键字, 允许在当前类及子类中访问; • 公开访问级别 public关键字, 可以在仸何地方访问; • 默认访问级别 也称包访问级别, 允许当前类和包下面的其他类访问. 1/22/2013 Course - J2SE Basic
  • 19. 属性声明 • 根据已经讲到的成员访问控制和static关键 字, 可以对一个属性进行声明. • 示例: private int i; // 私有访问整型 public static int REFERENCE_COUNT; // 静态公共整型 protected String name; // 受保护字符串类型 1/22/2013 Course - J2SE Basic
  • 20. 方法声明 • 方法声明遵循如下格式: Modifier ReturnType methodName( /* Argument list */ ){ /* Method body */ } • Modifier 修饰符, 包括成员访问控制修饰符, 是否为静态方法 (static); • ReturnType 返回值类型, 方法可以返回原语类型(int, double, long), 也可以返回对象的引用; void表示方法没有返回值; • methodName 方法名称 • Argument list 方法参数列表 • 示例: public String getCustomerName() {……} public void calcSum(int max) {…} 1/22/2013 Course - J2SE Basic
  • 21. 属性初始化 • 对于原语类型, 如果不指定初始化的值, 则按如下赋予初始化值: boolean false char ‘u0000’ (null) byte (byte)0 short (short)0 int 0 long 0L float 0.0f double 0.0d • 示例: 1, int i = 5; // 属性i已经指定了初始值 2, int i; // 属性i没有指定初始值, 默认初始化为0 1/22/2013 Course - J2SE Basic
  • 22. 属性初始化(续) • 对于对象类型的属性, 如果没有指定初始值 则初始化为null值; • 示例: String s; // 没有指定初始值, 初始化为null String s = “abc”; // 初始值abc 1/22/2013 Course - J2SE Basic
  • 23. null和空指针异常 • 空指针异常在java语言中臭名远播, 导致该 异常的原因是在对象正确初始化之前(此时 对象的值是null), 调用了该对象上的方法. eg: String s = null; System.out.println(s.toString()); // 空指针异常 • 在java中空指针异常是一种很常见的异常, 通常可以认为是程序的bug, 需要尽力避免. 1/22/2013 Course - J2SE Basic
  • 24. 引用 &赋值 • Java语言中的对象实际上是指向该对象的一个引用. eg: ClassA obj1 = new ClassA(); new关键字会导致一个ClassA对象被初始化, 并在堆上分配相应的内存区域; 对象创建完成 之后会返回一个指向该对象的引用及obj; Ref: obj1 int long String • Java中对象的赋值操作传递的是对象引用. eg: ClassA obj2 = obj1; 赋值之后obj2与obj1指向同一块内存区域 Ref: obj1 int Course - J2SE Basic long String Ref: obj2 1/22/2013
  • 25. 引用 &赋值 数组 • Java中数组的赋值操作与对象类似, 赋值后 的数组引用将指向同一个数组对象, eg: int[] ia1 = ...; int[] ia2 = ia1; // ia1, ia2指向同一个数组对象 • 示例: demo/Demo20.java 1/22/2013 Course - J2SE Basic
  • 26. 封装(encapsulation) • 类可以被认为是一种service, 提供给使用者 调用; • 封装指的是类只暴露出相关的接口, 而屏蔽 其内部的实现; 这样带来的好处是: 在保持 外部接口不变的情况下, 能够更改内部实现; • 封装是OO的一个基本概念. Java通过包, 类/ 属性/方法访问权限等提供对封装的支持. 1/22/2013 Course - J2SE Basic
  • 27. 继承(inherition) • 继承提供了一种方式用于实现现有类的重用, Java中 的继承通过extends关键字实现. eg: public ClassA extends ClassB {…} 在此类中ClassA是ClassB的子类, 后者是前者的父类. ClassA继 承了父类的所有public方法, 比如某方发是ClassB中定义的, 在 继承之后可以在ClassA上直接调用该方法. • 继承表示的是一种is-a关系, 上例中ClassA的对象是 一个ClassB, 在代码中这种is-a关系可以表示为: ClassA obj = new ClassB(); • Java中所有的类, 包括自定义的类, 都继承自 java.lang.Object, 该类包含了一些很重要的方法以后 会讲到. • 示例: demo/Demo3.java 1/22/2013 Course - J2SE Basic
  • 28. 覆盖和重载 (override & overload) • 方法的覆盖(override)是指子类重新实现父类已 有的方法, 方法的签名(包含方法名称和参数列 表)保持一致; • 方法的重载(overload)是指 在同一个类中有多 个名称相同的方法, 但是它们的参数签名不同. eg: public void method1(String s); public void method1(int i); • 注意: 仅更改方法的返回类型不能构成重载, 这 样会导致编译错误. • 示例: demo/Demo4.java 1/22/2013 Course - J2SE Basic
  • 29. 组合 • 组合是区别于继承的另一种重用技术, 通过 将现有的类作为当前类的一个成员, 进而重 用该类的功能; eg: class ClassA … class ClassB { ClassA reference; … } • 组合表达的是一种has-a关系, 在很多情况下 组合被认为是优于继承(is-a)的重用技术; • 示例: demo/Demo5.java 1/22/2013 Course - J2SE Basic
  • 30. 多态(polymorphic) • 多态是指在运行时决定具体方法的调用. Client Base service() Service1 Service2 在Client中编写如下代码, 哪一个类的service方 法会被调用呢? Base obj = getServiceImpl(); obj.service(); • 多态性决定了具体service方法的调用由运行时返回哪一个Base的实现决定, 如 果返回Base则调用Base上的实现, 如果返回Service1则调用Service1的实现; • 多态性是面向对象编程的一大基石, 为模块化开发/可插拔式开发提供了基础. • 示例: demo/Demo6.java 1/22/2013 Course - J2SE Basic
  • 31. The END 1/22/2013 Course - J2SE Basic