【JAVA面试的艺术】 JAVA基础知识阶段一

157 阅读6分钟

Java基础知识阶段一

float f = 3.4;是否正确?

  • 不正确
  • why?由于3.4是双精度数,如果是将双精度类型转为浮点数类型属于下转型,这样会造成精度损失,这时候需要强转类型
  • 应该写成float f = (float)3.4; 或者 float f = 3.4F;

&和&&之间的区别?

  • 一般&运算符有以下两种用法
  1. 按位与
  2. 逻辑与
  • 而&&运算符是短路与运算,如果&&左边的表达式的值是false,右边的表达式会被直接短路掉,不会进行运算。

JDK与JRE有什么区别?

  • JDK:Java Development Kit 的简称,java 开发工具包,提供了 java 的开发环境和运行环境。
  • JRE:Java Runtime Environment 的简称,java 运行环境,为 java 的运行提供了所需环境。
  • 具体来说以下,JDK其实包含了JRE,包含了编译 java 源码的编译器 javac,还包含了很多 java 程序调试和分析的工具。
  • 简单来说:如果你需要运行 java 程序,只需安装 JRE 就可以了,如果你需要编写 java 程序,需要安装 JDK

System.out.println(0.1*3 == 0.3); 结果为 true 还是 false

  • 是false,因为浮点类型计算会有误差

下面两种写法,哪个较好:

​ a.70L60243657020 ​ b.7060243657020L

  • 第一种写法好,why? 请笔者自行考虑
  • 第二种表达式的前半部分70602436570的乘积有可能会超过int的取值范围, 导致精度损失

简单说说八种数据类型以及它们的封装类?

  • 八种基本数据类型:int(4)、short(2)、float(4)、double(8)、long(8)、boolean(无明确规定,可认为1字节)、byte(1)、char(2)
  • 封装类:Integer、Short、Float、Double、Long、Boolean、Byte、Character
  • 欢迎补充。。。。

字符型常量和字符串常量的区别

  • 形式上: 字符常量是单引号引起的一个字符 字符串常量是双引号引起的若干个字符
  • 含义上: 字符常量相当于一个整形值(ASCII值),可以参加表达式运算 字符串常量代表一个地址值(该字符串在内存中存放位置) 占内存大小 字符常量只占一个字节 字符串常量占若干个字节(至少一个字符结束标志)

成员变量与局部变量的区别有那些?

  • 从语法形式上,看成员变量是属于类的,而局部变量是在方法中定义的变量或是方法的参数;成员变量可以被public,private,static等修饰符所修饰,而局部变量不能被访问控制修饰符及static所修饰;成员变量和局部变量都能被final所修饰;
  • 从变量在内存中的存储方式来看,成员变量是对象的一部分,而对象存在于堆内存,局部变量存在于栈内存
  • 从变量在内存中的生存时间上看,成员变量是对象的一部分,它随着对象的创建而存在,而局部变量随着方法的调用而自动消失。 成员变量如果没有被赋初值,则会自动以类型的默认值而赋值(一种情况例外被final修饰但没有被static修饰的成员变量必须显示地赋值);而局部变量则不会自动赋值。

封装具有的特性?

  • 减少了耦合,便于维护和修改
  • 可以隐藏信息和一些具体实现代码
  • 安全性,对成员变量精准控制

在Java中,子类可以从父类中继承哪些?

  • 继承public和protected修饰的属性和方法,不管子类和父类是否在同一个包里。
  • 继承默认权限修饰符修饰的属性和方法,但子类和父类必须在同一个包里。
  • 无法继承private修饰的属性和方法。
  • 无法继承父类的构造方法。

方法重载与重写的区别?

  1. 重载(Overloading)
  • 方法重载是让类以统一的方式处理不同类型数据的一种手段。多个同名函数同时存在,具有不同的参数个数/类型。重载Overloading是一个类中多态性的一种表现。
  • Java的方法重载,就是在类中可以创建多个方法,它们具有相同的名字,但具有不同的参数和不同的定义。调用方法时通过传递给它们的不同参数个数和参数类型来决定具体使用哪个方法, 这就是多态性。
  • 重载的时候,方法名要一样,但是参数类型和个数不一样,返回值类型可以相同也可以不相同。无法以返回型别作为重载函数的区分标准。
  1. 重写(Overriding)
  • 父类与子类之间的多态性,对父类的函数进行重新定义。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。在Java中,子类可继承父类中的方法,而不需要重新编写相同的方法。但有时子类并不想原封不动地继承父类的方法,而是想作一定的修改,这就需要采用方法的重写。方法重写又称方法覆盖。

  • 若子类中的方法与父类中的某一方法具有相同的方法名、返回类型和参数表,则新方法将覆盖原有的方法。如需父类中原有的方法,可使用super关键字,该关键字引用了当前类的父类。

  • 子类函数的访问修饰权限不能少于父类的;

Java中的抽象类和接口的区别?

  • 定义抽象类的关键字是abstract class,而定义接口的关键字是interface。
  • 继承抽象类的关键字是extends,而实现接口的关键字是implements。
  • 继承抽象类支持单继承,而实现接口支持多实现。
  • 抽象类中可以有构造方法,而接口中不可以有构造方法。
  • 抽象类中可以有成员变量,而接口中只可以有常量。
  • 抽象类中可以有成员方法,而接口中只可以有抽象方法。
  • 抽象类中增加方法时子类可以不用重写,而接口中增加方法时实现类需 要重写(Java8以前的版本)。
  • 从Java8开始增加新特性,接口中允许出现非抽象方法和静态方法,但非 抽象方法需要使用default关键字修饰。
  • 从Java9开始增加新特性,接口中允许出现私有方法。