第一部分:Java面向对象
对象是人们要进行研究的任何事物。
类描述一组相似对象的共性, 是对某类事物的描述。类是具有相同属性和行为的一组对象的模板
我们编程的主要任务就是设计一个个类,然后由类
产生对象,完成特定的功能。
所有Java程序都以类class为组织单元
方法是对象所具有的功能和操作
对象需要做某些事情,在类中添加方法
构造方法是创建给定类的对象时调用的方法
构造方法负责对象成员的初始化工作,为实例变量赋予合适的初始值
构造方法必须满足以下语法规则:
1、方法名与类名相同
2、不写返回值类型
两种构造方法
空构造方法:在类中没有写构造方法时,Java在编译时自动加上一个空构造方法
带参数的构造方法:自行编写的构造方法,在类中写了带参构造方法后,Java不再自动添加空构造方法。
成员变量:在类体的变量定义部分所定义的变量。
局部变量:在方法体中定义的变量和方法的参数。
注意:
(1)成员变量在整个类内都有效,局部变量只在定义它的方法内有效。
(2)如果局部变量的名字与成员变量的名字相同,则成员变量被隐藏。
(3)可以使用 this 关键字,调用被隐藏的成员变量,如:this.name ,this指代当前对象。
(4) 成员变量可以不用赋初值, 局部变量必须赋初值,如果不赋值的话,用的时候会报错
方法重载
在一个类中,定义多个同名的方法,它们的参数个数或类型不同,称为方法的重载。
构造方法重载
构造方法重载是方法重载的典型示例。
通过调用不同的构造方法来表达对象的多种初始化行为
类可以将数据和方法封装在一起,以一个完整的形式呈现出来,其中数据表示类的属性,方法表示类的行为,分别称为成员变量和成员方法。
可以通过对属性的封装来实现属性满足一定的要求
封装,就是隐藏实现细节
将属性私有化,提供公有方法访问私有属性
通过这些公有方法访问私有属性
属性封装的具体实现
1、修改属性的可见性来限制对属性的访问
2、为每个属性创建一对赋值(setXxx)方法和取值 (getXxx) 方法,用于对这些属性的访问
3、在setXxx和getXxx方法中,加入对属性的存取限制
成员变量可分为实例变量和类变量(静态变量)。
类变量声明使用 static 关键字,与实例变量的存储有差别。
public class Person {
String name; //姓名,实例成员变量
private int age; //年龄,实例成员变量
static int count; //人数,类成员变量
}
成员方法可分为实例方法和类方法(静态方法)。
使用 static修饰的方法叫做类方法。
类方法的两种调用方式
public static int howMany() //类方法
{
return count; //类方法只能访问类成员变量
}
Person.howMany(); //通过类名调用类方法
p.howMany(); //通过对象调用类方法
子类具有父类的一般特性(包括属性和行为),以及自身特殊的特性
类的继承是一种由已有类派生新类的机制。被继承的类称为父类。由父类创建的新类称为子类。
子类自动继承父类的属性和方法,也可以根据需要进行修改,添加新的属性和方法。使用继承,可以有效实现代码复用。
在Java语言中,用extends关键字来表示一个类继承了另一个类,例如:
public class Student extends Person
{
String school;
}
super是指代父类对象的关键字。
当需要访问被隐藏的父类中的同名变量或方法时,可以在子类中使用关键字super 作前缀,指明调用父类的成员变量或方法。
super( )表示调用父类的构造方法
super.f( )表示调用在父类中声明的方法f( )。
super.number表示调用父类中的成员变量number 。
编写父类,一般父类中定义一些通用的属性与方法
编写子类,使用 extends 关键字继承父类
继承的JAVA实现
继承父类中的原始成员:
当子类中未定义出该成员时将自动采用继承。
重定义父类中的成员:
子类可以重定义(隐藏)父类的同名成员变量。当父类中的某些成员方法不再适合子类的需要时,在子类中应重写(覆盖)父类的同名方法。
扩充增强子类功能:
当子类要求具有新的功能时,应添加出该功能(新添新的成员)。
在Java 中,所有的Java类都直接或间接地继承了java.lang.Object类
在Java中,只允许单继承,即仅允许每个类有一个父类,但一个类可以有多个子类。
类的多态:类中方法的方法名相同,但有不同的功能实现。JVM根据程序运行时情况自动调用适合的方法.
多态的两种形式:
1、子类重写父类方法
子类方法与父类方法的方法头相同。运行时,根据实际创建的对象类型动态决定使用哪个方法,父类对象调用父类方法,子类对象调用子类重写的方法。
2、同一个类中方法的重载
在一个类中,定义多个同名的方法,它们的参数个数或类型不同,称为方法的重载。
抽象类和最终类
抽象类:用 abstract 关键字修饰的类
abstract class 类名{…… }
抽象方法:用 abstract关键字修饰的方法
抽象方法只需声明,没有实现,格式如下:
abstract 返回类型 方法名( [参数] );
含有抽象方法的类必须被声明为抽象类,抽象类不能创建对象。抽象类被继承时子类要实现抽象方法。
编程应用:在一个类中,如果只能给出部分方法的实现,不能给出全部的方法实现时,采用抽象类来描述。
最终类:用final关键字来修饰的类
编程要求:final不能与abstract组合在一起使用来说明一个类,否则会相互矛盾。
abstract final class Person //错误
{ ……
}
编程应用:如果一个类编写的已较丰富,或者是基于安全性考虑,不希望再对它进行派生以覆盖其特定的成员函数的应用场合(固定的标准功能的类)。
被final声明的类,不能够被继承,即该类不可能成为父类。
final class 类名 { }
被final声明的方法,不能被重写。
final 返回型 方法名([ 参数] ) { }
被final声明的变量,它的值存储一次就不能再变更,也就是被声明为常量的意思
例如:final double PI = 3.1415926;
java的系统程序包
Java 常用类库
API 包 功能
java.lang 包含java语言的核心类库
java.util 提供各种实用工具类
java.io 标准输入/输出类
java.awt 组件标准GUI,包含了众多的图形组件、方法和事件
java.applet 提供对通用Applet的支持,是所有Applet的基类
java.net 实现java网络功能的类库
java.sql 支持java程序的数据库访问和处理
包与目录的关系
创建包myjava.sg.chap6,即创建目录结构 ..\myjava\sg\chap6 ,包与文件夹同名。
如何导入包
为了使用不在同一包中的类,需要在Java程序中使用import关键字导入这个类
import java.util.*; //导入java.util包中所有类
import java.lang.*; //导入java.lang包中所有类
包装类
原始数据类型 包装类
byte(字节型) Byte
char(字符型) Character
int(整型) Integer
long(长整型) Long
float(单精度实型) Float
double(双精度实型) Double
boolean(布尔) Boolean
short(短整型) Short
int和String的类型转换
(1) 将字符串String转换成整数int
int i = Integer.parseInt(“1234”);
(2) 将整数 int 转换成字符串 String
String s = String.valueOf(i);
注: Double, Float, Long 的转换方法与Integer大同小异.
Java接口
接口是某个事物对外提供的一些功能的声明
可以利用接口实现多态,同时接口也弥补了Java单一继承的弱点
Java接口可以由常量和抽象方法组成。接口中的方法只能是声明,方法的具体实现是留给实现该接口的类去完成。
在构建类时,经常会遇到这样情况,在描述某个类的各个方法时,对每个方法我们只能给出其功能实现的要求(原型声明),但不能给出具体的功能实现(方法体)。这种情况下考虑用接口。
Java接口的声明
一个Java接口是一些抽象方法和常量的集合
[public] interface 接口名 [extends 父接口名列表] {
[public] [static] [final] 类型 常量名=常量值;
[public] [abstract] 返回值类型 方法名(参数列表);
}
Java接口的实现
[修饰符] class 类名 [extends 父类] [implements 接口列表] {
……
}
Java接口的应用
可以使用接口标识类型
运行时,根据实际创建的对象类型调用相应的方法实现
内部类
内部类(Inner Class)是在一个类的内部嵌套定义的类,它可以是类的成员,也可以在一个语句块内部定义,还可以在表达式内部匿名定义.
包含内部类的类称为外部类。
匿名内部类
匿名内部类是没有名字的内部类,把继承类与实例化子类对象压缩在一个表达式里面,也包括写在方法调用的小括号中。
当只需要创建一个类的对象而且用不上它的名字时,使用内部类更加简洁、方便。
匿名内部类的语法规则:
new 接口名(){......};
或 new 父类名(){......};
匿名内部类在图形界面的事件处理中应用较多。
对象是人们要进行研究的任何事物。
类描述一组相似对象的共性, 是对某类事物的描述。类是具有相同属性和行为的一组对象的模板
我们编程的主要任务就是设计一个个类,然后由类
产生对象,完成特定的功能。
所有Java程序都以类class为组织单元
方法是对象所具有的功能和操作
对象需要做某些事情,在类中添加方法
构造方法是创建给定类的对象时调用的方法
构造方法负责对象成员的初始化工作,为实例变量赋予合适的初始值
构造方法必须满足以下语法规则:
1、方法名与类名相同
2、不写返回值类型
两种构造方法
空构造方法:在类中没有写构造方法时,Java在编译时自动加上一个空构造方法
带参数的构造方法:自行编写的构造方法,在类中写了带参构造方法后,Java不再自动添加空构造方法。
成员变量:在类体的变量定义部分所定义的变量。
局部变量:在方法体中定义的变量和方法的参数。
注意:
(1)成员变量在整个类内都有效,局部变量只在定义它的方法内有效。
(2)如果局部变量的名字与成员变量的名字相同,则成员变量被隐藏。
(3)可以使用 this 关键字,调用被隐藏的成员变量,如:this.name ,this指代当前对象。
(4) 成员变量可以不用赋初值, 局部变量必须赋初值,如果不赋值的话,用的时候会报错
方法重载
在一个类中,定义多个同名的方法,它们的参数个数或类型不同,称为方法的重载。
构造方法重载
构造方法重载是方法重载的典型示例。
通过调用不同的构造方法来表达对象的多种初始化行为
类可以将数据和方法封装在一起,以一个完整的形式呈现出来,其中数据表示类的属性,方法表示类的行为,分别称为成员变量和成员方法。
可以通过对属性的封装来实现属性满足一定的要求
封装,就是隐藏实现细节
将属性私有化,提供公有方法访问私有属性
通过这些公有方法访问私有属性
属性封装的具体实现
1、修改属性的可见性来限制对属性的访问
2、为每个属性创建一对赋值(setXxx)方法和取值 (getXxx) 方法,用于对这些属性的访问
3、在setXxx和getXxx方法中,加入对属性的存取限制
成员变量可分为实例变量和类变量(静态变量)。
类变量声明使用 static 关键字,与实例变量的存储有差别。
public class Person {
String name; //姓名,实例成员变量
private int age; //年龄,实例成员变量
static int count; //人数,类成员变量
}
成员方法可分为实例方法和类方法(静态方法)。
使用 static修饰的方法叫做类方法。
类方法的两种调用方式
public static int howMany() //类方法
{
return count; //类方法只能访问类成员变量
}
Person.howMany(); //通过类名调用类方法
p.howMany(); //通过对象调用类方法
子类具有父类的一般特性(包括属性和行为),以及自身特殊的特性
类的继承是一种由已有类派生新类的机制。被继承的类称为父类。由父类创建的新类称为子类。
子类自动继承父类的属性和方法,也可以根据需要进行修改,添加新的属性和方法。使用继承,可以有效实现代码复用。
在Java语言中,用extends关键字来表示一个类继承了另一个类,例如:
public class Student extends Person
{
String school;
}
super是指代父类对象的关键字。
当需要访问被隐藏的父类中的同名变量或方法时,可以在子类中使用关键字super 作前缀,指明调用父类的成员变量或方法。
super( )表示调用父类的构造方法
super.f( )表示调用在父类中声明的方法f( )。
super.number表示调用父类中的成员变量number 。
编写父类,一般父类中定义一些通用的属性与方法
编写子类,使用 extends 关键字继承父类
继承的JAVA实现
继承父类中的原始成员:
当子类中未定义出该成员时将自动采用继承。
重定义父类中的成员:
子类可以重定义(隐藏)父类的同名成员变量。当父类中的某些成员方法不再适合子类的需要时,在子类中应重写(覆盖)父类的同名方法。
扩充增强子类功能:
当子类要求具有新的功能时,应添加出该功能(新添新的成员)。
在Java 中,所有的Java类都直接或间接地继承了java.lang.Object类
在Java中,只允许单继承,即仅允许每个类有一个父类,但一个类可以有多个子类。
类的多态:类中方法的方法名相同,但有不同的功能实现。JVM根据程序运行时情况自动调用适合的方法.
多态的两种形式:
1、子类重写父类方法
子类方法与父类方法的方法头相同。运行时,根据实际创建的对象类型动态决定使用哪个方法,父类对象调用父类方法,子类对象调用子类重写的方法。
2、同一个类中方法的重载
在一个类中,定义多个同名的方法,它们的参数个数或类型不同,称为方法的重载。
抽象类和最终类
抽象类:用 abstract 关键字修饰的类
abstract class 类名{…… }
抽象方法:用 abstract关键字修饰的方法
抽象方法只需声明,没有实现,格式如下:
abstract 返回类型 方法名( [参数] );
含有抽象方法的类必须被声明为抽象类,抽象类不能创建对象。抽象类被继承时子类要实现抽象方法。
编程应用:在一个类中,如果只能给出部分方法的实现,不能给出全部的方法实现时,采用抽象类来描述。
最终类:用final关键字来修饰的类
编程要求:final不能与abstract组合在一起使用来说明一个类,否则会相互矛盾。
abstract final class Person //错误
{ ……
}
编程应用:如果一个类编写的已较丰富,或者是基于安全性考虑,不希望再对它进行派生以覆盖其特定的成员函数的应用场合(固定的标准功能的类)。
被final声明的类,不能够被继承,即该类不可能成为父类。
final class 类名 { }
被final声明的方法,不能被重写。
final 返回型 方法名([ 参数] ) { }
被final声明的变量,它的值存储一次就不能再变更,也就是被声明为常量的意思
例如:final double PI = 3.1415926;
java的系统程序包
Java 常用类库
API 包 功能
java.lang 包含java语言的核心类库
java.util 提供各种实用工具类
java.io 标准输入/输出类
java.awt 组件标准GUI,包含了众多的图形组件、方法和事件
java.applet 提供对通用Applet的支持,是所有Applet的基类
java.net 实现java网络功能的类库
java.sql 支持java程序的数据库访问和处理
包与目录的关系
创建包myjava.sg.chap6,即创建目录结构 ..\myjava\sg\chap6 ,包与文件夹同名。
如何导入包
为了使用不在同一包中的类,需要在Java程序中使用import关键字导入这个类
import java.util.*; //导入java.util包中所有类
import java.lang.*; //导入java.lang包中所有类
包装类
原始数据类型 包装类
byte(字节型) Byte
char(字符型) Character
int(整型) Integer
long(长整型) Long
float(单精度实型) Float
double(双精度实型) Double
boolean(布尔) Boolean
short(短整型) Short
int和String的类型转换
(1) 将字符串String转换成整数int
int i = Integer.parseInt(“1234”);
(2) 将整数 int 转换成字符串 String
String s = String.valueOf(i);
注: Double, Float, Long 的转换方法与Integer大同小异.
Java接口
接口是某个事物对外提供的一些功能的声明
可以利用接口实现多态,同时接口也弥补了Java单一继承的弱点
Java接口可以由常量和抽象方法组成。接口中的方法只能是声明,方法的具体实现是留给实现该接口的类去完成。
在构建类时,经常会遇到这样情况,在描述某个类的各个方法时,对每个方法我们只能给出其功能实现的要求(原型声明),但不能给出具体的功能实现(方法体)。这种情况下考虑用接口。
Java接口的声明
一个Java接口是一些抽象方法和常量的集合
[public] interface 接口名 [extends 父接口名列表] {
[public] [static] [final] 类型 常量名=常量值;
[public] [abstract] 返回值类型 方法名(参数列表);
}
Java接口的实现
[修饰符] class 类名 [extends 父类] [implements 接口列表] {
……
}
Java接口的应用
可以使用接口标识类型
运行时,根据实际创建的对象类型调用相应的方法实现
内部类
内部类(Inner Class)是在一个类的内部嵌套定义的类,它可以是类的成员,也可以在一个语句块内部定义,还可以在表达式内部匿名定义.
包含内部类的类称为外部类。
匿名内部类
匿名内部类是没有名字的内部类,把继承类与实例化子类对象压缩在一个表达式里面,也包括写在方法调用的小括号中。
当只需要创建一个类的对象而且用不上它的名字时,使用内部类更加简洁、方便。
匿名内部类的语法规则:
new 接口名(){......};
或 new 父类名(){......};
匿名内部类在图形界面的事件处理中应用较多。