1、String类的两种对象实例化的方式
(1)采用直接赋值字符串的形式为String类对象实例化,开辟了一块堆内存空间和一块栈内存空间
(2)采用String类的构造方法为String类对象实例化,String类的构造方法为public String(String str)
2、在String类进行设计时采用了一种称为共享设计模式的概念,在每一个运行的JVM底层存在一个字符串的对象池Object Pool,如果用户采用直接赋值的方式,会将字符串的内容放入池中,以供其他继续使用直接赋值方式的String对象使用,如果新声明的字符串内容不在池中,则会开辟一个新的,继续放到池中,以供下次使用。
3、因为每一个字符串都是一个String类的匿名对象,所以首先会在堆内存中开辟一个空间存储字符串,然后又使用了new关键字,开辟了另一块堆内存空间,不过真正使用的是new开辟的堆内存,而之前定义的字符串常量的堆内存空间将不会有任何栈内存指向,将成为垃圾,等待被GC回收。使用构造方法实例化的String类对象内存不会保存在字符串对象池之中,即不能够进行共享数据操作。
4、解释String类的两种对象实例化方式的区别
(1)直接赋值:只开辟一块堆内存空间,字符串的内容可以自动入池
(2)构造方法:开辟两块堆内存空间,有一块将成为垃圾,并且不能自动入池,需用intern()手工入池
5、数组没有length()方法,有length属性;String有length()方法
6、常用内存区域
(1)栈内存空间:保存所有的对象名称(保存了引用的堆内存空间的地址)
(2)堆内存空间:保存每个对象的具体属性内容
(3)全局数据区:保存static类型的属性
(4)全局代码区:保存所有的方法定义
7、static定义的属性不在堆内存中保存,而是保存在全局数据区
8、重载overloading方法名称相同、参数的类型及个数不同、没有权限要求、发生在一个类中
9、重写overriding方法名称、参数类型及个数、返回值类型完全相同,被子类所覆写的方法不能拥有比子类更严格的访问控制权限,发生在继承关系类中。
10、构造方法私有化,只能够通过getInstance()方法取得singleton类的实例化对象,这样不管外部如何操作,最终也只有一个实例化对象,在单例设计模式中一定会存在一个static方法,用于取得本类的实例化对象
11、多态体现在方法的多态性(重载和重写)、对象的多态性(父子类对象的转换)
12、throw和throws的区别
(1)throw:用户手工抛出异常类的实例化对象
(2)throws:用于方法的声明上,表示此方法不处理异常,而将异常交给程序被调用处理
13、处理大数字可以使用BigInteger和BigDecimal,当需要精确小数点位数时则可以使用BigDecimal类
14、可以通过Class类中的newInstance()方法进行对象的实例化操作,但是要求类中必须存在无参构造方法,如果类中没有午餐构造,则必须使用Constructor类完成对象的实例化操作。
15、字节流和字符流的主要区别
(1)字节流没有使用到缓冲区,而字符流使用了
(2)处理各种数据都可以通过字节流完成,而在处理中文时使用字符流更好
16、System类的三个支持IO操作的常量out、err、in
(1)System.out:对应着显示器的标准输出
(2)System.err:对应着错误打印
(3)System.in:对应着标准的键盘输入
17、Collection和Collections的区别
(1)Collection:接口,定义集合操作的标准
(2)Collections:工具类,可以操作任意的集合对象