javaSE 面试题04:类的概念


1. 把实例化的数组的变量当成方法参数,在方法执行的时候改变了数组内的元素,那么在方法外,数组元素有发生改变吗?

​ 改变了,因为传递是对象的引用,操作的是引用所指向的对象

2. 实例化数组后,能不能改变数组长度呢?

​ 不能,数组一旦实例化,它的长度就是固定的

3. 形参与实参?

​ 形参:全称为“形式参数”,是在定义方法名和方法体的时候使用的参数,用于接收调用该方法时传入的实际值; 实参:全称为“实际参数”,是在调用方法时传递给该方法的实际值。

*4. 内部类与静态内部类的区别?

  静态内部类相对与外部类是独立存在的,在静态内部类中无法直接访问外部类中变量、方法。但是可以直接访问静态的变量、调用静态的方法;

​ 普通内部类作为外部类一个成员而存在,在普通内部类中可以直接访问外部类属性,调用外部类的方法。

​ 如果外部类要访问内部类的属性或者调用内部类的方法,必须要创建一个内部类的对象,使用该对象访问属性或者调用方法。

​ 如果其他的类要访问普通内部类的属性或者调用普通内部类的方法,必须要在外部类中创建一个普通内部类的对象作为一个属性,外部类可以通过该属性调用普通内部类的方法或者访问普通内部类的属性

​ 如果其他的类要访问静态内部类的属性或者调用静态内部类的方法,直接创建一个静态内部类对象即可。

*5. Static关键字有什么作用?

​ Static可以修饰内部类、方法、变量、代码块

​ Static修饰的类是静态内部类

​ Static修饰的方法是静态方法,表示该方法属于当前类的,而不属于某个对象的,静态方法也不能被重写,可以直接使用类名来调用。在static方法中不能使用this或者super关键字。

​ Static修饰变量是静态变量或者叫类变量,静态变量被所有实例所共享,不会依赖于对象。静态变量在内存中只有一份拷贝,在JVM加载类的时候,只为静态分配一次内存。

​ Static修饰的代码块叫静态代码块,通常用来做程序优化的。静态代码块中的代码在整个类加载的时候只会执行一次。静态代码块可以有多个,如果有多个,按照先后顺序依次执行。

*6. Final在java中的作用?

​ Final可以修饰类,修饰方法,修饰变量。

​ 修饰的类叫最终类。该类不能被继承。

​ 修饰的方法不能被重写。

​ 修饰的变量叫常量,常量必须初始化,一旦初始化后,常量的值不能发生改变。

7. String str=”aaa”,与String str=new String(“aaa”)一样吗?

  不一样的。因为内存分配的方式不一样。

​ 第一种,创建的”aaa”是常量,jvm都将其分配在常量池中。

​ 第二种,创建的是一个对象,jvm将其值分配在堆内存中。

8. String str=”aa”,String s=”bb”; str=str+s;一种创建了几个对象?

  一共有两个引用,三个对象。因为”aa”与”bb”都是常量,常量的值不能改变,当执行字符串拼接时候,会创建一个新的常量是” aabb”,有将其存到常量池中。

9. String类的常用方法有那些?

​ charAt:返回指定索引处的字符

​ indexOf():返回指定字符的索引

​ replace():字符串替换

​ trim():去除字符串两端空白

​ split():分割字符串,返回一个分割后的字符串数组

​ getBytes():返回字符串的byte类型数组

​ length():返回字符串长度

​ toLowerCase():将字符串转成小写字母

​ toUpperCase():将字符串转成大写字符

​ substring():截取字符串

​ format():格式化字符串

​ equals():字符串比较

10. Java中的继承是单继承还是多继承

​ 类的继承,是单继承。

​ 接口的实现,是可以实现多个接口。

11. 抽象类必须要有抽象方法吗?

​ 当然不是,但是即使这样也不能实例化。(有点不讲道理是吧,谁让你声明的?)

12. 如果一个类中有抽象方法,那么这个一定是抽象类?

​ 是的,java的编译器硬性要求一个包含抽象方法的类必须声明为抽象类,否则编译报错。不信你可以试试。

*13. 抽象类可以使用final修饰吗?

​ 不行,抽象类就是要被继承的,但是final使得类无法被继承。这么写编译过不了的。

14. 普通类与抽象类有什么区别?

 普通类不能包含抽象方法,抽象类可以包含抽象方法。

​ 抽象类不能直接实例化,普通类可以直接实例化。

15. 什么是接口?JAVA为什么需要接口?

 接口内定义了若干抽象方法但是没有成员变量(但是可以由public static final的常量),可以视为一组功能的声明。实现某个接口的类就必须将这些方法全部Override。

​ 应该是因为Java的类继承只有单继承,所以需要接口,并且一个类可以实现多个接口。如果你了解C++的多继承以及虚继承,你就会知道多继承所带来的复杂,C++中没有接口。

*16. 接口有什么特点?

​ 接口中声明全是public static final修饰的常量,

​ 接口中不能有:成员变量,构造函数,static静态代码块,

​ 接口中的方法一般都是抽象方法,但是也可以有默认方法,有实现。

​ 接口也不能直接实例化,

​ 接口可以多继承,

17. 简述你了解的异常?

​ 异常捕捉:try-catch-finally

​ 异常抛出:throw

​ 可以使用系统已经定义的异常,也可以以已有的类为基类派生自己异常类

​ try必须存在,catch和finally都可以不存在,但不能同时不存在。

18. throw与throws区别?

 throw写在代码块内,throw后面跟的是一个具体的异常实例

​ throws写在方法前面后面,throws后面跟的是异常类,异常类可以出现多个


文章作者: 银色回廊
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 银色回廊 !
评论
  目录