第一章 Java面试题 基础篇

1. Java 基础语法

1.1. 什么是跨平台性?原理是什么
所谓跨平台性,是指 java 语言编写的程序,一次编译后,可以在多个系统平台上运行。 实现原理:Java 程序是通过 java 虚拟机在系统平台上运行的,只要该系统可以安装相应的 java 虚拟机,该系统就可以运行 java 程序。

1.2. & 和 && 的区别
&运算符有两种用法:(1)按位与;(2)逻辑与。
&&运算符是短路与运算。逻辑与跟短路与的差别是非常巨大的,虽然二者都要求运算符 左右两端的布尔值都是 true 整个表达式的值才是 true。
&&之所以称为短路运算是因为,如果&&左边的表达式的值是 false,右边的表达式会被 直接短路掉,不会进行 运算。很多时候我们可能都需要用&&而不是&,例如在验证用户登录 时判定用户名不是 null 而且不是空字符串,应 当写为 username != null &&!username.equals(""),二者的顺序不能交换,更不能用&运算符,因为第一个条件如 果 不成立,根本不能进行字符串的 equals 比较,否则会产生 NullPointerException 异常。
注意:逻辑或运算符(|) 和短路或运算符(||)的差别也是如此。

1.3. 构造器 Constructor 是否可被 override
构造器 Constructor 不能被继承,因此不能重写 Override,但可以被重载 Overload。
Constructor 不能被继承,所以 Constructor 也就不能被 override。每一个类必须有自己的 构造函数,负责构造自己这部分的构造。子类不会覆盖父类的构造函数,相反必须负责在一 开始调用父类的构造函数。
一、构造器是干什么用的?(what)
构造器是用来生成一个类的实例是用来初始化这个实例用的
二、构造器如何工作?(how)
Java 在构造实例时的顺序是这样的:
1、分配对象空间,并将对象中成员初始化为 0 或者空,java 不允许用户操纵一个不定值的 对象。
2、执行属性值的显式初始化
3、执行构造器
4 、将变量关联到堆中的对象上
而执行构造器的步骤有可以分为以下几步:
1、Bind 构造器的参数
2、如果显式的调用了 this,那就递归调用 this 构造器然后跳到步骤 5
3、递归调用显式或者隐式的父类构造器,除了 Object 以外,因为它没有父类
4、执行显式的实例变量初始化(也就是上边的流程中的第二步,调用返回以后执行, 这个步骤相当于在父构造器执行后隐含执行的,看样子像一个特殊处理)
三、构造器不可被 orerride(why)
其实你只需要记住一句话:构造器不是方法,那么用来修饰方法特性的所有修饰符都不能用 来修饰构造器(并不等与构造器 具备这些特性,虽然不能用 static 修饰构造器,但它却有静态特性)构造器只能用 public private protected 这 三个权限修饰符,且不能有返回语句。
1.4. break ,continue ,return 的区别及作用
break 跳出总上一层循环,不再执行循环(结束当前的循环体)
continue 跳出本次循环,继续执行下次循环(结束正在执行的循环 进入下一个循环条件)
return 程序返回,不再执行下面的代码(结束当前的方法 直接返回)

1.5. 为什么重写 equals 方法,还必须要重写 hashcode 方法
hash 类存储结构(HashSet、HashMap 等等)添加元素会有重复性校验,校验的方式就是先 取 hashCode 判断是否相等(找到对应的位置,该位置可能存在多个元素),然后再取 equals 方法比较(极大缩小比较范围,高效判断),最终判定该存储结构中是否有重复元素 hashCode 主要用于提升查询效率,来确定在散列结构中对象的存储地址;
重写 equals()必须重写 hashCode(),二者参与计算的自身属性字段应该相同;
hash 类型的存储结构,添加元素重复性校验的标准就是先取 hashCode 值,后判断 equals();
equals()相等的两个对象,hashcode()一定相等;
反过来:hashcode()不等,一定能推出 equals()也不等;
hashcode()相等,equals()可能相等,也可能不等

1.6. 是否可以继承 String
String 类是 final 类,不可以被继承。
继承 String 本身就是一个错误的行为,对 String 类型最好的重用方式是关联关系 (Has-A)和依赖关系(Use- A)而不是继承关系(Is-A)。

1.7. 简述 Java 中的值传递和引用传递?
1.值传递
在方法的调用过程中,实参把它的实际值传递给形参,此传递过程就是将实参的值复制 一份传递到函数中,这样如果在函数中对该值(形参的值)进行了操作将不会影响实参的值。 因为是直接复制,所以这种方式在传递大量数据时,运行效率会特别低下。
2、引用传递
引用传递弥补了值传递的不足,如果传递的数据量很大,直接复过去的话,会占用大量 的内存空间,而引用传递就是将对象的地址值传递过去,函数接收的是原始值的首地址值。 在方法的执行过程中,形参和实参的内容相同,指向同一块内存地址,也就是说操作的其实 都是源数据,所以方法的执行将会影响到实际对象
结论: 基本数据类型传值,对形参的修改不会影响实参;
引用类型传引用,形参和实参指向同一个内存地址(同一个对象),所以对参数的修改会影 响到实际的对象。
String, Integer, Double 等 immutable 的类型特殊处理,可以理解为传值,最后的操作不 会修改实参对象。

1.8. char 型变量中能不能存储一个中文汉字,为什么?
char 类型可以存储一个中文汉字,因为 Java 中使用的编码是 Unicode(不选择任何特定的 编码,直接 使用字符在字符集中的编号,这是统一的唯一方法),一个 char 类型占 2 个 字节(16 比特),所以放一个中 文是没问题的。

1.9. 阐述静态变量和实例变量的区别?
静态变量:
是被 static 修饰符修饰的变量,也称为类变量,它属于类,不属于类的任何一 个对象,一个类不管创建多少个对象,静态变量在内存中有且仅有一个拷贝;
实例变量:
必须依存于某一实例,需要先创建对象然后通过对象才能访问到它。静态变量可 以实现让多个对象共享内存。

1.10. ==和 equals 的区别?
equals 和== 最大的区别是一个是方法一个是运算符。
==:如果比较的对象是基本数据类型,则比较的是数值是否相等;如果比较的是引用数据类 型,则比较的是对象 的地址值是否相等。
equals():用来比较方法两个对象的内容是否相等。
注意:equals 方法不能用于基本数据类型的变量,如果没有对 equals 方法进行重写,则比 较的是引用类型的变 量所指向的对象的地址。

1.11. Integer a= 127 与 Integer b = 127 相等吗
对于对象引用类型:==比较的是对象的内存地址。
对于基本数据类型:比较的是值。
如果整型字面量的值在-128 到 127 之间,那么自动装箱时不会 new 新的 Integer 对象,而 是直接引用常量池中的 Integer 对象,超过范围 a1
b1 的结果是 false

public static void main(String[] args) { 
	Integer a = new Integer(3); 
	Integer b = 3; // 将 3 自动装箱成 Integer 类型 
	int c = 3; 
	System.out.println(a == b); // false 两个引用没有引用同一对象 
	System.out.println(a == c); // true a 自动拆箱成 int 类型再和 c 比较 
	System.out.println(b == c); // true 
	Integer a1 = 128; 
	Integer b1 = 128; 
	System.out.println(a1 == b1); // false
	Integer a2 = 127; 
	Integer b2 = 127; 
	System.out.println(a2 == b2); // true
	}

资源下载pdf文档

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

JavaCherryTree

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

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

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

打赏作者

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

抵扣说明:

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

余额充值