String类为什么是final的
final修饰的类不能被继承,不想改变的原因有两点:1,安全,2,效率
1,安全上来说
1),确保它们不会在子类中改变语义。String类是final类,这意味着不允许任何人定义String的子类。换言之,如果有一个String的引用,它引用的一定是一个String对象,而不可能是其他类的对象。
2)、String 一旦被创建是不能被修改的,因为 java 设计者将 String 为可以共享的
2、从效率上讲:
1)、设计成final,JVM才不用对相关方法在虚函数表中查询,而直接定位到String类的相关方法上,提高了执行效率。
2)、Java设计者认为共享带来的效率更高。
类的构造函数
1,当父类中没有定义任何构造函数时,编译器就会为它指定一个参数为空的默认的构造函数。如果父类中定义了构造函数,那么编译器就不会为它指定一个参数为空的默认构造函数了
2,构造函数不能继承。子类的构造函数可以通过super关键字显式调用父类中的构造函数。
3,如果子类中的构造函数没有显式调用父类中的构造函数,编译器就会自动在子类的构造函数中调用父类中参数为空的构造函数。
4,当父类中没有参数为空的构造函数,而子类中又没有显示调用父类的其他构造函数,编译时就会报错。这一点需要特别注意。