您查询的关键词是:面向对象的概念 。如果打开速度慢,可以尝试快速版;如果想保存快照,可以添加到搜藏。 (百度和网页http://www.vtcsy.com/jpk/08/java/file/理解及使用java中面向对象的基本特性以及运用能力.ppt的作者无关,不对其内容负责。百度快照谨为网络故障时之索引,不代表被搜索网站的即时页面。) |
于波
目标
面向对象的概念
创建类,属性,方法及使用构造函数
修饰符
Static
重载
继承
抽象
类
打包,文档注释
接口
内部类
综合训练
面向对象简介
面向对象(Object Oriented,OO)
面向对象的分析(OOA,Object Oriented Analysis)
面向对象的设计(OOD,Object Oriented Design)
面向对象的编程实现(OOP,Object Oriented Programming).
面向对象编程思想
人类如何认识世界的
面向对象编程
类:是对一类事物的描述,是抽象概念的定义,用于描述事物种类,是对象的模版,是创建对象的蓝图.
对象:类的实例,是实际存在的该类事物的个体.
Everything is object.
类的定义
类的格式
修饰符 class 类名
{
类成员…
}
类的成员包括
成员变量(属性)
成员方法(行为)
对象的示例
收银员对象
顾客对象
顾客
姓名:朱丽叶
年龄:28
体重:52千克
操作:
购买商品
属性
姓名:布兰尼
职衔:收银员
年龄:35
体重:60千克
操作:
收款
打印帐单
行为
类的成员
属性
事物的特性在类中表示为变量
属性名称由类的所有实例共享
方法
对象的行为(执行的操作)称为方法
事物的行为在类中表示为方法
类的举例
public class Dog
{
String name;
String blood;
int age;
public void bark()
{
System.out.println("汪汪!");
}
}
类的举例
public class Person
{
String name;
String sex;
int age;
public void speak()
{
System.out.println("HI");
}
}
方法定义
方法的格式
修饰符 返回值类型 方法名(参数列表)
{
方法体…
}
public int add(int x,int y)
{
int z=x+y;
return z;
}
函数调用
创建对象
格式
类名 对象名=new 类名();
new是内存分配操作符.使用这个关键字来创建对象
Dog d1=new Dog();
Dog d2=new Dog();
调用对象的属性和方法
对象名.属性;
d1.name
对象名.方法();
d1.bark();
构造器Constructor
是一个特殊的方法,完成对象的创建,包括对象属性的初始化.
没有返回值类型,也不要写void.
构造器名称与类名完全一致.
不能直接调用,只能由内存分配操作符new来调用.
显性构造器
隐性构造器
构造器重载
对象创建的内存模型
内存区域划分
栈stack
堆heep
练习
写一个方法,该方法接受两个参数,比较两个参数,将值比较大的那个显示在屏幕上
写一个方法,用于查找数组中是否含有某个元素
写如下方法:
public int getSum(int end)
功能求1加到end的和,1+2+3+…+end
方法重载overload
在同一个类中,方法名相同参数列表不同的这些方法,被称作方法重载.
重载的例子Arrays.sort();
求面积
变量
实例变量
静态变量
局部变量,实例变量,静态变量区别
方法
实例方法
静态方法
继承
父 类
子类
父类/子类是相对的
Cow
类
Lion
类
Tiger
类
Animals
类
Carnivorous
类
Herbivorous
类
Coat
类
继承的特点
继承的特点
具有层次结构
子类继承了父类的属性和方法
单继承
层次结构
Object
Robot
Walking Robot
Driving Robot
类的继承
格式:
修饰符 class 子类名 extends 父类名
父类的别名
SuperClass 超类
BaseClass 基类
子类的别名
衍生类
类的继承规则
子类继承父类的属性和方法
子类无法继承父类的构造器
子类实例化过程
子类实例化时会先实例化它的父类,然后再实例化子类.
也就是子类实例化的时候会调用父类的构造器.
this与super
super()
用途:调用父类的构造器
只能出现在子类的构造器中,且必须是第一行.
super()括号中的参数决定了调用父类中的哪个构造器.
this()
用途:调用本类的构造器
只能写在构造器的第一行
在同一个构造器中super()和this()不能同时出现
this与super
this.
指向本类对象的引用
super.
指向父类对象的引用
方法覆盖
在父类与子类之间,子类中声明的方法与父类的完全一致,我们可以说子类覆盖了父类的方法.
方法覆盖的规则
两个方法的名称相同.
返回值类型相同.
方法参数数量,类型和先后顺序相同.
访问修饰符权限要求,子类方法的访问修饰符大于等于父类方法的访问修饰符.
final
final修饰变量:
不能被重新赋值.
注意:声明时必须赋初值.
final修饰方法:
不能被覆盖.
final修饰类
不能被继承.
包
通常将类分组到包中简化系统管理
Java语言用包来组织类,包名对应文件系统的文件夹
包可以包含类和其他包,从而构成包的层次结构
Java中常用的包
java.lang
Java语言包,任何程序中,该包都被自动导入.
java.util
Java工具包,里面提供集合,日期,随机数等工具类
java.io
Java输入输出包,含有与输入输出有关的类和接口.
java.net
Java网络包,含有与网络通信有关的类和接口.
java.awt 与 java.swing
Java图形用户界面包,含有制作图形用户界面的相关类和接口.
导包import
在使用其他包中的类或接口时首先需要导入该包.
格式
import 包名.类名;
import java.util.Scanner;
import java.util.*;
声明包
package
格式
package 包名;
package com.vsst;
访问修饰符 3-2
该类或非该类均可访问
public
只有该类可以访问
private
相同数据包中的类可以访问
默认
该类及其子类的成员可以访问,同一个包中的类也可访问
protected
访问修饰符 3-3
访问修饰符可访问性
是
否
否
否
不同包并且不是子类
是
是
否
否
不同包内的子类
是
是
是
否
同一个包内的类
是
是
是
是
同一个类
public
protected
默认
private
位置
封装
确立系统边界
该机制保证了程序和数据都不受外部干扰且不被误用
seter与geter
单态
多态
多态性指事物的多种形态.
一个对象相同的行为作用于多种类型的对象上并获得不同的结果.
一条狗闻到猫的味道它会狂吠闻到食物的味道会分泌唾液.
___ 多态性允许每个对象以适合自身的方式去响应共同的消息.
马戏团表演,每个动物出场时都会吼叫一声,当老虎出场时会发出嗷嗷的叫声.小狗出场时发出汪汪的声音.
多态表现形式
多态在Java中的体现
方法重载
方法覆盖
父类声明子类实例化(子类向上转型)
多态传参.
对象归属
instanceof用于比较某个对象是否属于某个类,返回值为boolean类型
例子:
String a="Hello";
boolean b=a instanceof String;
抽象类
格式
修饰符 abstract class 类名
抽象类不能实例化.
抽象方法
只有方法声明,没有方法实现的方法.
抽象方法用abstract声明,以";"结尾.
public abstract void bark();
抽象方法没有方法体,不能被调用,只能被实现.
抽象方法必须声明在抽象类中
构造方法和static 方法不能用abstract修饰
父类中定义的抽象方法往往在子类中实现,如果子类没有实现父类中所有的抽象方法,那么子类也必须声明自己是抽象类.
抽象类的思考
抽象类是否能被实例化
抽象类是否需要构造器
一个抽象类是否可以没有抽象方法
一个抽象类是否可以全部都是抽象方法
接口interface
接口是常量和抽象方法的集合.
接口对类来说是一套标准与规范.
接口也弥补了Java单一继承的弱点.
使用interface关键字定义接口.
格式:修饰符 interface 接口名称.
public interface fly
{
}
接口特点
接口中声明的成员变量全部都是public static final的.
接口中声明的方法全部都是public abstract的.
接口不能被实例化,只能被实现.
接口采用多继承方式.
类实现接口
类实现接口用implements关键字
public class Bird implements Fly
{
}
一个类如果要实现接口,必须实现接口里面的所有抽象方法,如果没有全部实现那么必须声明自己是抽象类.
关于接口的思考
接口中是否含有构造器
接口与抽象类的异同
总结:类的继承
抽象类的继承
接口的继承
内部类
定义在一个类内部的类就叫做内部类
内部类和外部类之间的访问
无需创建外部类的对象,即可从内部类访问外部类的变量和方法.
内部类中不能定义static变量.
必须创建内部类的对象,否则无法从外部类访问内部类的变量和方法.
从其他类访问内部类
在Outer内访问Inner,只需要如下
Inner in=new Inner();
在Outer外访问Inner必须如果:
Outer o=new Outer();
Outer.Inner in=o.new Inner();
内部类的访问权限修饰符
普通类的访问控制方式
friendly(默认)
public
内部类定义为
private
friendly
protected
public
异常简介
程序运行时可能会发生打断程序正常执行的事件.
异常举例
当发生打断程序正常执行的事件时JVM会自动的实力化一个异常类对象.
被称之为抛出异常
异常类型
异常分类
不可处理异常Error
可处理异常Exception
检查性异常
非检查性异常
Java异常类
文件结束
EOFException
找不到文件
FileNotFoundException
I/O 异常的根类
IOException
字符串到 float 型数字的转换无效
NumberFormatException
不能加载所需的类
ClassNotFoundException
方法接收到非法参数
illegalArgumentException
数组大小小于或大于实际的数组大小
ArrayIndexOutOfBoundException
尝试访问 null 对象成员
NullPointerException
许多 java.lang 异常的基类
RuntimeException
异常层次结构的根类
Exception
算术错误情形,如以零作除数
ArithmeticException
线程中断
InterruptedException
说 明
异 常
捕获处理异常
try{
……
}catch(异常类型 标示符){
……
}
int[] arr={1,2,3};
try{
System.out.println(arr[3]);
}catch(ArrayIndexOutOfBoundsException e) {
System.out.println("数组下标越界了");
}
System.out.println("end");
多重捕获异常
当一个try块中可能会引发多种异常的时候,后面可以跟着多个catch.如果try中引发某种异常,则会被对应的catch捕获.
注意先后顺序,子异常写在父异常之前
finally
在try,catch后使用,表示无论是否产生异常都会执行finally中的代码,通常用于释放资源时所用.
上传异常
如果方法中可能会引发异常,该方法内不愿处理,那么可以将该异常上传,由调用该方法的方法来处理.
throws关键字
void test() throws IOException
Error异常可以不捕获,不上传
throw抛出异常
throw关键字用于人为抛出异常.
当程序出现某些错误,可以人为抛出异常.
Throw可以抛出Error与Exception异常
包装类
Short
short(短整型)
Boolean
boolean(布尔)
Double
double(双精度)
Float
float(浮点型)
Long
long(长整型)
Integer
int(整型)
Character
char(字符)
Byte
byte(字节)
包装类
原始数据类型
自动加包与拆包
基本数据类型可以自动加包成为包装类.
包装类可以自动拆包成为基本类型.
注意该特性在JDK.14之后才出现
字符串与基本数据类型转换
String sage="25";
int age=Integer.parseInt(sage);
包装类 6-4
确定字符是否为空格或换行符
isSpace()
确定字符是否为大写形式
isUpperCase()
确定字符是否为小写形式
isLowerCase()
确定字符是否为字母
isLetter()
确定字符是否为 0 至 9 之间的数字
isDigit()
说明
方法
Character包装类的方法
编写一个程序,由用户输入一个字符串,然后输出这个字符串每一个字符是不是英文或数字,如果是英文输出大小写.
练习
String与StringBuffer
String简介
String构造器
它将通过转换指定的字节数组新建一个字符串
String(byte [ ] value)
它将根据字符数组构造一个新字符串
String (char [ ] value)
它将新建一个字符串作为指定字符串的副本
String(String value)
它将创建一个空字符串
String()
说明
构造方法
String特性
不变性
String Pool(字符串池)
字符串比较
字符串 1
字符串 2
字符串 1
字符串 2
由 equals() 方法确定
检查组成字符串内容的字符
同一个对象
用 == 运算符检查
检查字符串是否指向同一个或不同的对象
字符串常用方法
从前往后查找当前字符串中是否含有某个字符,
含有返回下标,没有返回-1
int indexOf(char value)
从后往前查找当前字符串中是否含有某个字符,
含有返回下标,没有返回-1
int lastIndexOf(char value)
检查一个字符串是否以另一个字符串结束.
boolean endsWith(String value)
此方法用于返回该字符串的长度
int length()
此方法比较两个字符串内容是否一致
boolean equals(String value)
检查一个字符串是否以另一个字符串开始.
boolean startsWith(String value)
按字母顺序比较两个字符串.
int compareTo(String value)
此方法比较两个字符串内容,忽略大小写形式
boolean equalsIgnoreCase (String value)
说明
方法
字符串常用方法
将当前字符串全部转换为小写
public String toLowerCase()
此方法用于去除空格
public String trim()
说明
方法
将当前字符串全部转换为大写
public String toUpperCase()
此方法用于将该字符串中出现某个字符的所有位置都替换为另一个字符
public String replace(char old, char new)
此方法用于连接两个字符串内容
public String concat(String str)
此方法用于提取 beginindex 和 endindex 位置之间的字符串部分
public String substring(int beginindex, int endindex)
此方法用于提取从位置索引开始的字符串
public String substring(int index)
此方法用于从指定位置提取单个字符
public char charAt(int index)
练习题
判断邮箱地址
将一个字符串转换成为字符数组
去掉字符串前后的空格
StringBuffer 类 2-1
接收字符串参数,用来设置初始内容,
并在不重新分配的情况下保留 16 个字符
的空间
Public StringBuffer(String value)
设置缓存器大小
public StringBuffer (int length)
保留 16 个字符的空间
public StringBuffer()
说明
构造方法
StringBuffer 用于表示可以修改的字符串
StringBuffer 类
此方法使用一组字符替换另一组字符.将用替换字符串从 start 指定的位置开始替换,直到 end 指定的位置结束
StringBuffer replace(int start, int end, String s)
此方法将删除 pos 指定的索引处的字符
StringBuffer deleteCharAt(int pos)
此方法将删除调用对象中从 start 位置开始直到 end 指定的索引 – 1 位置的字符序列
StringBuffer delete(int start, int end)
保留 StringBuffer 对象中的字符
StringBuffer reverse()
转换为字符串形式
String toString( )
用ch替换 pos位置上的字符
void setCharAt(int pos, char ch)
确定 StringBuffer 对象的长度
int length( )
在指定位置插入字符串
StringBuffer insert(int index,String s)
说明
方法
String类与StringBuffer 类
String与StringBuffer的区别
String与StringBuffer的各自应用领域
Math 类
返回一个大于等于0小于1的随机小数
double Math.random()
返回 a 和 b 中的较小值.
int min(int a, int b)
对小数位4舍5入
int Math.round(double a);
返回 a 和 b 中的较大值.
int max(int a, int b)
返回小于等于 numvalue 的最大整数值
double floor (double numvalue)
返回大于等于 numvalue 的最小整数值
double ceil (double numvalue)
计算一个数 的绝对值
int abs (int numvalue)
计算给定值的平方根
double sqrt (double numvalue)
计算 a 的 b 次方
double pow (double a, double b)
说明
方法
Math类提供很多数学运算方法,所有方法都是静态的,可以直接调用,不用实例化.
Math类用final修饰,不能被继承.Math类的构造器用private修饰,不能实例化.
Object 类 2-1
方法会针对不同的对象返回不同的整数.(这一般是通过将该对象的内部地址转换成一个整数来实现的
int hashcode()
返回此对象的字符串表示
String toString()
当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法.通常被子类重写
void finalize() throws
Throwable
将当前对象实例与给定的对象进行比较,检查
它们是否相等
Boolean
equals(Objectobj)
说明
方法
所有类的父类
默认情况下,用户定义的类扩展自 Object 类
垃圾回收机制
Java语言将内存分配和释放的工作交给了JVM,程序员不必做这些工作,它提供一个系统级的线程跟踪每个内存的分配,在JVM的空闲处理中,垃圾收集线程将检查和释放不再使用的内存(即可以被释放的内存).垃圾收集的过程在java程序的生存期中是自动的,不需要分配和释放内存,也避免了内存泄漏.可以调用System.gc()方法建议(suggest)JVM执行垃圾收集以使得可被释放的内存能立即被使用,当此方法返回的时候,JVM已经做了最大的努力从被丢弃的对象上回收内存空间.程序员不能指定收集哪些内存,一般而言也不用关心这个问题,除非是程序的内存消耗很大,特别是有很多临时对象时可以"建议"进行垃圾收集以提高可用内存.需要指出的是调用System.gc()方法不能保证JVM立即进行垃圾收集,而只能是建议,因为垃圾收集线程的优先级很低(通常是最低的)
目标
面向对象的概念
创建类,属性,方法及使用构造函数
修饰符
Static
重载
继承
抽象
类
打包,文档注释
接口
内部类
综合训练
面向对象简介
面向对象(Object Oriented,OO)
面向对象的分析(OOA,Object Oriented Analysis)
面向对象的设计(OOD,Object Oriented Design)
面向对象的编程实现(OOP,Object Oriented Programming).
面向对象编程思想
人类如何认识世界的
面向对象编程
类:是对一类事物的描述,是抽象概念的定义,用于描述事物种类,是对象的模版,是创建对象的蓝图.
对象:类的实例,是实际存在的该类事物的个体.
Everything is object.
类的定义
类的格式
修饰符 class 类名
{
类成员…
}
类的成员包括
成员变量(属性)
成员方法(行为)
对象的示例
收银员对象
顾客对象
顾客
姓名:朱丽叶
年龄:28
体重:52千克
操作:
购买商品
属性
姓名:布兰尼
职衔:收银员
年龄:35
体重:60千克
操作:
收款
打印帐单
行为
类的成员
属性
事物的特性在类中表示为变量
属性名称由类的所有实例共享
方法
对象的行为(执行的操作)称为方法
事物的行为在类中表示为方法
类的举例
public class Dog
{
String name;
String blood;
int age;
public void bark()
{
System.out.println("汪汪!");
}
}
类的举例
public class Person
{
String name;
String sex;
int age;
public void speak()
{
System.out.println("HI");
}
}
方法定义
方法的格式
修饰符 返回值类型 方法名(参数列表)
{
方法体…
}
public int add(int x,int y)
{
int z=x+y;
return z;
}
函数调用
创建对象
格式
类名 对象名=new 类名();
new是内存分配操作符.使用这个关键字来创建对象
Dog d1=new Dog();
Dog d2=new Dog();
调用对象的属性和方法
对象名.属性;
d1.name
对象名.方法();
d1.bark();
构造器Constructor
是一个特殊的方法,完成对象的创建,包括对象属性的初始化.
没有返回值类型,也不要写void.
构造器名称与类名完全一致.
不能直接调用,只能由内存分配操作符new来调用.
显性构造器
隐性构造器
构造器重载
对象创建的内存模型
内存区域划分
栈stack
堆heep
练习
写一个方法,该方法接受两个参数,比较两个参数,将值比较大的那个显示在屏幕上
写一个方法,用于查找数组中是否含有某个元素
写如下方法:
public int getSum(int end)
功能求1加到end的和,1+2+3+…+end
方法重载overload
在同一个类中,方法名相同参数列表不同的这些方法,被称作方法重载.
重载的例子Arrays.sort();
求面积
变量
实例变量
静态变量
局部变量,实例变量,静态变量区别
方法
实例方法
静态方法
继承
父 类
子类
父类/子类是相对的
Cow
类
Lion
类
Tiger
类
Animals
类
Carnivorous
类
Herbivorous
类
Coat
类
继承的特点
继承的特点
具有层次结构
子类继承了父类的属性和方法
单继承
层次结构
Object
Robot
Walking Robot
Driving Robot
类的继承
格式:
修饰符 class 子类名 extends 父类名
父类的别名
SuperClass 超类
BaseClass 基类
子类的别名
衍生类
类的继承规则
子类继承父类的属性和方法
子类无法继承父类的构造器
子类实例化过程
子类实例化时会先实例化它的父类,然后再实例化子类.
也就是子类实例化的时候会调用父类的构造器.
this与super
super()
用途:调用父类的构造器
只能出现在子类的构造器中,且必须是第一行.
super()括号中的参数决定了调用父类中的哪个构造器.
this()
用途:调用本类的构造器
只能写在构造器的第一行
在同一个构造器中super()和this()不能同时出现
this与super
this.
指向本类对象的引用
super.
指向父类对象的引用
方法覆盖
在父类与子类之间,子类中声明的方法与父类的完全一致,我们可以说子类覆盖了父类的方法.
方法覆盖的规则
两个方法的名称相同.
返回值类型相同.
方法参数数量,类型和先后顺序相同.
访问修饰符权限要求,子类方法的访问修饰符大于等于父类方法的访问修饰符.
final
final修饰变量:
不能被重新赋值.
注意:声明时必须赋初值.
final修饰方法:
不能被覆盖.
final修饰类
不能被继承.
包
通常将类分组到包中简化系统管理
Java语言用包来组织类,包名对应文件系统的文件夹
包可以包含类和其他包,从而构成包的层次结构
Java中常用的包
java.lang
Java语言包,任何程序中,该包都被自动导入.
java.util
Java工具包,里面提供集合,日期,随机数等工具类
java.io
Java输入输出包,含有与输入输出有关的类和接口.
java.net
Java网络包,含有与网络通信有关的类和接口.
java.awt 与 java.swing
Java图形用户界面包,含有制作图形用户界面的相关类和接口.
导包import
在使用其他包中的类或接口时首先需要导入该包.
格式
import 包名.类名;
import java.util.Scanner;
import java.util.*;
声明包
package
格式
package 包名;
package com.vsst;
访问修饰符 3-2
该类或非该类均可访问
public
只有该类可以访问
private
相同数据包中的类可以访问
默认
该类及其子类的成员可以访问,同一个包中的类也可访问
protected
访问修饰符 3-3
访问修饰符可访问性
是
否
否
否
不同包并且不是子类
是
是
否
否
不同包内的子类
是
是
是
否
同一个包内的类
是
是
是
是
同一个类
public
protected
默认
private
位置
封装
确立系统边界
该机制保证了程序和数据都不受外部干扰且不被误用
seter与geter
单态
多态
多态性指事物的多种形态.
一个对象相同的行为作用于多种类型的对象上并获得不同的结果.
一条狗闻到猫的味道它会狂吠闻到食物的味道会分泌唾液.
___ 多态性允许每个对象以适合自身的方式去响应共同的消息.
马戏团表演,每个动物出场时都会吼叫一声,当老虎出场时会发出嗷嗷的叫声.小狗出场时发出汪汪的声音.
多态表现形式
多态在Java中的体现
方法重载
方法覆盖
父类声明子类实例化(子类向上转型)
多态传参.
对象归属
instanceof用于比较某个对象是否属于某个类,返回值为boolean类型
例子:
String a="Hello";
boolean b=a instanceof String;
抽象类
格式
修饰符 abstract class 类名
抽象类不能实例化.
抽象方法
只有方法声明,没有方法实现的方法.
抽象方法用abstract声明,以";"结尾.
public abstract void bark();
抽象方法没有方法体,不能被调用,只能被实现.
抽象方法必须声明在抽象类中
构造方法和static 方法不能用abstract修饰
父类中定义的抽象方法往往在子类中实现,如果子类没有实现父类中所有的抽象方法,那么子类也必须声明自己是抽象类.
抽象类的思考
抽象类是否能被实例化
抽象类是否需要构造器
一个抽象类是否可以没有抽象方法
一个抽象类是否可以全部都是抽象方法
接口interface
接口是常量和抽象方法的集合.
接口对类来说是一套标准与规范.
接口也弥补了Java单一继承的弱点.
使用interface关键字定义接口.
格式:修饰符 interface 接口名称.
public interface fly
{
}
接口特点
接口中声明的成员变量全部都是public static final的.
接口中声明的方法全部都是public abstract的.
接口不能被实例化,只能被实现.
接口采用多继承方式.
类实现接口
类实现接口用implements关键字
public class Bird implements Fly
{
}
一个类如果要实现接口,必须实现接口里面的所有抽象方法,如果没有全部实现那么必须声明自己是抽象类.
关于接口的思考
接口中是否含有构造器
接口与抽象类的异同
总结:类的继承
抽象类的继承
接口的继承
内部类
定义在一个类内部的类就叫做内部类
内部类和外部类之间的访问
无需创建外部类的对象,即可从内部类访问外部类的变量和方法.
内部类中不能定义static变量.
必须创建内部类的对象,否则无法从外部类访问内部类的变量和方法.
从其他类访问内部类
在Outer内访问Inner,只需要如下
Inner in=new Inner();
在Outer外访问Inner必须如果:
Outer o=new Outer();
Outer.Inner in=o.new Inner();
内部类的访问权限修饰符
普通类的访问控制方式
friendly(默认)
public
内部类定义为
private
friendly
protected
public
异常简介
程序运行时可能会发生打断程序正常执行的事件.
异常举例
当发生打断程序正常执行的事件时JVM会自动的实力化一个异常类对象.
被称之为抛出异常
异常类型
异常分类
不可处理异常Error
可处理异常Exception
检查性异常
非检查性异常
Java异常类
文件结束
EOFException
找不到文件
FileNotFoundException
I/O 异常的根类
IOException
字符串到 float 型数字的转换无效
NumberFormatException
不能加载所需的类
ClassNotFoundException
方法接收到非法参数
illegalArgumentException
数组大小小于或大于实际的数组大小
ArrayIndexOutOfBoundException
尝试访问 null 对象成员
NullPointerException
许多 java.lang 异常的基类
RuntimeException
异常层次结构的根类
Exception
算术错误情形,如以零作除数
ArithmeticException
线程中断
InterruptedException
说 明
异 常
捕获处理异常
try{
……
}catch(异常类型 标示符){
……
}
int[] arr={1,2,3};
try{
System.out.println(arr[3]);
}catch(ArrayIndexOutOfBoundsException e) {
System.out.println("数组下标越界了");
}
System.out.println("end");
多重捕获异常
当一个try块中可能会引发多种异常的时候,后面可以跟着多个catch.如果try中引发某种异常,则会被对应的catch捕获.
注意先后顺序,子异常写在父异常之前
finally
在try,catch后使用,表示无论是否产生异常都会执行finally中的代码,通常用于释放资源时所用.
上传异常
如果方法中可能会引发异常,该方法内不愿处理,那么可以将该异常上传,由调用该方法的方法来处理.
throws关键字
void test() throws IOException
Error异常可以不捕获,不上传
throw抛出异常
throw关键字用于人为抛出异常.
当程序出现某些错误,可以人为抛出异常.
Throw可以抛出Error与Exception异常
包装类
Short
short(短整型)
Boolean
boolean(布尔)
Double
double(双精度)
Float
float(浮点型)
Long
long(长整型)
Integer
int(整型)
Character
char(字符)
Byte
byte(字节)
包装类
原始数据类型
自动加包与拆包
基本数据类型可以自动加包成为包装类.
包装类可以自动拆包成为基本类型.
注意该特性在JDK.14之后才出现
字符串与基本数据类型转换
String sage="25";
int age=Integer.parseInt(sage);
包装类 6-4
确定字符是否为空格或换行符
isSpace()
确定字符是否为大写形式
isUpperCase()
确定字符是否为小写形式
isLowerCase()
确定字符是否为字母
isLetter()
确定字符是否为 0 至 9 之间的数字
isDigit()
说明
方法
Character包装类的方法
编写一个程序,由用户输入一个字符串,然后输出这个字符串每一个字符是不是英文或数字,如果是英文输出大小写.
练习
String与StringBuffer
String简介
String构造器
它将通过转换指定的字节数组新建一个字符串
String(byte [ ] value)
它将根据字符数组构造一个新字符串
String (char [ ] value)
它将新建一个字符串作为指定字符串的副本
String(String value)
它将创建一个空字符串
String()
说明
构造方法
String特性
不变性
String Pool(字符串池)
字符串比较
字符串 1
字符串 2
字符串 1
字符串 2
由 equals() 方法确定
检查组成字符串内容的字符
同一个对象
用 == 运算符检查
检查字符串是否指向同一个或不同的对象
字符串常用方法
从前往后查找当前字符串中是否含有某个字符,
含有返回下标,没有返回-1
int indexOf(char value)
从后往前查找当前字符串中是否含有某个字符,
含有返回下标,没有返回-1
int lastIndexOf(char value)
检查一个字符串是否以另一个字符串结束.
boolean endsWith(String value)
此方法用于返回该字符串的长度
int length()
此方法比较两个字符串内容是否一致
boolean equals(String value)
检查一个字符串是否以另一个字符串开始.
boolean startsWith(String value)
按字母顺序比较两个字符串.
int compareTo(String value)
此方法比较两个字符串内容,忽略大小写形式
boolean equalsIgnoreCase (String value)
说明
方法
字符串常用方法
将当前字符串全部转换为小写
public String toLowerCase()
此方法用于去除空格
public String trim()
说明
方法
将当前字符串全部转换为大写
public String toUpperCase()
此方法用于将该字符串中出现某个字符的所有位置都替换为另一个字符
public String replace(char old, char new)
此方法用于连接两个字符串内容
public String concat(String str)
此方法用于提取 beginindex 和 endindex 位置之间的字符串部分
public String substring(int beginindex, int endindex)
此方法用于提取从位置索引开始的字符串
public String substring(int index)
此方法用于从指定位置提取单个字符
public char charAt(int index)
练习题
判断邮箱地址
将一个字符串转换成为字符数组
去掉字符串前后的空格
StringBuffer 类 2-1
接收字符串参数,用来设置初始内容,
并在不重新分配的情况下保留 16 个字符
的空间
Public StringBuffer(String value)
设置缓存器大小
public StringBuffer (int length)
保留 16 个字符的空间
public StringBuffer()
说明
构造方法
StringBuffer 用于表示可以修改的字符串
StringBuffer 类
此方法使用一组字符替换另一组字符.将用替换字符串从 start 指定的位置开始替换,直到 end 指定的位置结束
StringBuffer replace(int start, int end, String s)
此方法将删除 pos 指定的索引处的字符
StringBuffer deleteCharAt(int pos)
此方法将删除调用对象中从 start 位置开始直到 end 指定的索引 – 1 位置的字符序列
StringBuffer delete(int start, int end)
保留 StringBuffer 对象中的字符
StringBuffer reverse()
转换为字符串形式
String toString( )
用ch替换 pos位置上的字符
void setCharAt(int pos, char ch)
确定 StringBuffer 对象的长度
int length( )
在指定位置插入字符串
StringBuffer insert(int index,String s)
说明
方法
String类与StringBuffer 类
String与StringBuffer的区别
String与StringBuffer的各自应用领域
Math 类
返回一个大于等于0小于1的随机小数
double Math.random()
返回 a 和 b 中的较小值.
int min(int a, int b)
对小数位4舍5入
int Math.round(double a);
返回 a 和 b 中的较大值.
int max(int a, int b)
返回小于等于 numvalue 的最大整数值
double floor (double numvalue)
返回大于等于 numvalue 的最小整数值
double ceil (double numvalue)
计算一个数 的绝对值
int abs (int numvalue)
计算给定值的平方根
double sqrt (double numvalue)
计算 a 的 b 次方
double pow (double a, double b)
说明
方法
Math类提供很多数学运算方法,所有方法都是静态的,可以直接调用,不用实例化.
Math类用final修饰,不能被继承.Math类的构造器用private修饰,不能实例化.
Object 类 2-1
方法会针对不同的对象返回不同的整数.(这一般是通过将该对象的内部地址转换成一个整数来实现的
int hashcode()
返回此对象的字符串表示
String toString()
当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法.通常被子类重写
void finalize() throws
Throwable
将当前对象实例与给定的对象进行比较,检查
它们是否相等
Boolean
equals(Objectobj)
说明
方法
所有类的父类
默认情况下,用户定义的类扩展自 Object 类
垃圾回收机制
Java语言将内存分配和释放的工作交给了JVM,程序员不必做这些工作,它提供一个系统级的线程跟踪每个内存的分配,在JVM的空闲处理中,垃圾收集线程将检查和释放不再使用的内存(即可以被释放的内存).垃圾收集的过程在java程序的生存期中是自动的,不需要分配和释放内存,也避免了内存泄漏.可以调用System.gc()方法建议(suggest)JVM执行垃圾收集以使得可被释放的内存能立即被使用,当此方法返回的时候,JVM已经做了最大的努力从被丢弃的对象上回收内存空间.程序员不能指定收集哪些内存,一般而言也不用关心这个问题,除非是程序的内存消耗很大,特别是有很多临时对象时可以"建议"进行垃圾收集以提高可用内存.需要指出的是调用System.gc()方法不能保证JVM立即进行垃圾收集,而只能是建议,因为垃圾收集线程的优先级很低(通常是最低的)