抽象类
抽象类的概念
一个没有方法体的方法应该定义为抽象方法,而类中如果有抽象方法,该类必须定义为抽类。
抽象类的格式
格式:
public abstract class 类名{}
public abstract void 方法名();
抽象类的成员特点
成员变量
可以是常量
可以是变量
成员方法
可以抽象方法(强制子类必须重写)
也可以非抽象方法
构造方法
有构造方法,但是不能实例化
构造方法作用(用于子类访问父类的数据初始化)
有抽象方法一定是抽象类,抽象类不一定有抽象方法
接口
接口的概念
接口就是具有某些特定的功能,没有给出具体的实现
接口的格式
接口的定义
关键字 interface
格式:interface 接口名{}
实现接口
关键字 implements
格式:calss 类名+Impl implements 接口名{}
接口是不能实例化的,只能通过实现接口的子类实例化
接口成员特点
成员变量
只能是常量
默认格式:public static final
成员方法
只能是抽象方法
默认格式:public abstract
无构造方法
抽象类与接口的区别
都不实例化
成员区别
抽象类
成员变量 可以是常量、变量
成员方法 可以是抽象方法、非抽象方法
有构造方法
接口
成员变量 只能是常量 默认格式:public static final
成员方法 只能是抽象方法 默认格式:public abstract
关系区别
类与类
类只能单继承,不能多继承,可以多层继承
类与接口
一个类在继承另一个类同时,还可以实现多接口
接口与接口
接口可以单继承,也可以多继承
设计理念区别
抽象类 是 is a 关系,共性功能
接口 是 like a关系,扩展功能
包
包的概念
其实就是一个文件夹
包的注意事项
定义包的格式
package 包名;
多级包用.分开即可
注意事项:
package语句必须是程序的第一条可执行的代码
package语句在一个java文件中只能有一个
如果没有package,默认表示无包名
导包
导包概述
不同包下的类之间的访问,我们发现,每次使用不同包下的类的时候,都需要加包的全路径。比较
麻烦。这个时候,java就提供了导包的功能。
导包格式
import 包名;
注意:
这种方式导入是到类的名称。
虽然可以最后写*,但是不建议。
修饰符
静态修饰符 static
抽象修饰符 abstract
常量修饰符 final
权限修饰符
public
private
protected
默认
权限修饰符的范围
public | protected | 默认 | private | |
---|---|---|---|---|
同一类中 | √ | √ | √ | √ |
同一包子类,其他类 | √ | √ | √ | |
不同包子类 | √ | √ | ||
不同包其他类 | √ |
内部类
内部类的概念
把类定义在其他类中,这个类就被称为内部类
内部类的分类
成员内部类 定义在类的成员位置
局部内部类 定义在类成员方法
创建类的实例
外部类名.内部类名 对象名 = 外部类对象.内部类对象;
成员内部类
1)被静态修饰的成员内部类只能访问外部类的静态成员
内部类被静态修饰后的方法
可以是静态方法,也可以是非静态方法
2)非静态的成员内部类,成员只能是非静态的。
3)内部类被静态修饰后的方法有静态和非静态之分。他们的访问和不用静态是不一样的。
访问非静态方法:外部类名.内部类名 对象名 = new 外部类名.内部类名();
访问静态方法:上面创建的对象访问,或者外部类名.内部类名.方法
局部内部类
1)可以直接访问外部类的成员
2)可以创建内部类对象,通过对象调用内部类方法,来使用局部内部类功能
3)局部内部类访问局部变量的注意事项:
必须被final修饰?jdk1.8后面默认final
为什么呢?
因为局部变量会随着方法的调用完毕而消失,这个时候,局部对象并没有立马从堆内存中消失,还
要使用那个变量。为了让数据还能继续被使用,就用fianl修饰,这样,在堆内存里面存储的其实
是一个常量值
匿名内部类
格式: new 类名/接口(){
重写方法
};
本质:继承类(抽象类)的子类对象或实现接口的子类对象
形参参数和返回值
基本类型
引用类型
形式参数如果是具体类,实际参数传递需要转递该具体类的对象
形式参数如果是抽象类,实际参数传递需要该抽象类的子类对象或是匿名内部类
形式参数如果是接口,实际参数传递需要该接口的子实现类或者接口的匿名内部类
方法的返回值如果是具体类,方法return 需要该类的具体类对象
方法的返回值是抽象类,需要返回该抽象类的子类对象或是匿名内部类
方法的返回值是接口,需要返回该接口的子实现类或者接口的匿名内部类
选择排序
思想:
索引值为0的元素与其他元素进行比较,第一次比较完毕后,最小值出现在最小索引处
第二次比较,索引值为1的元素与其他元素进行比较,小的元素取代索引值为1的位置
依次下去...
最终比较次数:length-1
写法
int[] arr={13,31,56,78,8,2};
for(int i = 0;i<arr.length-1;i++){
for(int j = i;j<arr.length;j++){
if(arr[i]>arr[j]){
int temp =arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
}
}
常用类
string类
string的特点
1.字符串是常量,一旦被赋值,其值不能被更改
2.对象不可变,可以被共享
形式参数改变,不会影响到实际参数
构造方法
public String() :初始化新创建的 String对象,以使其表示空字符序列。
public String(char[] value) :通过当前参数中的字符数组来构造新的String。
public String(byte[] bytes) :通过使用平台的默认字符集解码当前参数中的字节数组来构造新的String。
常用方法
判断功能的方法
public boolean equals (Object anObject) :将此字符串与指定对象进行比较。
public boolean equalsIgnoreCase (String anotherString) :将此字符串与指定对象进行比较,忽略 小写。
获取功能的方法
public int length () :返回此字符串的长度。
public String concat (String str) :将指定的字符串连接到该字符串的末尾。
public char charAt (int index) :返回指定索引处的 char值。
public int indexOf (String str) :返回指定子字符串第一次出现在该字符串内的索引。
public String substring (int beginIndex) :返回一个子字符串,从beginIndex开始截取字符串到字 符串结尾。
public String substring (int beginIndex, int endIndex) :返回一个子字符串,从beginIndex到
endIndex截取字符串。含beginIndex,不含endIndex。
转换功能的方法
public char[] toCharArray () :将此字符串转换为新的字符数组。
public byte[] getBytes () :使用平台的默认字符集将该 String编码转换为新的字节数组。
public String replace (CharSequence target, CharSequence replacement) :将与target匹配 的字符串使用replacement字符串替换。
public String toLowerCase();将字符转换成小写
public String totoUpperCase(); 将字符转换成大写
分割功能的方法
public String[] split(String regex) :将此字符串按照给定的regex(规则)拆分为字符串数组。
字符串的常量相加和变量相加
变量相加: 先开空间,产生地址,之后在相加---->还需要看是否有这个值!
常量相加: 先直接相加(拼接) ----->在常量池中找,是否存在这个值,如果存在直接返回这个地址;如果不存在,需要在常量池中开辟空间地址!
StringBuffer类
StringBuffer类的特点
StringBuffer:线程安全的可变字符序列
线程安全的类--->同步的
StringBuffer作为形式参数,形参的改变会影响实际参数
构造方法
StringBuffer() :无参构造方法 :构造一个其中不带字符的字符串缓冲区,其初始容量为 16 个字符。
public StringBuffer(int capacity):构造一个字符串缓冲区,指定容量大小
public StringBuffer(String str):构造一个带内容的字符串缓冲区:字符串的初始容量为 16 加上字符串参 数的长度
public int capacity():获取容量大小
public int length():获取字符串长度
常用方法
添加功能
public StringBuffer append(xxx);将任意类型的内容追加到此序列中(字符串缓冲区中)
public StringBuffer insert(int offset,String xxx):在指定位置处插入指定的元素
删除功能
public StringBuffer deleteCharAt(int index):删除指定位置处的字符序列
public StringBuffer delete(int start,int end):从指定位置删除到指定位置结束的字符序列(包含start位置,结束到end-1)
替换功能
public StringBuffer replace(int start,int end,String str)从指定位置处开始到end-1处,使str字符进行替换,返回StringBuffer本身
截取功能
public String substring(int start):从指定位置开始截取,默认截取到末尾,返回值是新的字符串
public String substring(int start,int end):从指定位置开始截取到end-1的位置,返回值是新的字符串
反转功能
public StringBuffer reverse():将缓冲区中的字符串进行反转
String和StringBuffer之间的相互转换
String转StringBuffer
两种方式
方式1:利用StringBuffer的构造方法
StringBuffer(String str)
方式2:利用StringBuffer的追加功能 append
空参构造+append(xx)
StringBuffer转String
两种方式
方式1:利用String的构造方法 public String(StringBuffer buffer)
方式2:StringBuffer的功能
public String toString()