String类的获取功能:
int length():获取字符串的长度 |
char charAt(int index):获取指定索引处的字符 |
int indexOf(int ch):返回指定字符第一次在该字符串出现的索引 why 是 int? 因为97和‘a’---->a |
int indexOf(String str):返回指定字符str字符串在大字符串中第一次出现的索引 |
int indexOf(int ch,int fromIndex):返回此字符从指定位置开始后第一次出现的索引 |
int indexOf(String str,int fromIndex:返回此字符串从指定位置开始后第一次出现的索引 |
String subString(int start):从指定位置开始截取到末尾(默认截取到末尾) |
String subString(int start ,int end):从指定位置开始截取到指定位置 包前不包后 |
String类的替换功能: String replace(char old,char new) String replace(String old, String new) |
去除字符串两端空格 String trim() |
String常用类:
构造方法:六个
public String():空参构造方法 |
public String(byte[] bytes):将字节数组转换成字符串 |
public String(byte[] bytes,int index,int length):将部分字节数组转换成字符串 |
public String(char[] value):将字符数组转变成字符串 |
public String(cahr[] value,int offset,int count):将字符数组的一部分转换成字符串 |
public String(String original):将字符串常量转换为字符串 |
String类的判断功能:
boolean equals(Object obj):将此字符串和指定的对象进行比较 |
boolean equalsIgnoreCase(String str):将此字符串和另一个字符串进行比较,忽略大小写 |
boolean contains(String str):此字符串是否包含一个子字符串 |
boolean startWith(String str):判断这个字符串是否以字符串(str)开头 |
boolean endWith(String str):判断这个字符串是否以字符串(str)结尾 |
boolean isEmpty():判断该字符串是否为空 |
int compareTo(String str):按字典顺序比较两个字符串 |
int compareToIgnoreCase(String str) : 忽略大小写比较 |
String类的转换功能;
byte[] getBytes():将字符串转换成字节数组 |
char[] toCharArray():将字符串转换成字节数组 |
static String valueOf(char[] chs):将字符数组转换成字符串(直接使用string类名就可以直接调用) |
static String valueOf(int i):将int类型数据转换成字符串 |
static String valueOf(任何数据类型):可以将任何数据类型转换成字符串 |
String toLowerCase():将字符串转换成小写 |
String toUpperCase():将字符串转换成大写 |
String contant(String str):字符串拼接 |
大字符串获取小字符串:
索引=-1 返回 count 索引 !=-1 count++
返回一个新的字符串赋给大串
|
查找大字符串中小字符串出现大的次数:4
public static void main(String[] args) { String str1="zbmshiyigezbmhaozbmzbm"; String str2="zbm"; System.out.println(getCount(str1,str2)); } |
private static int getCount(String big, String small) { int count=0; int index=0; while((index = big.indexOf(small))!=-1) { count++; big=big.substring(index+small.length()); } return count; } } |
抽象类:抽取共性,形成一个抽象类
抽象方法:方法功能声明相同,但方法功能主体不同
抽取方法声明,不抽取方法主体。
求周长的方法,不同图形算法不一样。
抽象类:不能实例化对象,不能new(只能new子类)
不能创建对象的原因:对象。抽象方法,抽象方法无方法主体,不能运行
使用方式:定义类,继承抽象类,将抽象方法重写,创建子类的对象
子类重写父类抽象方法:
建立子类,子类继承抽象类,重写抽象方法,创建子类对象
如果子类继承抽象类,重写了一部分抽象方法,这个子类还是一个抽象类。
抽象作用:继承体系,保证继承体系的完整性
抽象类:强制子类重写抽象方法
- 抽像类一定是个父类
- 抽象类中可以不定义抽象方法,为了不让该类创建对象,直接让子类调用
- private,final,static,不能与abstract同时出现,不能共存。
面试题:
抽象类中是否可以没有抽象方法?如何可以,该类还定义成抽象类有意义吗?why? 可以。可以没有抽象方法。有意义,不让其他人直接创建对象 这个类作为中间层的适配器出现。
|
java中有多继承吗? 类没有多继承,接口之间多继承 接口的好处:
|
接口思想:
满足接口规则,解开耦合性,提高扩展性
接口和抽象类的区别: 相同点:
不同点:
接口是这个事物中的额外内容,继承体系是一种“ like a”的关系
选用:优先选用接口,尽量少用抽象类 需要定义子类的行为,又要为子类提供共性功能时,才选用抽象类。 |
继承:子类会自动拥有父类所有可继承的属性和方法
- 子类中可以直接调用父类的成员
- 子类对象可以调用父类成员也可以调用子类成员
好处:提高代码复用性
继承的出现让类与类之间产生了关系,提供了多态的前提
弊端:高耦合
解决:用接口解除耦合
耦合性(Coupling),也叫耦合度,是对模块间关联程度的度量。耦合的强弱取决于模块间接口的复杂性、调用模块的方式以及通过界面传送数据的多少。模块间的耦合度是指模块之间的依赖关系,包括控制关系、调用关系、数据传递关系。模块间联系越多,其耦合性越强,同时表明其独立性越差( 降低耦合性,可以提高其独立性)。软件设计中通常用耦合度和内聚度作为衡量模块独立程度的标准。划分模块的一个准则就是高内聚低耦合。 |
注意:
|
抽取:每个具体事物的共性抽取,子类的共性抽取,形成父类
继承体系:父类--->内容最共性
子类--->不但拥有共性,还有自己的特性
this。---->调用自己本类成员
super。----->调用自己的父类成员
子类的对象,调用成员变量:
子类自己有,就使用自己的 子类中无,就调用父类 |
在子类想调用父类的成员,使用super。父类成员
子类(派生类)继承父类(超类,基类)
多态(对象的多态)
最终多态的体现:父类引用变量可以指向子类对象。
多态前提:必须有子父类关系或类实现接口关系
继承/实现 方法重写 父类引用指向子类对象 |
公式:
父类类型或接口类型 变量名 = new 子类的对象();
多态的调用方法,方法必须运行子类的重写。
多态成员特点:
成员变量的特点:编译运行全看父类 编译的时候,参考父类中有没有这个变量,如果有,编译成功,没有编译失败 运行的时候,运行的是父类中的变量值。 |
成员方法的特点:编译看父类,运行看子类 编译的时候,参考父类中有没有这个方法,如果有编译成功,没有编译失败 运行的时候,运行的是子类的方法重写 |
多态转型:
向上转型:子类提升为了父类类型 Fu f = new Zi(); Person p = new Student(); 父类的引用 变量名 = new 子类的对象(); 好处:可以调用父类和子类的共有内容,运行子类的重写 弊端:不能调用子类的特有功能。 |
向下转型:父类类型强制转回子类类型 Student s = (Student)Person; Zi z = new Fu; 好处:可以调用子类的特有功能。 |
类与类之间:继承关系,单继承,可以是多层继承 extends 类与接口直接:实现关系:可以单实现,也可以多实现 implements 接口与接口之间:继承关系,可以单继承,可以多继承 |
java中的类,可以继承一个父类的同时,实现多个接口。 |
创建对象就要明确属性值
给对象的属性初始化赋值--->构造方法