for()循环体内的新设置变量会在循环完毕后被回收
例如:
for(int i=0;i<10;i++){
Inner v=c.creator(Integer.toString(i));
c.add(v);
}
循环完毕后Inner v会被回收
Object数组向下转型
if(c.items[i] instanceof Inner )
Inner a=(Inner) c.items[i];
静态的只能访问静态的,因为他们在对象没创建前就存在了.
如果想访问非静态的则必须初始化该对象,因为只有初始化后对象在内存才存在
内部类访问外部类的成员的方法是 Outer.this.**
静态内部类不能直接访问外部类的非静态成员,但可以通过 new 外部类().成员 的方式访问 { new HelloWorld().score }
创建对象顺序:
静态变量——非静态变量——构造方法
继承:
父静态——子静态——父(非静态变量——构造方法)——子(非静态变量——构造方法)
父类生成子类对象时,该对象不能调用子类独有的方法
在list中存入类对象 ,类对象会变成Object类,使用时强制转换类型即可
- 在执行速度方面的比较:StringBuilder > StringBuffer
- StringBuffer与StringBuilder,他们是字符串变量,是可改变的对象,每当我们用它们对字符串做操作时,实际上是在一个对象上操作的,不像String一样创建一些对象进行操作,所以速度就快了。
- StringBuilder:线程非安全的
StringBuffer:线程安全的
当我们在字符串缓冲去被多个线程使用是,JVM不能保证StringBuilder的操作是安全的,虽然他的速度最快,但是可以保证StringBuffer是可以正确操作的。当然大多数情况下就是我们是在单线程下进行的操作,所以大多数情况下是建议用StringBuilder而不用StringBuffer的,就是速度的原因。
对于三者使用的总结:1.如果要操作少量的数据用 = String
2.单线程操作字符串缓冲区 下操作大量数据 = StringBuilder
3.多线程操作字符串缓冲区 下操作大量数据 = StringBuffer