- 字符串的拼接问题
直接用“+”进行拼接的话,每次拼接,都会创建一个新的String对象,然后进行拼接,如下:
这样即耗时,又浪费内存空间。
因此,可以使用StringBuilder类来拼接。StringBuilder
String:是一个不可变的字符串,若要拼接需要再分配新内存,见上。
StringBuilder:是一个可变的字符串类,可以大概看作一个字符串的容器。
二者可通过String s = sb.toString()和StringBuilder sb = new StringBuilder(s)来相互转换。
- ArrayList
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
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)