面向对象
面向对象编程 OOP(Object Oriented Programming)
以类的方式组织代码,以对象的组织(封装)数据
特性:封装 继承 多态
对象是具体的事物,类是抽象的是对对象的抽象。
类是对象的模板,对象是抽象概念的具体实例。
类是具有共同属性和行为的事务的抽象,确定对象将会拥有的属性和行为。
类的特点:
- 类是对象的数据类型
- 类是具有相同属性和行为的一组对象的集合
属性:对象具有的各种特征,每个对象的每个属性都拥有特定的值。在类中通过成员变量来体现(类中方法外的变量)
行为:对象执行的操作。在类中通过成员方法来体现(和前面的方法相比去掉static关键字即可)
类和对象的关系:类是对象的抽象,对象是类的实体。
对象是能够看得到摸得找的真实存在的实体。
对象的使用
创建对象
格式:类名 对象名=new 类名();
使用对象
1.使用成员变量 格式:对象名.变量名
2.使用成员方法 格式:对象名.方法名()
成员变量都具有默认值,同数组默认规则。
成员变量与局部变量的区别
区别 | 成员变量 | 局部变量 |
类中的位置不同 | 类中方法外 | 方法内或者方法声明上 |
内存中位置不同 | 堆内存 | 栈内存 |
生命周期不同 | 随对象存在而存在,随着对象的消失而消失 | 随着方法的调用而存在,随着方法的调用完毕而消失 |
初始化值不同 | 有默认的初始化值 | 没有默认的初始化值,必须先定义,赋值,才能使用 |
封装
private关键字
可以修饰成员变量和成员方法;作用是保护不被别的类使用,被private修饰的成员只在本类中才能访问。
get()用于获取成员变量的值,用public修饰
set()用于设置成员变量的值,用public修饰
this关键字
this修饰的变量用于指成员变量
方法的形参如果与成员变量同名,不带this修饰的变量指的是形参,而不是成员变量
方法的形参没有与成员变量同名,不带this修饰的变量指的是成员变量
是么时候使用this???
解决局部变量隐藏变量
this:代表所在类的对象引用
方法被那个对象调用,this就代表那个对象
构造方法
作用:创建对象
格式:
public class 类名(){
修饰符 类名(参数){
}
}
功能:主要完成对象数据的初始化
成员变量:private修饰
构造方法:一个无参构造方法;一个或多个参数的构造方法
成员方法:set()/get();显示对象信息的show()
创建对象并为其成员变量赋值的两种方式:
无参构造方法创建对象后使用set()赋值;
使用带参构造方法直接创建带有属性值的对象。
return关键字
return用于方法
(1)返回方法指定类型的值(这个值总是确定的),也可以是对象
(2)方法的结束
有返回类型 例如:return i;
无返回类型 return;
继承
extands
super注意点:
- super调用父类的构造方法,必须在构造方法的第一个
- super必须只能出现在子类的方法或者构造方法中
- super和this不能同时调用构造方法
super与this区别
代表的对象不同:
- this本身调用者这个对象
- super代表父类对象的应用
前提:
- this没有继承也可以使用
- super只有继承条件才可以使用
构造方法:
- this():本类的构造
- super():父类的构造
重写
需要有继承关系,子类重写父类的方法
- 方法名必须相同
- 参数列表必须相同
- 修饰符:范围可以扩大但不能缩小
- 抛出异常;范围可以被缩小,但不能扩大
子类的方法和父类必须要一致;方法体不同!
为什么重写?
父类的功能,子类不一定需要,或者不一定满足!
多态
注意:
- 多态是方法的多态,属性没有多态
- 父类和子类,有联系 类型转换异常!
- 存在条件:继承关系,方法需要重写.父类引用指向子类对象!
- static方法,属于类,他不属于实例
- final常量
- private方法
instanceof (类型转换) 引用类型
x instanceof y 如果有继承关系则返回true
static关键字
用static修饰的成员称为类成员、静态成员或者静态变量。
静态方法可以直接通过类名调用,说明调用静态方法的时候,是不存在对象的,所以,静态方法中不能有this与super关键字
静态方法只能访问所属类的静态成员变量和成员方法。非静态方法是可以访问静态方法与静态成员变量的。
通过static修饰的静态变量和方法,是可以被多个对象共享的。
当一个对象改变静态变量后,其他的对象在使用的这个静态变量也就发生了改变。
通过static修饰的静态方法是可以之间通过类名调用的。
静态代码块只能执行一次.
抽象类
abstract
接口可以多继承
不能new这个抽象类,只能靠子类去实现它
抽象类中可以写普通方法
抽象方法必须在抽象类中
接口
普通类:只有具体实现
抽象类:具体实现和规范都有
接口:只有规范,自己无法写方法;接口需要有实现类;实现接口中的类,需要重写接口中的方法
声明类的关键字class,声明接口的关键字是interface
接口实现多继承
作用:
1.约束
2.定义一些方法,让不同的人实现
3.public abstract
4.public static final
5.接口不能被实例化,接口中没有构造方法
6.interface可以实现多个接口
7.必须重写接口中的方法
内部类
在类中在定义一个类
一个Java类中可以有多个class类,但是只能有一个public class
异常
检查性异常
运行时异常
错误
try{//try监控区域
}catch(){//catch捕获异常
}finally{//处理善后工作
}
finally 可以不要finally,可以释放资源
throws关键字指明要抛出给方法调用者的异常
throw关键字抛出异常
throws在方法函数头;而throw在函数体
throws表示出现异常的一种可能性,并不一定会发生这些异常;throw则是抛出了异常,执行throw则一定抛出了某种异常对象。
throws主要在方法定义上使用,表示此方法中不进行异常处理,而是在调用处进行异常处理
throws可以单独使用,但throw不能.
====================================================
1.随机生成1-100的随机数
Random r =new Random();
int x=r.nextInt(100)+1;
2.方法调用
格式: 方法名()
带参数方法调用 格式: 方法名(参数/变量名/常量值)
带返回值方法的调用
格式:1.方法名(参数) 2.数据类型 变量名 =方法名(参数);
注意:数据类型是
3.形参:方法定义中的参数 实参:方法调用中的参数
4.方法不能嵌套定义;void表示无返回值
5.方法重载
同一个类中,方法名相同,参数列表不同(个数,类型不同)
方法重写
父类的方法,在子类中重写一下
6.字符串比较使用:equals() 长度:length()
7.返回指定索引处的char值:public char charAt(int index)
8.StringBuilder:可变的字符串.String不可变
使用方法:
- 先创建对象;StringBuilder sb=new StringBuilder();
- 添加数组:sb.append("ASD")..append("A")..append("D");
- 反转: sb.reverse();
9.StringBuilder与String转换
通过构造方法转换String转换为StringBuilder
String s="ASDFH";
StringBuilder sb =new StringBuilder(s);
通过toString(),StringBuilderString转换为String
String s=sb.toString();
10.面向对象
继承用extends关键字来实现,被继承的类成为父类,实现继承的类被称为子类.子类是父类的扩展,子类是一种特殊的父类,获得父类的全部属性和方法。
封装是指将对象的状态信息隐藏在对象内部,不允许外部的程序直接访问对象内部的信息,而是通过该类所提供的方法来实现对内部信息的操作和访问。
多态性是指一个方法可以有多个实现的版本。类的多态性表现为方法的多态性,讨论在不同层次的类中以及在同一个类中,多个同名方法之间的关系问题。方法的多态性主要表现在方法的重载和方法的覆盖。
11.子类包含与父类同名方法的现象被称为方法重写,又称覆盖(Override)。子类覆盖父类的方法之后,子类的对象就不能访问父类的方法了,但是可以在子类中调用父类中被覆盖的方法。使用super关键字或者父类的类名作为调用者就可以调用父类中被覆盖的方法。对于属性同样,在子类的对象中也可以通过super来访问父类被覆盖的属性。
12.使用包装类把基本类型包装成引用类型,这样集合就可以存储了。
包装类:可以把基本类型包装成一个类
自动装箱:
基本类型-->包装类型
自动拆箱:
包装类型-->基本类型
基本类型对应的包装类型如下:
基本类型 包装类(全部都在java.long下,不需要手动导包)
byte Byte
short Short
int Integer [特殊]
long Long
float Float
double Double
char Character[特殊]
boolean Boolean