目录
五、String、StringBuffer、StringBuilder的区别
六、<<、>>、>>>含义和区别
一、反射机制
1.功能:
- 获取一个对象所属的类;
- 获取一个类的所有成员变量和方法;
- 在运行时动态创建对象;
Class c = Class.forName(“类的全路径”);
Student s = (Student) c.newInstance();
- 在运行时动态调用对象的方法;
2.获取Class的方法
-
Class.forName(“类的全路径”);
-
类名.Class
-
实例.getClass()
二、面向对象的多态
1. 多态的实现机制有overload、override。
overload:同一个类中有多个相同name的函数,但是他们的参数不同,是编译时的多态;
override:子类覆盖父类的方法,参数相同,时运行时的多态;子类只能继承父类非私有(protected和public)的成员变量和方法。
2.父类的引用可以执行子类对象。
3.子类独有的方法不能通过父类对象调用。
三、break、continue、return区别
break:退出当前循环,不影响外层循环。可以使用标签(eg: out:)在外层循环中,如果要跳出指定循环,则用break out即可。
continue:用于退出当前循环,继续下次循环。
return:退出当前函数,回到调用该方法的地方。
四、final、finally、finalize区别
final:修饰变量表示变量不可变,一是引用不可变,二是Java对象不可变,因此必须初始化,既可以在声明时赋值,也可以在构造函数中初始化;
finally:try_catch的部分,finally中的代码块一定会被执行。不论try中有return,还是catch中有return,finally中的return会覆盖其他地方的return。
finalize:在gc时会调用被回收对象的finalize()。
五、String、StringBuffer、StringBuilder的区别
1.String是不可变类,String对象一旦被创建其值不能被改变,若要修改相当于new一个对象。
String s1 = new String(“abc”);
String s2 = new String(“abc”);
//s1和s2是两个不同的对象,生成在堆区。
new String(“abc”),可能会创建一个或者两个对象。若常量池中有”abc”,则只会在堆区创建一个String对象,执行常量池中的”abc”;如果常量池中没有”abc”,则会在创建两个对象,一个在常量池中,一个在堆区。
String s1 = “abc”;
String s2 = “abc”;
s1和s2指向常量池中同一个对象”abc”。
2.StringBuffer:是一个类似String的字符串缓冲区,使用append()修改值,toString()转化为String类型,是线程安全的。
StringBuffer的修改效率比String高,因为对String对象的修改,需要先new StringBuffer对象,在调用其append()和toString()。
String s = "hello";
s += “world”;
相当于
StringBuffer sb = new StringBuffer(s);
sb.append(“world”);
s = sb.toString();
3. StringBuilder不是线程安全的,效率比StringBuffer高。
4. 使用场景总结
操作数据量比较小,修改次数少,优先使用String;
在单线程下操作大量Data优先使用StringBuilder;
在多线程下操作大量Data使用StringBuffer。
六、<<、>>、>>>含义和区别
- << 表示左移运算符,高位不变,低位补0,补n位,所以左移n位相当于乘以2的n次方。
eg: 8<<2,表示左移2位,低位补0,相当于8*2*2=32。
- >> 表示右移运算符,高位补0,低位不变,右移n位相当于除以2的n次方。
- >>> 表示无符号右移运算符。高位补0,右移n位相当于除以2的n次方。