- 字符串的拼接问题
直接用“+”进行拼接的话,每次拼接,都会创建一个新的String对象,然后进行拼接,如下:
这样即耗时,又浪费内存空间。
因此,可以使用StringBuilder类来拼接。StringBuilder
String:是一个不可变的字符串,若要拼接需要再分配新内存,见上。
StringBuilder:是一个可变的字符串类,可以大概看作一个字符串的容器。
二者可通过String s = sb.toString()和StringBuilder sb = new StringBuilder(s)来相互转换。
| 方法名 | 说明 |
|---|---|
| public StringBuilder append(任意类型) | 添加对象,并返回己身 |
| public StringBuilder reverse() | 返回相反的字符串序列。 |
- ArrayList
| 方法名 | 说明 |
|---|---|
| public boolean remove(Objece o) | 删除指定的元素,返回删除是否成功 |
| public E remove(int index) | 删除指定索引处的元素,返回被删除的元素 |
| public E set set(int index,E element) | 修改指定索引处的元素,返回被修改的元素 |
| public E get(int index) | 返回指定索引处的元素 |
| public int size() | 返回集合中的元素的个数 |
super关键字:
可理解为,super用法与this相类似,不同点在于:this访问本类中的信息,super访问父类中的信息。
在子类继承父类时,会默认调用super(),即调用了父类的无参构造方法。
若父类中没有无参构造方法时,可使用super(参数…),调用父类的带参构造方法。
子类重写父类的方法时,子类的访问权限不低于父类即可。
父类的方法中private修饰的方法不能被子类重写。
访问权限:public>默认(不写时的,即缺省)>private
静态方法中不可访问非静态的方法。
原因:静态的方法可以通过类名直接访问,无需创建实例化对象。而非静态的方法使用之前,需要创建实例化对象。故通过静态的方法访问非静态的方法时,非静态方法可能不存在实例化对象,导致访问成空,从而报错。
多态:定义方法的时候,使用父类型作为参数,在将来使用的时候,使用具体的子类型参与操作(父类 实例对象名字a = new 子类(),此时调用a的成员变量和未重写过的方法时,值为父类,调用重写过的方法时,方法为子类。无法使用子类中独有的方法。)(提高了程序的扩展性)。
抽象类与接口的区别:
| 成员区别 | 关系区别 | 设计理念区别 | |
|---|---|---|---|
| 抽象类 | 变量、常量、构造方法、抽象和非抽象方法 | 类与类:继承、单继承。类与接口:单实现或多实现 | 对类抽象,包括属性、行为(方法) |
| 接口 | 常量、抽象方法 | 接口与接口:继承、单继承、多继承 | 对行为抽象,主要是行为(方法) |
- 接口名作为形参或者返回值时,采用多态的思想,新建一个类实现接口,创建一个实例化对象,将此实例化对象赋给接口名对象即可。
内部类:在一个类中定义的又一个类(套娃)。内部类可以直接访问外部类的成员,包括pirvate修饰的。外部类访问内部类的成员时,需要创建实例化对象。
格式:
public class Outer{
public class Inner{
.......
}
}
在别的类中创建一个内部类的实例化对象的方法,例:
Outer.Inner 名字 = new Outer().new Inner();
常见用法:
public class Outer{
int num = 10;
private class Inner{//大概是JAVA注重安全性?
public void show(){
System.out.println("num");
}
}
public void method(){
Inner i = new Inner();
i.show();
}
}
另一个类中调用
public class Test{
public static void main(String[] args){
Outer o = new Outer();
o.method();
//间接调用了Outer中的Inner中的show方法。
//此方法在类的内部创建对象,在调用时直接调用方法即可。
//将内部实现细节隐藏了,保护数据安全。
}
}
局部内部类类似(区别为:访问权限的修饰符为缺省。)。
- 匿名内部类:没有名字的内部类=.=
使用前提和条件:必须存在继承和实现关系的时候才可以使用。
好处:简化书写、存在只需要实现一次的接口或父类时,避免浪费,直接使用。
详细见:
https://blog.csdn.net/qq_34944851/article/details/51449420?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522164275505016780255284418%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=164275505016780255284418&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allfirst_rank_ecpm_v1~rank_v31_ecpm-1-51449420.pc_search_result_cache&utm_term=%E5%8C%BF%E5%90%8D%E5%86%85%E9%83%A8%E7%B1%BB&spm=1018.2226.3001.4187



