面试题库之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可能相等,单建议不相等,以提升性能。
相关推荐
xmh-sxh-13148 分钟前
jdk各个版本介绍
java
天天扭码27 分钟前
五天SpringCloud计划——DAY2之单体架构和微服务架构的选择和转换原则
java·spring cloud·微服务·架构
程序猿进阶27 分钟前
堆外内存泄露排查经历
java·jvm·后端·面试·性能优化·oom·内存泄露
FIN技术铺32 分钟前
Spring Boot框架Starter组件整理
java·spring boot·后端
小曲程序39 分钟前
vue3 封装request请求
java·前端·typescript·vue
陈王卜1 小时前
django+boostrap实现发布博客权限控制
java·前端·django
小码的头发丝、1 小时前
Spring Boot 注解
java·spring boot
java亮小白19971 小时前
Spring循环依赖如何解决的?
java·后端·spring
飞滕人生TYF1 小时前
java Queue 详解
java·队列
武子康1 小时前
大数据-230 离线数仓 - ODS层的构建 Hive处理 UDF 与 SerDe 处理 与 当前总结
java·大数据·数据仓库·hive·hadoop·sql·hdfs