千峰2021-1-25~2021-1-29学习总结
第一天
-
什么是接口
接口是一种额外的功能----本身是当前现实世界事物没有的功能 -
接口的特点
1)接口中的功能是抽象方法,不能有方法体
2)接口不能实例化
3)如何实例化呢?
通过" 接口多态"
接口名 对象名 = new 子实现类名();
接口是通过子实现类实例化,前提这个子实现类是一个具体类 -
接口中的成员特点
成员变量: 公共静态常量( public static final(可以省略不写))
成员方法:公共抽象方法(public static final (可以省略不写))
构造方法:没有构造方法 -
接口与接口的关系
继承关系:extends
接口与接口之间是继承关系,可以单继承,也可以是多继承 -
接口与子实现类的关系
实现关系:implements
类---->接口的子实现类,实现接口的功能! 一个类在继承另一个类的同时,可以实现多个接口
-
方法的形式参数:
引用类型:
1)数组:实际参数需要传递当前数组对象
2)类:
具体类:实际参数传递,需要该具体类对象(要么接匿名对象,要么 具体类名 对象名 = new 具体类名())
抽象类:实际参数传递,需要该抽象类的子类对象(通过抽象类多态的形式);或者通过匿名内部类进行传递
接口类型:实际参数传递,需要该接口的子实现类对象(通过接口多态的形式);或者通过匿名内部类进行传递方法形式参数: 如果是引用类型(除过String),形式参数的改变会直接影响实际参数 方法形式参数:如果是基本数据类型或String类型,形式参数的改变不会直接影响实际参数
-
方法的返回值是引用数类型
具体类:方法需要结束,返回的是当前具体类型----有一个空间地址值(匿名对象/有名字对象 类名 对象名 = new 类名())
抽象类 :方法需要结束,返回的是当前抽象类的子类对象,定义一个子类继承抽象 类; 或者通过匿名内部类进行传递
接口类型:方法需要结束,返回的是当前接口的子实现类对象,定义接口的子实现类实现接口(接口多态) ;或者通过匿名内部类进行传递
第二天
-
修饰符
1)状态修饰符:
final:最终的,无法更改的
可以修饰类,当前类不能被继承
可以修饰变量,此时这个变量是一个常量
可以修饰成员方法,此时这个方法不能被重写2) 静态修饰符
static: 共享(共用):
随着类/接口的加载而加载
优先于对象存在 (不能this关键字)
被static修饰 的成员变量,可以被多个对象共用
被static修饰的,它的访问方法是 : 推荐—>使用类名/接口名.变量;/方法名()
3)抽象修饰符
abstract:抽象
可以修饰类----抽象类(描述:现实世界事物中,比较概括性的东西)
可以修饰成员方法---->抽象方法
可以在抽象类中使用
也可以接口中使用
4)public 权限:在整个项目中都可以访问
private 权限:在当前类中可以访问
default(默认修饰符) 权限:到同一个包下的其他类都可以访问
protected:权限:最大到不同包下的子类 -
什么是内部类
一个类中定义另一个了类
举例:
在类A中定义了一个类B,那么将类B称为类A的内部类,类A是当前类B的外部类
内部类的特点:
1)内部类中的成员可以访问外部类的成员,包括私有
2)外部类的成员访问内部类(成员内部类)中的成员方法,需要创建内部类对象来访问 -
内部类的划分
1)成员内部类: 在一个类的成员位置定义的类,(外部类中,方法外)
特点:
(1)它的成员可以访问外部类的成员,包括私有
(2)测试类中,访问当前成员内部类中的成员方法
当前成员内部类:是非静态的!
格式: 外部类名.内部类名 对象名 = new 外部类名().new 内部类名();
对象名.方法名/属性在成员内部类上加入static 修饰
特点:
静态的成员内部类中的成员方法(静态/非静态)只能访问外部类的静态的成员,否则报错
非静态的成员内部类中不能出现静态的成员
在测试类中,访问静态的成员内部类的成员?
外部类名.内部类名 对象名 = new 外部类名.内部类名() ; 推荐:外部类名.内部类名.方法名/属性
2)局部内部类:在方法定义中定义的类
特点:
(1) 局部内部类的成员都可以访问外部类的成员,包括私有
(2) 外部类的成员要访问局部内部类中的成员
通过对象访问 内部类名 对象名 = new 内部类名() ;3)什么是匿名内部类
匿名内部类,就是没有名字的一个类
使用格式:
new 类名/接口名(){
重写方法;
} ; 匿名内部类的本质是什么?
本质就是继承了该抽象类或者是实现了该接口的 子类对象
第三天
-
类 Object 是类层次结构的根类
获取字节码文件方式:
(1)Object类中getClass()
public final Class getClass() 表示正在运行的类
获取到的这个Class----class 包名.类名
(2)任意 Java类型class属性
Class c =类名.class;public String toString() 返回该对象的字符串表示。通常,toString 方法会返回一个“以文本方式表示”此对象的字符串。结果应是一个简明但易于读懂的信息表达式。 ----->建议所有子类都重写此方法
public boolean equals(Object obj) 指示其他某个对象是否与此对象“相等”?
如果默认执行的是Object类中的equals方法,比较的是两个对象的地址值是否相同;
如果重写了equals方法,比较的是两个对象的内容是否相同(成员变量信息是否一致)
protected Object clone()
throws CloneNotSupportedException创建并返回此对象的一个副本
Object 类的 clone 方法执行特定的复制操作。首先,如果此对象的类不能实现接口 Cloneable,则会抛出 CloneNotSupportedException。注意,所有的数组都被视为实现接口 Cloneable -
String类
String 类代表字符串。Java 程序中的所有字符串字面值(如 "abc" )都作为此类的实例实现 字符串是常量;它们的值在创建之后不能更改
构造方法
String() :构造一个空字符序列
public String(byte[] bytes):将字节数组构造成一个字符串(解码的过程-平台默认的解码格式:UTF-8)
public String(byte[] bytes,int offset,int length):将一个部分字节数组构造成字符串
参数1:字节数组对象
参数2:指定的角标
参数3:指定的长度
public String(char[] value):将字符数组构造成字符串
public String(char[] value,int offset,int count):将字符数组的一部分构造成字符串
public String(String original):将某个字符串数据常量–构 造成String对象 -
数组中有没有length(),字符串中有没有length(),集合中有没有length()方法?
数组中没有length方法的,获取数组长度 :length属性
String类中:有length() :获取字符串中的字符的长度
集合中:没有length() : 获取集合的元素数:size()
第四天
-
String类的判断功能
public boolean equals(Object an):和指定的字符串进行比较(字符串重写了Object类中的equals方法):比较的是字符串 内容是否相同
public boolean equalsIgnoreCase(String anotherString):不区分大小写比较
public boolean contains(String s/字符序列):判断是否包含指定的字符序列
public boolean endsWith(String suffix):判断当前此字符串是否以指定的子字符串结尾
public boolean startsWith(String prefix):判断当前此字符串是否以指定的子字符串开
public boolean isEmpty():判断此字符串是否为空 -
字符串常量相加和字符串变量相加的区别
字符串常量相加:
先相加,然后在常量池中找是否存在这个常量,如果存在,直接返回值常量池中的该地址值; 如果不存在,在常量池中开辟空间
字符串变量相加:
先开辟空间,然后对结果----拼接----新的字符串变量(== 考虑其地址值) -
String类的获取功能:
public char charAt(int index):获取指定索引处的字符 public String concat(String str):将指定的字符串和此字符串进行拼接,获取一个新的字符串 public int indexOf(String str):获取子字符串在当前字符串中第一次出现的索引值 public int lastIndexOf(String str):获取子字符串在当前字符串最后一次出现的索引值 public int length():获取字符串的长度 public String substring(int beginIndex):从指定位置开始默认截取到末尾,获取当前字符串 public String substring(int beginIndex,int endIndex):从指定位置开始截取到指定位置结束,包左不包右
-
String类的转换功能
public byte[] getBytes():编码过程(将能看懂的东西转换成看不懂的):将字符串转换字节数组
public char[] toCharArray():将字符串转换成字符数组
public String[] split(String regex):将字符串转换成字符数组(分割/拆分功能)
public String toLowerCase():将字符串转换小写
public String toUpperCase():将字符串转换成大写
public static String valueOf(int/long/float/double/boolean/Object):万能方法,将一些部分基本数据类型和引用类型转换成String -
String类的其他功能
替换功能
String replace(char oldChar, char newChar)
去除两端空格
public String trim() -
public int compareTo(String anotherString)按字典顺序比较两个字符串
两个字符串进行比较(字典顺序) s1,s2
1)将s1,s2分别转换成字符数 组,获取这个两个长度:len1,len2
2)获取两个字符数组中长度的最小值 通过Math.min(len1,len2) ;----int lim
3)分别将字符数组的元素进行初始化:
char v1[] = {‘元素1’,‘元素2’…};
char v2[] = {‘元素1’,‘元素2’…} ;
4)定义统计变量k
while(k<lim){ //k 从0开始
//获取第一个字符数组中的第一个元素
char c1 = v1[k] = v1[0] = ‘元素1’;
char c2 = v2[k] = v2[0] = ‘元素1’ ;
//c1和c2相等,继续判断,继续判断第二个字符是否一致,依次这样,
(如果都一致,条件不成立)while循环结束
if(c1!=c2){
return c1 -c2 ;//字符对应的ASCII码表的值相减
}
k++;
}
5)return len1-len2; -
StringBuffer类:
线程安全的可变字符序列------ 字符串缓冲区 构造方法 StringBuffer() :无参构造方法 :构造一个其中不带字符的字符串缓冲区,其初始容量为 16 个字符。 public StringBuffer(int capacity):构造一个字符串缓冲区,指定容量大小 public StringBuffer(String str):构造一个带内容的字符串缓冲区:字符串的初始容量为 16 加上字符串参数的长度 方法: public int capacity():获取容量大小 public int length():获取字符串长度
第五天
-
StringBuffer的添加功能
public StringBuffer append(xxx);将任意类型的内容追加到此序列中(字符串缓冲区中)
public StringBuffer insert(int offset,String xxx):在指定位置处插入指定的元素 -
StringBuffer的删除功能
public StringBuffer deleteCharAt(int index):删除指定位置处的字符序列,返回值是StringBuffer本身
public StringBuffer delete(int start,int end):从指定位置删除到指定位置结束的字符序列(包含start位置,结束到end-1),返回值自己本身 -
StringBuffer的其他功能
替换功能:
public StringBuffer replace(int start,int end,String str)
从指定位置处开始到end-1处,使用str字符进行替换,返回StringBuffer 本身反转功能:
public StringBuffer reverse():将缓冲区中的字符串进行反转,返回的StringBuffer本身
-
StringBuffer的截取功能:
public String substring(int start):从指定位置开始截取,默认截取到末尾,返回值是新的字符串
public String substring(int start,int end):从指定位置开始截取到end-1的位置,返回值是新的字符串
-
String和StringBuffer之间的相互转换
1)将.String转为StringBuffer
方式一:利用StringBuffer的构造方法 //StringBuffer(String str)
String s = “hello” ;
StringBuffer sb = new StringBuffer(s) ;
System.out.println(“sb:”+sb);
方式二:利用StringBuffer的追加功能 append //空参构造
String s = “hello” ;
StringBuffer sb2 = new StringBuffer() ;
sb2.append(s) ;
System.out.println(“sb2:”+sb2);2)将StringBuffer转为String
方式一: 利用String的构造方法 public String(StringBuffer buffer)
StringBuffer buffer = new StringBuffer(“Javaee”)
String result = new String(buffer) ;
System.out.println(“result:”+result);
方式二:StringBuffer的功能 //public String toString()
StringBuffer buffer = new StringBuffer(“Javaee”)
String result2 = buffer.toString();
System.out.println(“result2:”+result2);