随笔分类 - Java基础面试题
摘要:在(静态)代码块中可以使用(静态)变量,但是被使用的(静态)变量必须在(静态)代码块前面声明。 父类静态代码块和静态变量(先声明的先执行) 子类静态代码块和静态变量(先声明的先执行) 父类普通代码块和普通变量(先声明的先执行) 父类构造方法。 子类普通代码块和普通变量(先声明的先执行) 子类构造方法
阅读全文
摘要:接口和抽象类对实体类进行更高层次的抽象,仅定义公共行为和特征。 语法维度 抽象类 接口 成员变量 无特殊要求 默认 public static final 常量 构造方法 有构造方法,不能实例化 没有构造方法,不能实例化 方法 抽象类可以没有抽象方法,但有抽象方法一定是抽象类。 默认 public
阅读全文
摘要:访问权限控制符 本类 包内 包外子类 任何地方 public √ √ √ √ protected √ √ √ × 无 √ √ × × private √ × × × protected 基类的 protected 成员是包内可见的,并且对子类可见; 若子类与基类不在同一包中,那么在子类中,子类实例可
阅读全文
摘要:内部类可对同一包中其他类隐藏,内部类方法可以访问定义这个内部类的作用域中的数据,包括 private 数据。 内部类是一个编译器现象,与虚拟机无关。 编译器会把内部类转换成常规的类文件,用 $ 分隔外部类名与内部类名,其中匿名内部类使用数字编号,虚拟机对此一无所知。 静态内部类: 属于外部类,只加载
阅读全文
摘要:equals: 检测对象是否相等,默认使用 == 比较对象引用,可以重写 equals 方法自定义比较规则。 equals 方法规范:自反性、对称性、传递性、一致性、对于任何非空引用 x,x.equals(null) 返回 false。 hashCode: 散列码是由对象导出的一个整型值,没有规律,
阅读全文
摘要:类关系 描述 权力强侧 举例 继承 父子类之间的关系:is-a 父类 小狗继承于动物 实现 接口和实现类之间的关系:can-do 接口 小狗实现了狗叫接口 组合 比聚合更强的关系:contains-a 整体 头是身体的一部分 聚合 暂时组装的关系:has-a 组装方 小狗和绳子是暂时的聚合关系 依赖
阅读全文
摘要:重载 重载指方法名称相同,但参数类型个数不同,是行为水平方向不同实现。 对编译器来说,==方法名称和参数列表==组成了一个唯一键,称为方法签名,JVM 通过方法签名决定调用哪种重载方法。 ==(方法签名不包括返回类型)== 不管继承关系如何复杂,重载在编译时可以根据规则知道调用哪种目标方法,因此属于
阅读全文
摘要:概念 面向过程让计算机有步骤地顺序做一件事,是过程化思维,使用面向过程语言开发大型项目,软件复用和维护存在很大问题,模块之间耦合严重。 面向对象相对面向过程更适合解决规模较大的问题,可以拆解问题复杂度,对现实事物进行抽象并映射为开发对象,更接近人的思维。 例如开门这个动作,面向过程是 open(Do
阅读全文
摘要:所有异常都是 Throwable 的子类,分为 Error 和 Exception。 Error 是 Java 运行时系统的内部错误和资源耗尽错误,例如 StackOverFlowError 和 OutOfMemoryError,这种异常程序无法处理。 Exception 分为受检异常和非受检异常,
阅读全文
摘要:什么是泛型: 泛型本质是参数化类型,解决不确定对象具体类型的问题。泛型在定义处只具备执行 Object 方法的能力。 泛型的好处: 类型安全,放置什么出来就是什么,不存在 ClassCastException 提升可读性,编码阶段就显式知道泛型集合、泛型方法等处理的对象类型 代码重用,合并了同类型的
阅读全文
摘要:注解是一种标记,使类或接口附加额外信息,帮助编译器和 JVM 完成一些特定功能,例如 @Override 标识一个方法是重写方法。 元注解是自定义注解的注解(负责对其它注解进行说明的注解,自定义注解时可以使用元注解) Java 5 定义了 4 个注解,分别是 @Documented、@Target、
阅读全文
摘要:什么是反射: 在运行状态中,对于任意一个类都能知道它的所有属性和方法,对于任意一个对象都能调用它的任意方法和属性,这种动态获取信息及调用对象方法的功能称为反射。 缺点是破坏了封装性以及泛型约束。 反射是框架的核心,Spring 大量使用反射。 Class 类的作用: 在程序运行期间,Java 运行时
阅读全文
摘要:深拷贝会把对象重新复制一份,而浅拷贝不拷贝对象,还是之前的对象 浅拷贝: 只复制当前对象的基本数据类型及引用变量,没有复制引用变量指向的实际对象。 修改克隆对象可能影响原对象,不安全。 深拷贝: 完全拷贝基本数据类型和引用数据类型,安全。 深拷贝和浅拷贝的区别,你真的弄懂了吗? - 知乎用户9t42
阅读全文
摘要:按值调用指方法接收调用者提供的值, 按引用调用指方法接收调用者提供的变量地址。 Java的参数传递,不管是基本数据类型还是引用类型的参数,都是按值传递,没有按引用传递! Java 总是按值调用,方法得到的是所有参数值的副本,传递对象时实际上方法接收的是对象引用的副本。 方法不能修改基本数据类型的参数
阅读全文
摘要:JVM: Java 编译器可生成与计算机体系结构无关的字节码指令,字节码文件不仅可以轻易地在任何机器上解释执行,还可以动态地转换成本地机器代码,转换是由 JVM 实现的,JVM 是平台相关的,屏蔽了不同操作系统的差异。 Java文件编译成Class文件,并且最后由Java虚拟机将Class文件转换成
阅读全文
摘要:平台无关性,摆脱硬件束缚,"一次编写,到处运行"。 相对安全的内存管理和访问机制,避免大部分内存泄漏和指针越界。 热点代码检测和运行时编译及优化,使程序随运行时间增长获得更高性能。 完善的应用程序接口,支持第三方类库。
阅读全文
摘要:JDK8 新特性: lambda 表达式:允许把函数作为参数传递到方法(可以将Lambda表达式理解为一个匿名函数),简化匿名内部类代码。 函数式接口:使用 @FunctionalInterface 标识,有且仅有一个抽象方法,可被隐式转换为 lambda 表达式。 方法引用:可以引用已有类或对象的
阅读全文
摘要:JDK: Java Development Kit,java开发工具包 提供了编译运行 Java 程序的各种工具,包括编译器、JRE 及常用类库,是 JAVA 核心。 JDK包含了JRE,同时还包含了编译java源码的编译器javac,还包含了很多java程序调试和分析的工具:jconsole,jv
阅读全文