Java概念题目理解(二)

1.String、StringBuffer和StringBuilder的区别是什么?String为什么是不可变的?
String 类中使用 final 关键字修饰字符数组来保存字符串,private final char value[],所以 String 对象是不可变的。
主要是性能上的不同:每次对 String 类型进行改变的时候,都会生成一个新的 String 对象,然后将指针指向新的 String 对象。StringBuffer 每次都会对 StringBuffer 对象本身进行操作,而不是生成新的对象并改变对象引用。相同情况下使用 StringBuilder 相比使用 StringBuffer 仅能获得 10%~15% 左右的性能提升,但却要冒多线程不安全的风险。
对于三者使用的总结:
操作少量的数据: 适用 String
单线程操作字符串缓冲区下操作大量数据: 适用 StringBuilder
多线程操作字符串缓冲区下操作大量数据: 适用 StringBuffer
2.在一个静态方法内调用一个非态成员为什么是非法的?
由于静态方法可以不通过对象进行调用,因此在静态方法里,不能调用其他非静态变量,也不可以访问非静态变量成员。
3.在java中定义一个不做事且没有参宿和的构造方法的作用?
Java 程序在执行子类的构造方法之前,如果没有用 super()来调用父类特定的构造方法,则会调用父类中“没有参数的构造方法”。因此,如果父类中只定义了有参数的构造方法,而在子类的构造方法中又没有用 super()来调用父类中特定的构造方法,则编译时将发生错误,因为 Java 程序在父类中找不到没有参数的构造方法可供执行。解决办法是在父类里加上一个不做事且没有参数的构造方法。
4.import java和javax有什么区别?
javax也是API的一部分,实际上没有区别,只是名字上的区别。
5.接口和抽象类的区别是什么?
1.接口的方法默认是public,所有方法在接口中不能有实现,抽象类可以有非抽象方法。
2.接口中除了static、final变量,不能有其他变量,而抽象类中则不一定。
3.一个类可以实现多个接口,但只能实现一个抽象类,接口自己本身可以通过extends(继承)关键字扩展多个接口。
4.接口方法默认修饰符是public,抽象方法可以有public、protected和default这些修饰符,抽象方法就是为了被重写,所以不能用private修饰。
5.从设计层面来说,抽象是对类的抽象,是一宗模板设计,而接口是对i行为的抽象,是一种行为的规范。
6.成员变量与局部变量区别有哪些?
1.语法上:成员变量是属于类,局部变量是在方法中定义的变量或是方法参数;成员变量可以被 public,private,static 等修饰符所修饰,而局部变量不能被访问控制修饰符及 static 所修饰;但是,成员变量和局部变量都能被 final 所修饰。
2.从变量在内存中的存储方式来看:如果成员变量用static修饰,那么这个成员变量一定属于类,如果没有使用static修饰,这个成员变量属于实例的。而对象存在于堆内存,局部变量存在于栈内存。
3.从变量在内存中的生存时间上看:成员变量是对象的一部分,它随着对象的创建而存在,而局部变量随着方法的调用而自动消失。
4.成员变量如果没有被赋初始值:就会自动以类型的默认值而复制(一种情况例外:被final修是的成员变量也必须显式地赋值),而局部变量则不会自动赋值。
7.创建一个对象用什么运算符?对象实体与对象引用有何不同?
new运算符,new创建对象实例(对象实例在堆内存中)。一个对象引用可以指向 0 个或 1 个对象(一根绳子可以不系气球,也可以系一个气球);一个对象可以有 n 个引用指向它(可以用 n 条绳子系住一个气球)。
8.什么是方法返回值?返回值在类的方法里的作用是什么?
方法的返回值是指我们获取到的某个方法体中的代码执行后产生的结果。返回值的作用:接受结果,使得它可以用于其他的操作。
9.一个类的构造方法的作用是什么?如果一个类没有声明构造方法,该成语可以争取执行嘛?为什么?
主要作用是晚上对类对象的初始化工资,可以执行,因为一个类即使没有生命构造方法也会有默认的不带参数的构造方法。
10.构造方法有哪些特性?
1.名字与类名相同。
2.没有返回值,但不能用viod声明构造函数。
3.生成类的对象时自动执行,无需调用。

你可能感兴趣的:(java)