年后复习一下
2021-02-22
一、面对对象
三大特征
继承、封装、多态
好处
Java面对对象的语言,开发效率高内聚低耦合,优化代码,提高可维护性,可重用性,用户体验提高
1、封装
private < default < protected < public
好处
为了使数据安全,不让外界轻易的访问,提供外界公开访问的方法
使用步骤:
(1)、在属性前面加上修饰符:private,protected,public
(2)、生成getter/setter方法(alt+insert选择getter/setter)
(3)、加上一些合理的逻辑验证
(4)、创建对象,通过对象名调用方法getName();setName()
2、继承
概念
不同类中出现相同的属性和方法,把这些相同的属性和方法抽取出来放在一个类中(父类),从而使得代码得到一个优化,简化了代码
特点
优点:简化了代码,可扩展性比较强,可维护性
缺点:提高了耦合性,让类与类之间的关系更加紧密,不满足开发原则,但是又不可避免。
使用步骤
(1)找不同子类的相同属性和方法归为同一个父类,继承需要满足 is a关系
(2)找子类,使用关键字extends,继承父类非私有的属性和方法 class Dog extends Animal{}
(3)在子类中去使用父类非私有的属性和方法
(4)创建子类对象,通过子类对象名调用父类非私有的属性和方法,也可以调用子类自己的属性和方法
注意事项
具有单根性,只能单继承;不能多继承,可以多层继承;
父类中不能被子类继承的:
(1)父类私有的
(2)父类的构造方法
(3)父类的不同包中通过default修饰的属性和方法,不能直接得到继承
3、多态
概念
从生活中理解多态:一个打印机,分为彩色和黑白打印机,由于不同环境的使用,打印出来的也不一样
从程序中理解多态:一个行为(方法)eat,由于面向不同的子类对象(狗,猫),得到的结果是不同子类对象的结果
从内存中理解多态:父类引用指向子类对象
特点
优点:优化了代码,提高了代码的复用性,扩展性、了维护性
缺点:在使用多态时,不能方便的转换类型(向下转型),需要使用instanceof
注意事项
(1)一定要有继承
(2)一定要有重写
(3)父类引用指向子类对象
使用步骤
(1)先写父类
(2)再写子类(子类继承父类、子类重写父类方法)
(3)父类引用指向子类对象 父类 对象名 = new 子类();
多态三种实现
(1)父类引用指向子类对象 FU fu = new Zi();
(2)父类作为形式参数传递public void eat(FU fu){fu.eat(new Dog();)}
(3)父类作为返回值类型public FU eat(){Fu fu = new Dog();return fu.eat();}
转型问题
向上转型
向下转型:把父类转成子类
二、抽象类
概念
使用abstact关键字,作为抽象父类,为了不让父类可以实例化,专门为子类提供属性和方法
好处
方便子类的使用
使用
在父类前面加上abstact
特点
(1)不能被实例化
(2)抽象类可以有成员方法和成员属性,可以有抽象方法,普通类不能有抽象方法
(3)抽象方法没有方法体
(4)子类必须重写所有父类的抽象方法
(5)没有抽象构造方法,也没有抽象静态方法
三、接口
好处
既有多态的好处,又有强的可扩展性
灵活的,是一种规范,是一种能力
实现接口
作为一个父类接口,是一个无私的类,专门提供多种能力可以方便子类使用
子类实现接口的关键字:implements
特点
(1)接口间多继承;interface Zi extends 接口父类1,接口父类n{}
(2)子类多实现接口;class Zi implements 接口父类1,接口父类n{}
(3)只有静态常量public static final和抽象方法public abstact
(4)不能实例化
(5)子类必须实现父类接口的所有抽象方法
(6)定义接口关键字interface
(7)子类实现接口implements
(8)使用多态
四、常见关键字
1、static关键字
代表可以修饰的是静态的属性、方法、类(内部类)
static的特点:
修饰的属性,叫静态属性,类属性
修饰的方法,叫静态方法,类方法
概念
static修饰的成员,是属于类的,不属于某个对象,不需要创建对象
执行时期
在类加载的时候,在内存中方法去中静态区中只初始化一次
随着类的加载而加载
注意事项
(1)静态的只能访问静态的,不能访问非静态的
(2)非静态的可以访问静态的,也可以访问非静态的
2、final关键字
概念
代表的是最终的,不可改变的,一般结合工具类使用
特点
(1)可以修饰类,修饰属性,修饰方法
(2)修饰的类不能被继承
(3)修饰的属性不能改变值
(4)修饰的方法不能重写
(5)修饰的位置
成员的位置:注意,一定要赋初始值
局部的位置:注意,可以不赋初始值,但是用的时候要赋予值
3、this 关键字
概念
用来访问本类/自己类/当前类 的熟悉那个、方法(成员方法、构造方法)
使用
访问属性:this.属性名;
访问方法:this.方法名();
访问构造方法:
this();访问本类无参构造
this(值);访问本类带参构造
4、super关键字
概念
代表是父类/超类/基类的意思,用来访问父类的属性、方法(成员方法,构造方法)
只能在子类使用super
使用
访问属性:super.属性名;
访问方法:super.方法名();
访问构造方法:
super();访问父类无参构造。//系统默认写再第一行
super(值);访问父类带参构造
5、this & super 区别
this:在本类中使用
super:在子类中使用
this和super不能同时使用,且必须出现在第一行
五、常用类
1、包装类
概念
对八大基本数据类型提供的封装类/包装类,引用类型
很方便提供一些方法来进行操作各种数据类型的数据
基本类型是没有提供方法可以操作,数据运算
类型
基本数据类型:byte short int long float double boolean char
引用类型:String类,类,接口,数组
拆箱&装箱
对应基本数据类型的包装类类型:Byte Short Integer Long Float Double Boolean Character 'a'
基本数据类型和包装类型相互之间转换的方法:Integer
自动/手动装箱:把基本数据类型转换成包装类类型
自动/手动拆箱:把包装类类型转换成基本数据类型
static valueOf() 把其他类型转换成包装类整形的方法
toString() 转换成字符串String类型
intValue() 把包装类型转成基本类型
例如:
Integer i2 = Integer.valueOf("10"); //包装类类型
int i1 = i2.intValue(); //基本类型
static parseInt() 转换成基本类型int类型,拆箱
2、字符串String类
概念
不可变长字符串
使用
char charAt(int index) 根据索引查找指定的字符
String concat(String str) 字符串拼接 +
boolean equals(Object anObject) 比较两个字符串的内容是否相等
int indexOf(String str) 根据指定的字符串查找从左往右第一次出现的对应的索引位置
int lastIndexOf(int ch)根据指定的字符串查找从右往左第一次出现的对应的索引位置
int length() 字符串的长度 hello 5
String replace(char oldChar, char newChar) 把老的字符替换成新的字符
String[] split(String regex) 字符串分割成字符串数组 h,e,l,l,o
String toLowerCase() 转小写 HELLO hello
String toUpperCase() 转大写 hello HELLO
String trim() 去掉前后空格 hello
static String valueOf(int i) 把其他基本数据类型转换字符串类型
3、日期类Date
Date() 无参构造
Date(1613958364033L) 带参构造
getTime() 获得当前从1970-1-1到当前的毫秒值
4、日历类Calandar
getInstance() 得到一个实例化对象Calandar
使用
字段:年YEAR月MONTH日DAY时HOUR分MINTUE秒SECOND周WEEK
add()
abstract void add(int field, int amount) 如:c.add(Calendar.MONTH,5);
给月份增加5个月
get()
int get(int field) int month = c.get(Calendar.MONTH);
获取年月日时分秒等
set()
void set(int field, int value) 如:c.set(Calendar.MONTH,2);
将给定的日历字段设置为给定值。
void set(int year, int month, int date) 如:c.set(2033,10,29);
设置日历字段 YEAR、MONTH 和 DAY_OF_MONTH 的值。
void set(int year, int month, int date, int hourOfDay, int minute)
设置日历字段 YEAR、MONTH、DAY_OF_MONTH、HOUR_OF_DAY 和 MINUTE 的值。
void set(int year, int month, int date, int hourOfDay, int minute, int second)
设置字段 YEAR、MONTH、DAY_OF_MONTH、HOUR、MINUTE 和 SECOND 的值。
5、DateFormat 父类 SimpleDateFormat
format() 格式化
进行格式化(日期 -> 文本)、
StringBuffer format(Date date, StringBuffer toAppendTo, FieldPosition pos)
将给定的 Date 格式化为日期/时间字符串,并将结果添加到给定的 StringBuffer。
parse() 解析
解析(文本 -> 日期)
Date parse(String text, ParsePosition pos)
解析字符串的文本,生成 Date。
六、访问修饰符
从严到宽:private < default < protected < public
private:本类 可见性
default:同包 可见性
protected :同包/子类 可见性
public:项目 可见性
七、方法
1、成员方法(又叫普通方法、自定义方法)
概念
完成一段特定的功能代码片段
格式
public void test(){};
注意事项
(1)不能嵌套定义
2、构造方法(又叫构造器、构造函数)
作用
快速初始化操作
格式
public 类名(){};
不用void修饰
特点
无参构造方法,系统默认提供
写了一个有参构造方法,系统则不会提供无参构造,则需要自己加上
在子父类中,在访问子类的构造方法之前,会默认调用父类的无参构造
如果不想访问父类无参构造,可以使用super(值)访问父类带参构造
再访问子类自己的构造方法
3、方法重载 & 方法重写
1、方法重载
与修饰符、返回值无关
与方法名相同
参数列表不同(个数、顺序、类型)
在同一个类中
2、方法重写
修饰符不能严于父类
返回值相同/其子类
参数列表相同(个数、顺序、类型)
子父类中,不能比父类抛出更大的异常

浙公网安备 33010602011771号