面试题库之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可能相等,单建议不相等,以提升性能。
相关推荐
依_旧4 分钟前
MySQL下载安装配置(超级超级入门级)
java·后端
蚂小蚁15 分钟前
一文吃透:宏任务、微任务、事件循环、浏览器渲染、Vue 批处理与 Node 差异(含性能优化)
前端·面试·架构
淘源码d21 分钟前
什么是医院随访系统?成熟在用的智慧随访系统源码
java·spring boot·后端·开源·源码·随访系统·随访系统框架
程序猿阿越1 小时前
Kafka源码(七)事务消息
java·后端·源码阅读
m0_748248021 小时前
C++20 协程:在 AI 推理引擎中的深度应用
java·c++·人工智能·c++20
笑我归无处1 小时前
强引用、软引用、弱引用、虚引用详解
java·开发语言·jvm
02苏_1 小时前
秋招Java面
java·开发语言
他们叫我一代大侠1 小时前
Leetcode :模拟足球赛小组各种比分的出线状况
算法·leetcode·职场和发展
爱吃甜品的糯米团子1 小时前
详解 JavaScript 内置对象与包装类型:方法、案例与实战
java·开发语言·javascript
snakecy1 小时前
信息系统项目管理师--论文case
大数据·学习·职场和发展·区块链