(三)面向对象
类和对象
面向对象(oop)
面向切面(AOP)
C语言 面向过程编程
对象指(用来描述客观事物的一个实体,由一组属性和方法构成)个体实例
属性:
对象具有的特征
方法(函数):
对象具有的行为
类:
具有相同属性和方法的一组对象的集合
类是对象的抽象,对象是类的具体
定义一个类:
关键字:class
被final修饰的类不能被继承
String也是一个类
String name2 = new String(“张三”);//创建了两个对象
学会画类图
创建对象 new
Student student =new Student();
定义方法:
访问修饰符 返回类型 方法名(参数){
}
无参方法
有参方法
成员变量和局部变量
局部变量作用域只在该方法内
成员变量(全局变量)作用域整个类中
比较两个对象的是否是同一个对象
equals
Person p1 = new Person();
Person p2 = new Person();
p1.equals(p2) 结果为false
带参数的方法
基本数据类型,操作传递的是变量的值,
改变一个变量的值不会影响另一个变量的值。
引用数据类型(类、数组和接口),
赋值是把原对象的引用(可理解为内存地址)
传递给另一个引用
方法的重载
同一个类中
*方法名必须一致
参数个数或类型不同或顺序不同
与返回值和访问修饰符无关
成员方法
构造方法
没有返回值类型
方法名与类名一致
可以有参数
每个类都有默认的无参构造方法
*如果有其他构造方法这时候需要用无参构造方法
就需要把这个无参构造方法写出来
访问修饰符 构造方法名(<参数>){
}
创建对象是调用了类的构造方法
带参的构造方法
this(当前对象)
调用属性
this.name = “李四”;
调用方法
this.print()
调用构造方法
this();
this(34)
*构造方法中调用别的构造方法只能掉用
一个,并且只能放在第一行
构造代码块
{}
构造代码块总是优先构造方法执行
一般用于初始化配置使用
封装
访问权限
public 公共的,都能访问
private 只能在类中使用
protected
默认
封装(private私有化)
将类的某些信息隐藏在类内部,
不允许外部程序直接访问,
而是通过该类提供的方法来
实现对隐藏信息的操作和访问
封装的好处:
便于使用者正确使用系统,防止错误修改属性
有助于系统之间的松耦合,提高系统独立性
提高软件的可重用性
降低了构建大型系统的风险
javabean
eclipse自动生成setter,getter方法
alt+shift+s 选中生成setter,getter方法
static(静态)
静态变量
类名直接调用静态变量
被static修饰的成员变量在内存中
可以被每个类对象共享,节省内存空间
静态方法:
被static修饰的方法,可以类名直接调用
静态代码块
static优先级高于构造代码块
继承
is a关系 子类 is a 父类
extends 继承父类
java中只支持单根继承
(接口可以继承多个接口interface)
super关键字
super(); 调用父类的无参构造方法
构造方法中调用别的构造方法只能掉用
一个,并且只能放在第一行
调用父类属性
super.name
调用父类成员方法
super.print()
*子类会默认的调用父类的无参构造方法
*子类继承父类不能被继承的父类成员
a.private成员
b.构造方法
c.子类与父类不在同包,使用默认访问权限的成员
继承的优点:
实现代码的重用
方法的重写(方法的覆盖)
规则:
1、方法名一样
2.参数列表相同
3.返回值类型相同或其子类
4.访问权限不能严于父类
父类的私有方法不能继承也不能重写
Object
所有类的父类
String是Object的子类
所有的类默认都继承Object
toString();
equals();
重写toString方法:
//重写toString方法
public String toString(){
return “姓名为:”+name+”,年龄为:”+age;
}
重写equals方法:
//当年龄,姓名样代表同一个人
public boolean equals(Object obj) {
Person p = (Person)obj;
//姓名和年龄匹配说明是同一个人
if(p.name.equals(this.name)&&p.id.equals(this.id)){
return true;
}else {
return false;
}
}
多态
多态:同一个引用类型,
使用不同的实例而执行不同操作
抽象:
抽象方法
没有方法体
被abstract修饰
抽象类:
abstract 修饰的类
一个类有抽象方法,该类一定是抽象类
一个类是抽象类,可以没有抽象方法
抽象类不能实例化
向上转型(自动完成)
Pet pet = new Cat();
向下转型(强制转型)
Cat cat = (Cat)pet;
instanceof 判断向下转型的类型
抽象类和接口
抽象类概念:
1、抽象类中可以没有抽象方法,
但包含了抽象方法的类必须被定义为抽象类
2、如果子类没有实现父类的所有抽象方法,子类必须被定义为抽象类
3、没有抽象构造方法,也没有抽象静态方法
4、抽象类中可以有非抽象的构造方法,创建子类的实例时可能调用
接口
一个接口可以继承多个接口
1、功能的扩展
定义接口
interface
接口中的方法都是 public abstract
实现接口
implements
一个类可以实现多个接口
接口中的变量都是静态常量(static final)
2、接口是一种约束(行业规范)
面向接口编程
异常
异常发生会终止程序运行
java异常处理机制
异常处理语法:
try —- 监视代码(可能发生异常)
catch —-捕获异常
finally —无论发生异常,都会执行
throw —- 抛出异常
throws —- 声明异常
try{
}catch(异常类型 ex){
}
打印异常堆栈信息
ex.printStackTrace();
定位出现异常的代码
finally 代码块
有无异常都会执行
一般放置释放资源的代码
JVM关闭(System.exit(1))
finally代码块不执行
快捷键:alt+shift+z
throws(声明异常)和throw
throws Exception
声明多个异常,以逗号隔开
throw 抛出异常
Throwable
Error(无法恢复的错误)
Exception (可以解决的异常)
检查时异常 必须try catch
运行时异常 可以不捕获
自定义异常
继承Throwable类
继承Excepion
RuntimeException(运行时异常)
原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/13907.html