面试题库之JAVA基础篇(一)

java的特性
  1. 面向对象,能够使程序的耦合度更低,内聚性更高。
  2. 平台无关性,因为java程序运行在jvm虚上。
  3. 支持多线程。
  4. 安全可靠。
  5. 有丰富的类库。
面向对象

万物皆对象,将解决问题的各个元素抽象成对象,对象中包含解决单个或某类问题的属性、行为(方法),将需要的对象组合到一起,达到解决问题的目的;面向对象有封装、继承、多态的特性,所以有很好的维护性、复用性、扩展性。

封装
  1. 将某一类的行为(数据操作)内聚到一个类中,并且隐藏其实现过程,只对外提供特定的方法,使用者只能调动对外公开的方法,无法对封装类进行修改。
  2. 好的封装能够降低耦合性、提高封装类的扩展性。
继承
  1. 使用已有的类作为基础(基类)建立新类,新类拥有基类的属性和方法,同时也可以新增自己的属性和方法。
  2. 子类无法访问父类的私有属性和方法。
  3. 子类可以重写父类的方法。
  4. 提高代码的复用性,增加代码的耦合度。
多态
  1. 同一对象同一方法调用的表现结果不同。
  2. 实现条件:继承重写、向上转型。
重写(Override)
  1. 子类把父类中可继承的方法重新一遍,重写发生在子类中。
  2. 重写的方法的方法名、参数、返回类型必须和父类的一致,其中返回类型可以是父类发放返回类型的子类。
  3. 重写方法的访问修饰权限不能小于父类方法。
  4. 重写方法中不能申明新的异常或检查范围更大的异常。
  5. 运行时多态。
重载(Overload)
  1. 同一类中,存在方法名相同且参数列表不同的情况。
  2. 参数列表的不同可以是参数类型不同、参数个数不同、参数顺序不同。
  3. 返回类型可以不同。
  4. 编译时多态
向上转型
  1. 子类转换为父类类型。
  2. 子类中重写的父类方法被保留。
  3. 子类自定义的属性、方法将被丢弃。
创建对象的方式
  1. new创建新对象。
  2. 通过反射机制。
  3. 采用clone机制。
  4. 通过序列化机制。
标识符命名规则
  1. 标识符可以包含大小写英文、0-9的数据、下划线、$。
  2. 标识符不能以数字开头。
  3. 类型用大驼峰式,首字符大写,后面每个单词首字母大写。
  4. 变量、方法名用小驼峰式,首字母小写,后面每个单词首字母大写。
权限修饰符
权限修饰符 访问范围
public 被public修饰的类、接口、方法和变量等成员都可以被任何其他类或对象所访问
protected 被protected修饰的类、方法、变量或者接口只能被相同包或其子类中的类或对象所访问
default default是Java中的默认访问权限修饰符,它表示不指定任何访问权限修饰符时所使用的访问权限。如果一个类、方法、变量或接口没有使用任何访问权限修饰符,则这些成员默认为包级别访问权限,也就是说,只能在同一个包内被访问
private 被private修饰的类、方法、变量或接口只能在自己的类中被调用
基本数据类型
基本类型 占用字节 默认值 有效范围 封装类
byte 1 0 -2^7~2^7 Byte
short 2 0 -2^15~2^15-1 Short
int 4 0 -2^31~2^31-1 Integer
long 8 0L -2^63~2^63-1 Long
float 4 0.0f 1.4E-45~3.4028235E38 Float
double 8 0.0d 4.9E-324~1.7976931348623157E308 Double
boolean - false true或false Boolean
char 2 \u0000(null) 0~65535 Character
boolean

jvm中没有boolean专用的字节码命令,单个boolean在jvm使用是int数据类型代替,数组boolean使用是btye数组。使用int的原因是32位的CUP一次处理数据是32位,存取效率较高。

自动拆箱与装箱

拆箱:将包装类型转换为基本数据类型,Integer>>int:Integer.intValue。

装箱:将基本数据类型转换为包装类型,int>>Integer:Integer.valueOf(int)

instanceof

java中的一个双目运算符,用来判断一个对象是否一个类的实例、子类。

==
  1. 如果是基本数据类型,比较的是值,等号两边的类型必须一致。
  2. 如果是对象,比较的是对象的堆内存地址。
equals
  1. 用于对象比较,用于比较两个对象的内容是否相等。
  2. 被比较的对象如果没有重写equals方法,那么会使用object类的equals方法,而object的equals方式返回的是==的判断。
hashCode

默认情况下,大部分对象的hashCode默认是根据对象的存储地址计算的出来的一个散列值,大部分情况下对象的hashCode是用的不上的,主要在集合(set,hashMap、hashTabel)添加元素的时候用于快速定位和判重。

比如一个set里面已经有了10000个对象,这时要添加一个元素,首先要判重,如果那要添加的这个元素跟10000个对象都比较一下的,效率上会很慢,使用hashCode的话可以快速定位到set集合里面是否已有这个hashCode,如果没有,直接添加元素,如果有,再把hashCode对应的对象拿出来与要添加的对象进行equals比较,equals返回true放弃添加,false则添加。

equals和hashCode的关系
  1. 一个对象,重写equals就要重写hashCode。
  2. 当一个对象 equals() 方法所使用的字段不变时,多次调用 hashCode() 方法的值应保持不变。
  3. 如果两个对象equals相等,则hashCode必须相等。
  4. 如果两个对象的equals不相等,则hashCode可能相等,单建议不相等,以提升性能。
相关推荐
卑微的Coder2 小时前
Redis Set集合命令、内部编码及应用场景(详细)
java·数据库·redis
CrissChan2 小时前
Pycharm 函数注释
java·前端·pycharm
启航挨踢3 小时前
java学习电子书推荐
java
wgslucky3 小时前
Dubbo报错:module java.base does not “opens java.lang“ to unnamed module
java·开发语言·dubbo
DougLiang4 小时前
关于easyexcel动态下拉选问题处理
java·开发语言
mochensage4 小时前
C++信息学竞赛中常用函数的一般用法
java·c++·算法
计蒙不吃鱼5 小时前
一篇文章实现Android图片拼接并保存至相册
android·java·前端
理智的灰太狼5 小时前
题目 3241: 蓝桥杯2024年第十五届省赛真题-挖矿
职场和发展·蓝桥杯
小海编码日记5 小时前
Java八股-JVM & GC
java
全职计算机毕业设计5 小时前
基于Java Web的校园失物招领平台设计与实现
java·开发语言·前端