• 1. 第三章 Java概述3.1 变量 3.2 代码中的注释 3.3 有名常量 3.3.1 Unicode字符 3.4 控制流 3.5 类和对象 3.5.1 创建对象 3.5.2 静态域或类域 3.6 方法和参数 3.6.1 方法的调用 3.6.2 this引用 3.6.3 静态方法或类方法 3.7 数组 3.8 字符串对象 3.9 类的扩展 3.9.1 Object类 3.9.2 调用超类中的方法 3.10 接口 3.11 异常 3.12 包 3.13 其它主题简介
  • 2. Java有8种内置的初等类型以帮助我们构造Java类和接口 初等类型是构造类型的原材料,与C/C++的语法结构一致 只需在类型中说明初等类型的变量,而无需创建(new)就可存在 Java没有“缺省”类型,每个变量的类型必须显式定义3.1 变量初等类型存储空间(位)最小值最大值封装类byte8-2727-1Byteshort16-215215-1Shortint32-231231-1Integerlong64-263263-1Longfloat32IEEE754浮点数标准IEEE754浮点数标准Floatdouble64IEEE754浮点数标准IEEE754浮点数标准Doubleboolean8Booleanchar16Unicode0Unicode216-1Character
  • 3. 3.1 变量class PartialSum { /* * Print out the Partial Sum for n≤50 */ public static void main(String[] args) { int s = 0; int i = 1; while (i <= 50) { s = s + i * i; /* New PartialSum is old PartialSum plus i2 */ i = i + 1; // new term number System.out.println(s); } } } 打印无穷级数 的部分和 ,给出n《50的所有值 所有关键字均小写,所有变量名均大小写敏感 println是一种名复用(overload)的方法,名复用方法可以接收不同类型的参数类名初等类型在说明时,若以后要访问该变量则需赋初值。如果仅定义,可以不赋初值。While循环接收一个int值
  • 4. 3.2 代码中的注释package PartialSum; /** Print out the Partial Sum for n≤50 */ public class PartialSum { public static void main(String[] args) { int s = 0; int i = 1; while (i <= 50) { s = s + i * i; /* New PartialSum is old PartialSum plus i2 */ i = i + 1; // new term number System.out.println(s); } } } 主要有三种 1. “//”后面加上直到行末的一段文字,会被编译器略去 2. “/*”和“*/”间的一段文字,可以注释多行 3. “/**”和“*/”间的一段文字,用于描述其后说明中的内容。可被javadoc 工具提取以生成HTML文本。123
  • 5. 常量是直接指出的值,不由计算得到的,在程序执行中保持不变 命名常量:在一个类中,为一个常量给一个命名 Java中创建有名常量是用static和final来说明一个变量,在说明中提供一个初始化值 可用于描述特定值的含义 一处定义,一处修改,程序的维护更加方便 花色的选择可用Suit.HEARTS,Suit.SPADES等存取3.3 有名常量static final float π = 3.1416; static final double π = 3.14159265358979323846;Class Suit{ final static int CLUBS = 1; final static int DIAMONDS = 2; final static int HEARTS = 3; final static int SPADES = 4;
  • 6. 使用了π字符作为常量的名字,在大多数程序设计语言中,标识符被严格限制在ASCII字符集中的字母和数字 Java用Unicode来编写Java代码(Unicode是一个国际标准字符集) Java程序在编译时自动将ASCII和ISO-Latin-1字符转变为Unicode字符3.3 有名常量- 3.3.1 Unicode字符static final float π = 3.1416; static final double π = 3.14159265358979323846;字符集位数Unicode16ASCII7ISO-Latin-18
  • 7. 3.4 控制流条件语句if elseswitch循环语句forwhiledo-while跳转语句returnbreakcontinue块(分程序)“{}”异常处理语句throw控制流描述的是在程序运行时决定执行哪条语句的问题 块是用{}封装起来的多个语句,也被称为“分程序”
  • 8. 改进的打印无穷级数的程序,要求在输出结果中用“*”标注所有偶数的数字序列3.4 控制流class ImprovedPartialSum { /** Print out the first few PartialSum numbers marking evens with a”*” */ static final int MAX_INDEX = 10 ; public static void main(String[] args) { int s = 0; String mark; for (int i = 1 ; i < MAX_INDEX; i++) { s = s + i * i; if (s % 2 == 0) mark = * ; else mark =; System.out.println(i +  :  + s + mark); } } } 程序运行结果: 1: 1 2: 5 3: 14 * 4: 30 * 5: 55 6: 91 … static:一个类仅此一个变量,而不是每个对象都有一个。for语句三要素:初始化、条件判断和控制%:取余数整数 + 字符串 + 整数 + 字符串
  • 9. 类是描述对象的“基本原型”,是对象的抽象及描述,是具有共同属性和操作的多个对象的相似特性的统一描述体。 每个类中包含两种成份: 域(field):与类和该类对象相关联的数据变量。域中存储执行方法的结果 方法(method):一个语句集合,可执行代码。 程序中的对象是类的一个实例,是一个软件单元,它由一组结构化的数据和在其上的一组操作构成。 对象的属性是指描述对象的数据 对象的行为是定义在对象属性上的一组操作方法(method)的集合。 类与对象间的关系:3.5 类和对象fieldmethods静态动态,有生命期类对象抽象实例化Class Point{ public double x,y; }
  • 10. 3.5.1 创建对象 Point lowerLeft = new Point() Point upperRight = new Point() Point middlePoint = new Point()  lowerLeft.x = 0.0; lowerleft.y = 0.0;  upperRight.x = 1280.0; upperRight.y = 1024.0; middlePoint.x = 640.0 middlePoint.y = 512.0; 创建对象给对象赋值使用包含“new”关键字的表达式创建对象,返回该对象的引用。从一个类定义创建一个对象被称为实例化 Java中的对象都通过“对象引用”(object reference)来访问 持有一个对象的变量实质上表示了对该对象的引用,当变量不再引用任何对象时,该对象引用就是null 多数情况下,对象和对象引用的区别被忽略,与C/C++不同。
  • 11. 类变量:同类的各对象之间共享的变量(域)。是类的变量,非对象的变量 Java中用static来说明一个域是类域,通常被称为静态域 不论是否创建对象,静态域都存在 System.out.println:out是System类中的一个静态域 静态域的调用方式是:类名.域名 or 类名.域名.方法名(调用静态域的方法) 3.5.2 静态域或类域 public static Point origin = new Point();
  • 12. 面向对象技术的一个好处是“封装性”,即把类的实现隐藏在作用于内部数据的操作中 将数据隐藏在方法后面,使其他对象只能通过方法来操作数据 安全性 方便维护 简化设计 方法除其名称外,可以有0个或多个实参 方法可返回某种类型的一个值,也可以用void表示不返回任何值 方法的基调:方法的名称和参数的数目和类型 方法的语句用{}括起来,并置于方法基调的说明之后 方法所属类的域和其它方法可直接用其名,而无需显式地冠以对象引用 3.6 方法和参数 public void clear() { x = 0; y = 0; }不返回值基调方法的语句
  • 13. 一个设计良好的类隐藏自己的数据,且使数据仅能被自己类中的方法改变 方法的调用方式:对象引用 + “.” + 方法名(实参量) 如: upperRight.clear() 方法可返回单个值或单个对象作为执行结果 3.6.1 方法的调用 public double distance(Point that){ double xdiff,ydiff; xdiff = x - that.x; ydiff = y - that.y return Math.sqrt(xdiff * xdiff + ydiff * ydiff); } 调用语句:double d = lowerLeft.distance(upperRight);
  • 14. this:隐式引用,表示当前接受对象的引用,用途有两种 作为调用方法的对象的实参量 避免命名冲突3.6.2 this引用 public void clear() { this.x = 0; this.y = 0; } public void move(double x,double y) { this.x = x; this.y = y; }
  • 15. 类方法:特定类本身的操作,一般作用于静态域,而非作用于特定的对象 类方法用static关键字说明,因此类方法也被称为静态方法 静态方法不能直接访问非静态成员,也不能有this引用 调用静态方法时,没有特定的对象引用来指明被操作的对象 静态方法的调用方式:类名.方法名(实参表) 可把对象引用作为参数传给静态方法 静态方法完成类的操作 静态方法完成各种对象的操作 Point中用类方法实现distance3.6.3 静态方法或类方法 public static double distance(Point p1, Point p2) { double xdiff, ydiff; xdiff = p1.x – p2.x; ydiff = p1.y – p2.y; return Math.sqrt(xdiff * xdiff + ydiff * ydiff); } 调用方式:double d = Point.distance(lowerLeft, upperRight) sqrt: Math类的静态方法,开平方根
  • 16. 3.7 数组Class Card{ public int suit; public int number; } class Deck { final int DECK_SIZE = 52; Card[] cards = new Card[DECK_SIZE]; public void print(){ for(int i = 0; i < cards.length; i++) System.out.println(cards[i]); } }数组:同一类型变量的有序集合 每个数组对象有一个域length,表示数组中元素的数量 数组的长度在其使用过程中不能改变 数组下标范围:0~length-1的整数 通过数组下标来访问数组中的元素,若下标超过范围,将引发IndexOutBoundsException异常说明一个数组:类型[] 变量名数组中每个元素为null数组名后用[]将所需元素的下标括起来
  • 17. String是一个Java类,而不是字符char的数组 Java语言中String对象直接初始化,无需用new来创建一个String对象, 如System.out.println(“Hello,World”); String的加法“+”原则 首先两边先确保转变为字符串 然后联接成一个String对象 字符串对象有一个length方法,表示字符串中字符的数量 字符串对象是只读的,字符串对象的内容在运行中不改变 equals方法用于比较两个字符串的内容是否相同,而不是“==”3.8 字符串对象 class StringsDemo { static public void main(String args[]){ String myName = “Petronius”; myName = myName + “Arbiter”; System.out.println(“Name = “+ myName); } } 创建对象引用“+”:字符串连接操作符
  • 18. 扩展类:新类继承了被扩展类的所有域和方法,原有的被扩展的类称为超类 1. 全新的 2. 对原行为的进一步限定 任何对超类对象进行处理的代码也能作用于子类对象上 多态性:一个对象可以是几个类的实例。3.9 类的扩展class Pixel extends Point { Color color; public void clear(){ super.Clear(); color = null; } }
  • 19. 没有显示扩展任何其它类的所有类都隐式地扩展于Object类 所有的对象引用都是Object类的多态形式 Object是最一般的类,该类型的引用可指向任何类的对象 所有类都隐含地扩展于Object类3.9.1 Object类 Object oref = new Pixel(); Oref = “some String”;
  • 20. 用super.方法名(实参表)调用超类中的方法,查找顺序是沿超类从下而上开始 1. super:超类的引用 2. this: 当前对象的引用 super方法的本质是从类的层次结构由下自上寻找方法名,直至找到,再调用执行 当调用一个方法时,对象的实际类型,而不是对象引用的类型3.9.2 调用超类中的方法 Point p = new Pixel(); p.clear(); 调用的是Pixel自己的clear方法超类:super超类:super当前类:current超类……
  • 21. 3.10 接口接口的本质:一个接口的目的是集中一组操作(抽象方法),形成一组类所提供的一组相关服务 接口(interface):只包含方法的说明。说明支持哪些方法,以及这些方法应该做什么 接口提供了一种方式来对操作进行划分,并描述各组特征 一个接口用一个名字代表一组操作,不能直接实例化产生对象 可实例化的类,使用接口来规范其实例所提供的不同的服务 抽象来说:接口做为一组类的行为抽象的服务规范,在一组服务的使用者和实现者(服务提供者)之间建立一种约定 使用者不关心具体的实现,而能使用该组服务 要使用接口中的方法时,只需用接口名来声明一个对象,而不关心实现了接口的类的名字 程序可用实现接口的对象的引用调用接口中定义的方法 interface Lookup { /** Return the value associated with the name, or null if there is no such value */ Object find(String name); }
  • 22. 一个类可实现多个接口 一个类的超类型(supertype):它所继承的类和它所实现的接口及这些 类和接口的超类型3.10 接口 class SimpleLookup implements Lookup { private String[] Names; Private Object[] Values;   public Object find(String name){ for (int i=0;i
  • 23. 采用对象方法对程序中错误进行检测和处理的一种机制 异常将强制程序员去处理错误 如果一个检测的异常没有被处理,当错误发生时便发警告,停止问题的产生 检测到一个特定的错误条件时会引发一个异常(throw an exception) 未捕获的异常被Java的缺省处理器处理 Java中的异常是对象,它有类型、方法和数据 异常对象一般从Exception类中派生而来,每个异常对象都是Throwable类的扩展 异常:try-catch-finally序列 try:测试某事件是否发生异常 catch:捕获这个异常 finally:从正常代码路径或异常 代码路径中清除异常3.11 异常class MyUtilities { public double averageOf(double[] vals,int i,int j) throws IllegalAverageException { try{ return (vals[i] + vals[j])/2; }catch (IndexOutOfBoundsException e){ throw new IllegalAverageException(); } } } class IllegalAverageException extends Exception {} 定义一个异常throws:声明可引发的异常throw:真正引发一个异常
  • 24. Java采用正规的包标记方法。包是一组类型的物理结构 包的名字具有层次结构,用点符号分割各成份,主要为控制命名冲突 使用import移入包,以说明类型Date 包命名的约定:使用逆向的Internet域名做为包名称的前缀 Java类总是在一个包中。若一个类没有用包说明提供一个包的名字,那么这个类在一种非命名包(unnamed package)中 如:Internet域名为acme.com,包名为:com.acme.package3.12 包class Datel { public static void main(String[] args) { java.util.Date now = new java.util.Date(); System.out.println(now); } } import java.util.Date; class Date2{ public static void main(String[] args) { Date now = new Date(); System.out.println(now); } } 直接引用
  • 25. 1. 线程:有内置的线程支持,可创建多线程的应用 2. I/O:Java.io包,包含各种输入输出操作 3. 类型类:基本类(Integer,Double,Boolean等) 4. 工具类和接口:java.util包,包含有用的类3.13 其它主题简介