Java面试题总结记录(1)—— 基础篇

1、Java语言的特点

(1)简单易学,有丰富的类库。
(2)面向对象 (Java最重要的特性,让程序耦合度更低,内聚性更高)
(3)与平台无关性 (JVM是java跨平台使用的根本)
(4)可靠安全
(5)支持多线程


2、面向对象和面向过程的区别

  • 面向过程: 是分析解决问题的步骤,然后用函数将这些步骤一个一个地实现,然后在使用的时候一一调用即可,性能高,所以单片机、嵌入式开发等一般采用面向过程开发。
  • 面向对象: 是把构成问题的事务分解成各个对象,而建立对象的目的也不是为了完成一个个步骤,而是为了描述一个事物在解决整个问题的过程中所发生的行为。面向对象有封装、继承、多态的特性,所以易维护,易复用,易扩展。可以设计出低耦合的系统,但性能较面向过程差。

3、八种基础数据类型、大小、封装类

基本数据类型 大小(字节) 默认值 封装类
byte 1 0 Byte
short 2 0 Short
int 4 0 Integer
long 8 0 Long
float 4 0.0f Float
double 8 0.0 Double
char 2 \u0000(null) Character
boolean - false Boolean

注意:

(1)基本数据类型与引用数据类型的差异:

int基础数据类型Integer 是 int 的封装类,属于引用数据类型。int 的默认值为 0 , Integer的默认值为 null,所以Integer能够区分出 0 和 null,当Java检测到null 时,就知道这个引用没有指向某个对象,在引用前必须指定一个对象,否则报错。

(2)关于数组对象赋值给另一个数组对象后,发生引用传递现象的原因:

基本数据类型在声明时系统会自动分配空间,而引用数据类型声明时只是分配了引用空间,必须通过实例化开辟数据空间之后可以赋值。数组对象赋值,也是将自己的地址,复制给另一个数组对象到引用空间,所以才会产生引用传递现象。

(3)boolean数据类型在Java中的特点

Java虽然定义了boolean这种数据类型,但是只对它提供了很有限的支持,在JVM中没有任何供boolean专用的字节码指令,Java语言表达式所操作的boolean值,在编译后使用JVM的 int 值代替,而 boolean 数组会被编码成JVM的 byte 数组,每个 boolean 元素占 8 位(1字节),这样我们能得出boolean 类型单独使用是 4个字节(int),在数组中使用则为 1 个字节(byte)。使用int的原因是对于 32 位CPU来说,一次处理数据是 32 位,具有高效存取的特点。


4、标识符的命名规则

  • 标识符的含义: 是指程序中,自定义内容,例如类名,方法名,变量名等等都是标识符。
  • 命名规则(必须): ① 标识符可以包含英文、数组、下划线以及美元符号。② 不能以数字作为开头。 ③ 标识符不能是关键字。
  • 命名规范(非必须): 类名规范: 每个单词的首字符都大写(大驼峰模式);变量名规范: 首字符小写,其它单词首字符大写(小驼峰模式);方法名规范: 同变量名规范相同。

5、instanceof关键字的作用

  • instanceof是什么?
    interfaceof 严格来说是Java的一个双目运算符,用来测试一个对象是否为一个类的实例。
  • 如何使用interfaceof?
boolean reasult = obj instanceofClass;

其中 obj 是对象,Class表示一个类或接口,当 obj 为 Class 的一个对象,或者是直接或间接子类,或者是接口的实现类,结果 reasult 都会返回为 true,否则返回 false。

注意: 编译器会检查obj是否能转换成右边的class类型,如果不能转换则直接报错,如果不能确定类型,则通过编译,具体看运行而定。

int i = 0;
//编译不通过,说明int不能直接转换为Integer
i instanceof Integer; 
//编译不通过,因为int是基本数据类型,并不是引用数据类型
i instanceof Object; 
Integer integer = new Integer(1);
//编译通过,说明integer能直接转换为Integer
integer instanceof Integer; //true
//编译通过,因为integer是引用数据类型,引用数据类型就是一个对象,是Object类的子类。
integer instanceof Object; //true

返回值为false的情景: JaveSE规范中对 intstanceof 运算符的规定就是:如果obj 为null,则返回false。

null instanceof Object; //false

6、Java的自动封箱与拆箱

  • 装箱: 自动将基本数据类型转换为包装类型(int -> Integer);调用Integer.valueOf(int)实现。
  • 拆箱: 自动将包装类型转换为基本数据类型(Integer -> int);调用Integer.intValue()实现。

在Java SE5 之前,如果要生成一个数值为 10 的 Integer 对象,必须使用 new 关键字实例化 Integer 对象。

Integer i = new Integer(10);

从Java SE5 之后,提供了自动装箱的特性,如果要生成一个数值为 10 的 Integer 对象,直接使用赋值进行生成。

Integer i = 10;

相关笔试题:

(1)以下代码会输出什么?

public class Main{
	public static void main(String[] args){
		Integer i1 = 100;
		Integer i2 = 100;
		Integer i3 = 200;
		Integer i4 = 200;
		
		System.out.println(i1 == i2);
		System.out.println(i3 == i4);
	}
}

运行结果

true
false

产生的原因: i1 与 i2 引用的对象是同一个,i3 与 i4 引用的对象是不同的。

Integer.valueOf 源码实现

当参数 i 的值在 [-128 , 127 ]内,则会返回一个指向IntegerCache.cache中已经存在的对象引用;否则创建一个新的Integer对象。

public static Integer valueOf(int i) {
   
	if (i >= IntegerCache.low && i <= IntegerCache.high)
		return IntegerCache.cache[i + (-IntegerCache.low)];
	return new Integer(i);
}

(2)以下代码会输出什么?

public class Main{
	public static void main(String[] args){
		Double i1 = 100.0;
		Double i2 = 100.0;
		Double i3 = 200.0;
		Double i4 = 200.0;
		
		System.out.println(i1 == i2);
		System.out.println(i3 == i4);
	}
}

运行结果

false
false

Double.valueOf 源码实现

无论参数是多少,Double都会实例化一个Double对象。

    public static Double valueOf(double d) {
   
        return new Double(d);
    }

7、重载与重写的区别

(1)重写(Override)

从字面上看,重写就是“ 重新写一遍 ”的意思。其实就是子类将父类的方法重新写一遍。

子类继承了父类原有的方法,但有时子类想要修改父类的方法,所以在方法名,参数列表,返回类型(除子类方法的返回值是父类方法返回值的子类)都相同的情况下,对方法进行修改或重写。

在重写时,应当注意子类函数的访问权限不能低于父类。

public class Father {
   
    public static void main(String[] args) {
   
        Son son = new Son();
        son.sayHello();
    }

    public void sayHello(){
   
        System.out.println("Hello");
    }
}

class Son extends Father{
   
    @Override
    public void sayHello() {
   
        System.out.println("hello by son");
    }
}

总结:

  • 重载发生在父类与子类之间
  • 方法、参数列表、返回类型(父类方法与子类方法的返回值必须是相同或有继承关系)必须相同
  • 子类方法访问权限必须相同或大于父类
  • 重写方法一定不能抛出新的Exception或使用更宽泛的Exception(例如直接抛出Exception)

(2)重载(Overload)

在一个类中,同名方法有不同的参数列表(类型不同、个数不同、顺序不同)则被视为重载。

public class 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Zain_horse

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值