1、二、面向对象一、类和对象 <1>对象:用来描述客观事物的一个实体,由一组属性和方法构成 *属性——对象具有的各种特征 *方法——对象执行的操作 <2>类:具有相同属性和方法的一组对象的集合类是对象的抽象。 类定义了对象将会拥有的属性和方法 <3>类和对象的关系 类是抽象的概念,对象是一个实体。 <4>定义类 *定义属性的语法[访问修饰符]class类名{ //属性〃方法 1 *类名:帕斯卡命名规则(每一个单词的首字母大写) <5>属性 *定义属性的语法[访问修饰符]数据类型属性名 *属性名:驼峰命名规则(即变量命名规则) <6>方法 *定义方法的语法[访问修饰
2、符]返回值类型 方法名(参数类型 参数1,参数类型 参数2,……)1 //省略方法体代码 } *方法名:驼峰命名规则(即变量命名规则) <7>创建对象 *创建对象的语法类名对象名=new类名(); *对象名:驼峰命名规则(即变量命名规则) <8>使用对象 *使用对象的语法对象名.属性 对象名.方法名() <9>对象数组 *对象数组的数据类型就是具体的类名. *对象数组内存储的就是这个类的对象 *每个数组元素就是一个对象 *根据下标找到某个元素 *按照对象对的使用方法使用该元素 <10>方法的返回值 *实例化自定义异常对象 *使用throw抛出补充:面向对象设计
3、原则 a. 摘取代妈中变化的行为,形成接口 b. 多用组合,少用继承 c. 针对接口编程,不依赖于具体实现 d. 针对扩展开放,针对改变关闭 *如果方法具有返回值,方法中必须使用关键字return返回该值,返回值类型为该值 的类型 *返回值只能有一个 *如果方法没有返回值,返回值类型为void <11>方法的参数 *方法名()无参方法pub Iic void show0 ( 1 *方法名(参数)带参方法public void show(i nt i, Str ing s, int j) ( }pub Iic void show(int i, Str ing s) {
4、1方法有没有参数和方法有没有返回值,是两码事,毫无关系. (1) 带参方法,参数个数可以有一个,也可以有多个,多个参数之间用逗号隔开. (2) 带参方法,参数名字可以随意取,符合变量命名规则. (3) 方法定义处的参数叫形式参数(形参),方法调用处传的值叫实际参数(实参). (4) 形参和实参名字可以不一样,但是数据类型要一样,个数要一样,顺序要一样 方法的调用. ♦方法之间允许相互调用,不需要知道方法的具体 实现,实现重用,提高效率 情况 举例 Student类的方法a()调用Student 类的方法b(),直接调用 public void a() ( 3(); 〃调用
5、b() ) Student类的方法a()调用Teacher 类的方法b(),先创建类对象,然后 使用调用 public void a() ( Feacher t = new Teacherf); t.b(); //调用Teacher类的b() ) <12>方法的传参 *基本数据类型 操作传递的是变量的值,改变一个变量的值不会影响另一个变量的值。 *引用数据类型(类、数组和接口)赋值是把原对象的引用(可理解为内存地址)传递给另一个引用 <13>构造方法 *构造方法的语法[访问修饰符]方法名([参数列表]){ //方法体的代码} *方法名:与类名相同 *如果没有自定义有参构
6、造方法,则系统会自动添加默认无参构造方法 *如果自定义了有参构造方法,则系统不会自动添加默认无参构造方法 <14>this的用法 *调用属性this.health = 100; th i s. name ="大黄"; *调用方法this, pr int (); *调用构造方法this() ;//如果使用,必须是构造方法中的第一条语句. this("小黑”,100,100, ”雄”); *使用this的注意this是在对象内部只带自身的引用. this只能调用实例变量、实例方法和实例构造方法. this不能调用类变量和类方法,this也不能调用局部变量. <15>方法的重载
7、 *同一个类中. *方法名相同. *参数个数或类型不同. *与返回值、访问修饰符无关. <16>构造方法重载 *方法名相同. *参数项不同. *与返回值、访问修饰符无关. <17>成员变量和局部变量 *成员变量:类的范围内声明的,在类的整个范围内都能用。也叫全局变量. *局部变量:局部(方法里、代码体里)声明,在声明的范围内使用,叫局部变量. *局部变量在使用前必须赋初始值全局变量即使使用前没有赋初始值,系统默认会初始 化. *局部变量可以和全局变量同名,也可以不同名。同名的时候,就近使用. 二、封装 <1>封装的概念 *将类的某些信息隐藏在类内部,不允许外部程
8、序直接访问, *而是通过该类提供的方法来实现对隐藏信息的操作和访问。 <2>封装的两个大致原则 *把尽可能多的东西藏起来,对外提供便捷的接口 *把所有的属性藏起来 <3>封装的步骤 *修改属性的可见性pr i vate *设置 setter/getter ()方法 *设置属性的存取显示 <4>包的作用 *允许类组成较小的单元(类似文件夹),易于找到和使用相应的文件 *防止命名冲突区分名字相同的类 *有助于实施访问权限控制 <5>包命名规范 *包名由小写字母组成,不能以圆点开头或结尾*包名之前最好加上唯一的前缀,通常使用组织倒置的网络域名 *包名后续部分依不同机构内部
9、的规范不同而不同 <6>JDK提供基本包 *java. lang:虚拟机自动引入 *java. util:提供一些实用类 *java. io:输入、输出 <7>包的使用package 声明包;//必须位于第一行(忽略注释行) import导入包;〃可以有多句 import java, ut i I. //导入 java, ut i I 包中所有类 import java. util. Scanner; //导入指定包中指定类 <8>访问修饰符 Java中美的访何修伸苻 用域 修饰叶J 同一个包中 非同一包中 public 可以使用 可以使用 默认修修符 可以使
10、用 不可以使用 Java中矣成员的访问修怦符 ^用域 修饰咨 同一个类中 同一个包中 子类中 任何地方 private 可以使用 不可以使用 不可以使用 不可以使用 默认修饰符 可以使用 可以使用 不可以使用 不可以使用 protected 可以使用 可以使用 可以斐用 不可以、使用 public 可以使用 可以使用 可以、受用 可以使用 <9>stat i c修饰符可以用来修饰 *成员变量静态变量,可以直接通过类名访问 *成员方法静态方法,可以直接通过类名访问 *代码块静态代码块,当Java虚拟机加载类时,就会执行该代码块 <1
11、0>Static 变量 1、类变量(静态变量)*被stat i c修饰的变量 *在内存中只有一个拷贝*类内部,可在任何方法内直接访问静态变量 *其他类中,可以直接通过类名访问 2、实例变量*没有被static修饰的变量 *每创建一个实例,就会为实例变量分配一次内存*实例变量可以在内存中有多个拷贝,互不影响 <11>static 方法 1、静态方法:可直接通过类名访问*静态方法中不能使用this和super *不能直接访问所属类的实例变量和实例方法*可直接访问类的静态变量和静态方法 2、实例方法:通过实例访问*可直接访问所属类的静态变量、静态方法、实例变量和实例方法 3、静态
12、方法必须被实现*main()就是最常用的静态方法
4、static代码块
*类的构造方法用于初始化类的实例,类的静态块用于初始化类,给类的静态变量 赋值三、继承
<1>继承的语法
[访问修饰符]c I ass
13、中只支持单根继承,即一个类只能有一个直接父类 <4>super关键字 *super使用的语法访问父类构造方法:super (参数) 访问父类属性/方法:super. <父类属性/方法〉 <5>方法重写的规则 *方法名相同 *参数列表相同 *返回值类型相同或者是其子类 *访问权限不能严于父类 *父类的静态方法不能被子类覆盖为非静态方法 *父类的非静态方法不能被子类覆盖为静态方法 *子类可以定义与父类同名的静态方法,以便在子类中隐藏父类的静态方法 *父类的私有方法不能被子类覆盖 *不能抛出比父类方法更多的异常 *构造方法不能被重写 <6>方法重写(Overr id i
14、 ng) vs 方法重载(Over load ing) 比较顼 位危 方法名 参数表 返回值 访问修饰符 方法重写 子类 相同 相同 相同或是 其子类 不能比父 类更严格 方法重栽 同类 相同 不相同 无关 无关 <7>0bject 类 *是一切类的父类 *常被重写的方法equa I s ()equals ()方法没有被重写之前,和=作用是一样的 instanceof 的使用instanceof用于判断一个引用类型所引用的对象是否是一个类的实例 四、多态 <1>定义:同一个引用类型,不同的实例,执行不同的操作(JVM的动态绑定机制) <2>前提
15、要有继承关系;*要有方法重写.(实现多态的基础) *要有父类引用指向子类对象. <3>向上转型 *父类引用指向子类对象. *向上转型的语法〈父类〉〈引用变量名〉=new〈子类〉; 【注】此时通过父类引用变量无法调用子类特有的方法.(如果需要,则向下转型) <4>向下转型 *将一个指向子类对象的父类引用赋给一个子类的引用. *向下转向的语法〈子类型〉〈引用变量名〉=(〈子类型〉)〈父类型的引用变量〉; 【注】在向下转型的过程中,如果没有转换为真实子类类型,则会出现类型转换异常. 五、抽象类和抽象方法 <1>抽象类的定义语法 abstract c I ass〈类名 >{
16、 } <2>抽象方法的定义语法 [访问修饰符]abstract〈返回值类型〉〈方法名〉([参数列表]); <3>抽象类与抽象方法的使用 *抽象类中可以没有抽象方法,但包含了抽象方法的类必须被定义为抽象类 *如果子类没有实现父类的所有抽象方法,子类必须被定义为抽象类 *没有抽象构造方法,也没有抽象静态方法 *抽象类中可以有非抽象的构造方法,创建子类的实例时可能调用 <4>抽象类VS普通类 *抽象类不能被实例化但可以创建一个引用变量,其类型是一个抽象类,指向非抽象的子类实例 *普通类可以被实例化 <5>抽象方法VS普通方法 *有无方法体六、接口 <1>接口的定义语法 p
17、ubl ic i nterface〈接口 名>{//接口成员 ) <2>实现接口的语法 pub I ic〈类名〉imp I ements〈接口 名>(〃实现方法 //普通方法 1 <3>接口特性 *接口不可以被实例化 *实现类必须实现接口的所有方法 *实现类可以实现多个接口i mp I ements、多个接口使用逗号隔开 *接口中的变量都是静态常量(public stat i c final) <4>接口使用 *接口中的成员变量默认都是publ ic static final的,必须显式初始化 *接口中的方法默认都是pub I ic abstract的 *接口没有构
18、造方法,不能被实例化 *一个接口不能实现另一个接口,但可以继承多个其他接口 *一个类必须实现接口抽象方法,除非这个类也是抽象类 <5>抽象类vs接口 a. 相同点*代表系统的抽象层 *都不能被实例化*都能包含抽象方法 *用于描述系统提供的服务,不必提供具体实现 b. 不同点 *在抽象类中可以为部分方法提供默认实现,而接口中只能包含抽象方法 *抽象类便于复用,接口便于代码维护 *一个类只能继承一个直接的父类,但可以实现多个接口 c. 使用原则*接口做系统与外界交互的窗口 *接口提供服务*接口本身一旦制定,就不允许随意修改 *抽象类可完成部分功能实现,还有部分功能可作为系统
19、的扩展点七、异常 <1>Java中如何进行异常处理♦Java的异常处理是通过5个关键字来实现的:try、 catch、 finally> throw> throws 捕获异常声明异常 声明方法可能要 抛出的各种异常 执行可能产生 异常的代码抛出异常 throw手动抛出异常 无论是否发生异常, 代码总能执行 <2>异常对象常用的方法<3>try-catch 方法 说明 void printStackTrace() 输出异常的堆栈信息 String getMessage() 返回异常信息描述字符串, 是printStackTrace()输出信息
20、的一部分 第一种情况:正常第二种情况:出现异常 异常是一种特殊的对象,类型为java. lang. Except ion或其子类 第三种情况:异常类型不匹配<4>try-catch-f i naI Iy *是否发生异常都执行final ly*不执行的唯一情况System, ex it (1) *即使try-catch内存在return语句,final ly也会直行<5>多重catch块 引发多种类型的异常*排列catch语句的顺序:先子类后父类 *发生异常时按顺序逐个匹配*只执行第一个与异常类型匹配的catch语句 <6>throw 与 throws 生成并抛出异常 声明方法
21、内抛出了异常 位于方法体内部,可作为单. 独语句使用 必须跟在方法参数列表后面,不能整 独使用 掬出一个异常对象,且只能 是一个 声明抛出异常类型,可以跟多个异常 throwthrows <7>异常体系结构 由Java应用程序 抛出和处理的非严重错误 SQLtxceplion RuntimeExeption ClassNotFoundException AntbmeticExc 仅II程序本身无法 恢复的严重错误 运行时异常,不要求 程序必须做出处理 Excepti on和 Error类的父类 171,63 D:\0-u-nU4-08JAVA PPTUfi\PPT
22、»»£ VAVA 内英 l.jpg AWTErrof NullPointerEx:e Checked异常,程序 必须处理该类异常 NumberFomatE <8>自定义异常 *定义异常类,并继承Excepion或者RuntimeException*编写构造方法,继承父类的实现。常见的构造方法有4种形式 〃构造方法1 pub I i c MyExcept i on () ( super ();} 〃构造方法2pub Ii c MyExcept i on (Str i ng message) { super (message); }〃构造方法3 pub Ii c MyExcept i on (Str i ng message, ThrowabIe cause) { super (message, cause);} //构造方法4pub Iic MyExcept i on (Throwable cause)( super (cause);






