java面向对象基础题

1.String类的操作特点

一、String类有两种实例化方式
|--- 方式一: 直接赋值的实例化方式:直接赋值,开辟一块内存空间,并且对象可以入池。
|--- 方式二:构造方法的实例化方式:将会开辟两块内存空间,有一块会变为垃圾,且不会自动入池,需要用intern()方法来手动入池。eg:String str = new String("Hello world!").intern();
二、String的两种对象比较方式
|---方式一:“==”比较,比较的是两个字符串对象的内存地址数值,并不是对象的内容;
|---方式二:equals()方法比较,字符串的内容比较;
*字符串的对象一旦声明,内容就无法改变,改变的只能是字符串对象的地址指向。


2、简述垃圾对象的产生。

当我用new创建一个对象时,当可分配的内存不足GC就会去回收未使用的对象,但是GC的操作是非常复杂的,会占用很多CPU时间,对于移动设备来说频繁的垃圾回收会严重影响性能。下面的建议可以避免GC频繁操作。
 1)减少用new创建对象的次数,在创建对象时会产生内存碎片,这样会造成碎片内存不法使用
2)使用公用的对象(静态成员,常量),但是不能乱用,因为静态成员和常量的生命周期是整个应用程序。
3)在拼接大量字符串时StringBuilder。在使用注意,创建StringBuilder对象时要设置StringBuilder的初始大小如:
StringBuilder sbHtml = new StringBuilder (size);
4)使用object pool(对象池)


3、static方法如何调用,非static方法如何调用。

static方法:①类名称调用②实例化对象调用;
非static方法:只能依靠实例化对象调用;
*非static声明的方法可以调用static声明的方法,但是反过来,使用static声明的方法只能调用static声明的方法,不能调用非static声明的方法;


4、类和对象的关系是什么,如何创建和使用对象?

关系:类是对象的模板,对象是类的实例,类只能通过对象才可以使用。

创建对象:类名称 对象名称=new 类名称().


5、举例说明子类对象的实例化过程。

一个对象实例化过程:
Person p = new Person();
1)JVM会读取指定的路径下的Person.class文件,并加载进内存,
并会先加载Person的父类(如果有直接的父类的情况下).
2)在堆内存中的开辟空间,分配地址。
3)并在对象空间中,对对象中的属性进行默认初始化。
4)调用对应的构造函数进行初始化。
5)在构造函数中,第一行会先到调用父类中构造函数进行初始化。
6)父类初始化完毕后,在对子类的属性进行显示初始化。
7)调用构造代码块,进行对象的初始化。
8)继续进行子类构造函数的特定初始化。
9)初始化完毕后,将地址值赋值给引用变量。


6、简述this和super关键字的区别。

java中使用this表示当前对象,通过this.属性调用本类中的属性,通过this.方法()调用本类中的其他方法,还通过this()的形式调用本类中的构造方法,但是调用时放在构造方法的首行。。

父类中有多个构造方法时,如要调用特定的构造方法,则可在子类的构造方法中通过super()这个关键字来完成。

区别:

1)this()是在同一个类中调用其他的构造方法,而super()则是在子类中调用其父类的构造方法。

2)使用this调用属性或方法时会现在本类中查找,如果本类中没有查找到,再从父类中查找,而使用super的话会直接从父类中查找需要的属性或方法。

相似:

1)当构造方法有重载时,两者均会根据所给予的参数的类型和个数正确的执行相对应的构造方法。

2)两者均必须编写在构造方法的第一行,也正是因为这个原因,this()和super()无法同时存在同一个构造方法内。


7.方法的重载和覆写的区别。

重载(overloading):指在相同类内,定义名称相同,但是参数个数或类型不同的方法,也因此,java可根据参数个数或类型调用相应的方法。

覆写(overriding):指在子类中,定义名称,参数个数与类型均与父类相同的方法,用以覆写父类里的方法。







你可能感兴趣的:(java面向对象基础题)