- Java 编程基础面试题(一)
- 1.什么是面向对象?
- 2.Java 数据类型有哪些?
- 3.为什么重写 equals 还要重写 hashcode?
- 4.== 和 equals 比较的区别
- 5.final 关键字的作用
- 6.介绍 Java 的集合类
- 7.ArrayList 和 LinkedList 的区别
- 8.说一说你对 Java 访问权限的了解
- 9.请介绍成员变量和局部变量的区别
- 10.说说为什么要有包装类?
- 11.如何进行 int 和 Double 两个数判断相等?
—关注“程序员闭关修炼”公众号,回复“面试”即可获得全套Java面试笔记。 Java 编程基础面试题(一) 1.什么是面向对象?
面向对象包括封装、继承、和多态。
----封装:
封装是指:将类的某些信息隐藏在类的内部,不允许外部程序直接访问,而是通过该类提供的方法来对隐藏的信息进行操作和访问。
----继承:
继承就是:子类继承父类的方法和属性,并作出自己的改变和扩展,可以单继承也可以多继承。
继承的特性:
- 子类拥有父类非 private 的属性、方法。
- 子类可以拥有自己的属性和方法,即子类可以对父类进行扩展。
- 子类可以用自己的方式实现父类的方法。
- Java 的继承是单继承,但是可以多重继承,单继承就是一个子类只能继承一个父类,多重继承就是,例如 B 类继承 A 类,C 类继承 B 类,所以按照关系就是 B 类是 C 类的父类,A 类是 B 类的父类,这是 Java 继承区别于 C++ 继承的一个特性。
- 提高了类之间的耦合性(继承的缺点,耦合度高就会造成代码之间的联系越紧密,代码独立性越差)。
----多态:
**多态就是:**子类继承父类的方法和属性之后,子类的属性和方法可以具有不同于父类的数据类型和表现行为。
多态存在的三个必要条件:
- 继承
- 重写
- 父类引用指向子类对象:Parent p = new Child();
基本数据类型有四类八种:
-
整数型:byte(1字节),short(2),int(4),long(8) 数据范围:-27—27-1(以此类推)
-
浮点型:float(4),double(8)
-
字符型:char(2)
-
布尔型:boolean(14)
*补充:int 类型数据范围为:-231----231-1
引用类型有三种:(引用数据类型,就是对一个对象的引用,本质上就是通过指针指向堆中的内存地址)
- 数组
- 类
- 接口
equals 和 hashcode 是配套使用的。
如果不重写 hashcode,那么equals方法认定为相等的两个对象拥有两个不同的哈希值。
因为必须保证重写后的equals方法认定相同的两个对象拥有相同的哈希值。
4.== 和 equals 比较的区别-
对象不同:equals():是超类Object中的方法,==:是二元操作符。
-
比较的对象不同:equals() 方法通过重写可以比较两个对象的内容是否相等。
== 比较分为两种情况: 第一:基本数据类型比较:比较的是他们的值是否相等
第二:引用数据类型:比较的是引用的地址值是否相同
使用final 关键字声明类、方法、属性 (1)使用final修饰的类不能有子类。 (2)使用final修饰的方法不能被子类重写。 (3)使用final修饰的变量(成员变量和局部变量)是常量,常量不可修改。6.介绍 Java 的集合类 7.ArrayList 和 LinkedList 的区别
-
数据结构不同:ArrayList 是Array(动态数组)的数据结构,LinkedList是Link(链表)的数据结构.
-
不同操作效率不同:查找和修改操作 ArrayList 快。增加和删除 LinkedList 快。
-
开销不同:ArrayList 创建需要开辟一段存储空间,LinkedList 不需要。
Java 提供了三种访问修饰符,分别是 private、protect、public。
分为四种访问权限,分别为:private、default、protect、public。
在修饰成员变量/成员方法时分为四种情况:
- private:只准许类内部成员访问。
- default:准许类内部成员、同一包下的其他类访问。
- protect:准许类内部成员、同一包下的其他类、子类访问。
- public:准许任意包下任意类访问。
在修饰类时,分为两种情况:
- default: 准许同一包下其他类访问。
- public:准许任意包下任意类访问。
成员变量:
-
成员变量是在类的范围内定义的变量。
-
成员变量有默认初始值。
-
未被 static 修饰的称为实例变量,存储于堆内存中,生命周期与对象相同。
-
被 static 修饰的称为类变量,存储与方法区中,生命周期与当前类相同。
局部变量:
- 局部变量是在方法的范围内定义的变量。
- 局部变量没有默认初始值。
- 局部变量存储在栈内存中,方法调用结束,变量空间自动释放。
Java 语言是面向对象的语言,即“一切皆对象”。但是8中基本数据类型却出现了例外,为了解决这个问题,Java 为这8中基本数据类型都定义了一个引用类型,这就是包装类。
而且 JDK1.5提供了自动装箱和自动拆箱功能:
自动装箱:可以将基本数据类型直接赋给对应的包装类型;
自动拆箱:可以将包装类型直接赋给对应的基本数据类型;
比如:某个方法的参数是包装类型,而我们要直接传入一个基本数据类型,那么通过自动装箱就可以直接传入啦。
11.如何进行 int 和 Double 两个数判断相等?- 不能用 == 或者 compareTo 方法比较,因为他们是不同的数据类型。
- 不能转为字符串比较,因为 int 不带小数点,double 带小数点。
- ***整数和浮点数的包装类都继承于 Number 类型,而Number 类型提供了分别转向 byte、short、int、long、folat、Double 的方法,故 int 和 double 两个类型进行比较,应该调用 Number 方法转化成相同数据类型,在进行比较。



