基础概念与常识
-
java语言有哪些特点
- 面向对象(封装、继承、多态)
- 平台无关性(一次编译,到处运行,java虚拟机可以将一次编译后的字节码文件转换为不同平台上的机器指令,实现平台无关性)
- 多线程(Java 支持多个线程同时执行,并提供多线程之间的同步机制)
- 支持网络编程
- 健壮性:异常处理、垃圾回收机制等
- 安全性
- 半编译半解释:https://blog.csdn.net/qq_41179691/article/details/106249692 编译成字节码文件后在JVM解释执行
-
java面向对象
面向对象三个特性,封装、继承、多态
-
封装,将客观的事务封装成一个类,内部细节对外部是透明的,外部调用无需修改或者关心内部实现,比如javaBean中的属性私有
-
继承,子类可以从父类中继承方法和实例对象,并作出改变,以适应自己的需求。
-
多态,同一接口,使用不同的实例执行不同的操作,比如插座,多态实现的三个条件:继承、重写、父类引用指向子类对象。
class Shape { void draw() {} } //圆形 class Circle extends Shape { void draw() { System.out.println("Circle.draw()"); } } //正方形 class Square extends Shape { void draw() { System.out.println("Square.draw()"); } } //三角形 class Triangle extends Shape { void draw() { System.out.println("Triangle.draw()"); } }
-
-
java编译过程
答:java源码即.java文件经过javac被编译为字节码文件,保存在.class文件中,java虚拟机在执行字节码文件时,将字节码转换成不同平台上的机器指令
(Java源码编译成Java字节码以后,再由不同平台的JVM进行解析,JVM把字节码转换成对应平台具体的机器指令。)
-
JVM vs JDK vs JRE
JDK包含JRE,JRE包含JVM
- JVM是java虚拟机,是运行java字节码的虚拟机,jvm加载字节码文件,然后通过解释器逐行解释执行,JVM 实现是 Java 语言“一次编译,随处可以运行”的关键所在。
- JDK是java开发包,包含JRE,主要用于java程序的开发,jdk中有javac.exe,jre中没有,包含了编译工具
- jre是java运行环境,jre只能运行class没有编译的功能
JVM+Lib=JRE。总体来说就是,我们利用JDK(调用JAVA API)开发了属于我们自己的JAVA程序后,通过JDK中的编译程序(javac)将我们的文本java文件编译成JAVA字节码,在JRE上运行这些JAVA字节码,JVM解析这些字节码,映射到CPU指令集或OS的系统调用。
jvm执行.class需要jre下的lib类库的支持。
-
为什么说Java语言"编译与解释并存"
编译成字节码文件后在JVM解释执行
https://blog.csdn.net/qq_41179691/article/details/106249692
-
Oracle JDK与OpenJDK的区别
-
JAVA和 C++区别
- 都是面向对象的语言,都支持封装、继承和多态
- Java 不提供指针来直接访问内存,程序内存更加安全
- Java 的类是单继承的,C++ 支持多重继承;虽然 Java 的类不可以多继承,但是接口可以多继承。
- Java 有自动内存管理垃圾回收机制(GC),不需要程序员手动释放无用内存。
- C ++同时支持方法重载和操作符重载,但是 Java 只支持方法重载(操作符重载增加了复杂性,这与 Java 最初的设计思想不符)。
-
import java和javax有啥区别
刚开始的时候 JavaAPI 所必需的包是 java 开头的包,javax 当时只是扩展 API 包来使用。然而随着时间的推移,javax 逐渐地扩展成为 Java API 的组成部分。但是,将扩展从 javax 包移动到 java 包确实太麻烦了,最终会破坏一堆现有的代码。因此,最终决定 javax 包将成为标准 API 的一部分。
所以,实际上 java 和 javax 没有区别。这都是一个名字。
基本语法
- 字符型常量和字符串型常量
- 注释
- 标识符和关键字的区别
- java中有哪些常见的关键字
- 自增自减运算符
- continue、break和return 的区别是什么
- java泛型,什么是类型擦除、介绍一下常用的通配符
- ==和equals的区别
- hashCode()与equals()
基本数据类型
- Java中的几种基本数据类型?对应的包装类型是什么?各自占用多少字节
- 自动装箱与拆箱
- 8种基本类型的包装类和常量池
方法(函数)
- 什么是方法的返回值
- 方法有哪几种类型
- 再一个静态方法内调用一个非静态成员为什么是非法的
- 静态方法和实例方法有何不同
- 为什么java只有值传递
- 重载和重写的区别
- 深拷贝与浅拷贝
面向对象
-
面向对象与面向过程的区别
面向对象是将客观事物抽象成为一个类,他具备哪些行为,面向过程则是一系列的顺序流程。描述的是步骤。
-
成员变量与局部变量的区别
-
创建一个对象用什么运算符,对象实体与对象引用有何不同
-
对象的相等和指向他们引用相等,两者有什么不同
-
一个类的构造方法的作用是什么?若一个类没有声明构造方法,该程序能正确执行嘛?为什么
-
构造方法有哪些特点,是否可被override?
-
面向对象三大特征
- 封装
- 继承
- 多态
-
String,StringBuilder,StringBuffer有什么区别,String为什么是不可变的
-
Object类的常见方法总结
-
接口和抽象类
- 接口用interface修饰,里面的方法是默认是public abstarct修饰,没有方法体,变量默认是public static final,一个类可以实现多个接口
- 抽象类用abstarct修饰,是一种特殊类,里头的方法除了抽象方法还有正常的方法,一个类只能继承一个抽象类。
- 接口是对行为的抽象,抽象类是对类的抽象
-
重写和重载
- 重写是字类重写父类的方法,方法名,参数完全一致,返回值类型和父类一致(void或者基本数据类型),或者是父类的子类,但仅是引用类型
- 重载是在一个类中,方法名一致,但是参数列表不一致,只与参数有关,和返回值无关。(重载就是同一个类中多个同名方法根据不同的传参来执行不同的逻辑处理)
-
final
- final修饰变量,一旦赋值不能更改
- final修饰方法,不可被子类重写
- final修饰类不可被继承
final修饰成员变量赋值
//声明时直接赋值 final int a = 1; //方法二,在非静态代码块中赋值 final int a; { a = 1; } //方法三:构造方法中赋值 class Solution { final int a; Solution(int a) { this.a = 2; } }
final修饰static类变量赋值
//直接赋值 public static int a = 2; //静态代码块赋值 final static int a ; static { a = 2; }
反射
- 什么是反射?
- 反射的优缺点
- 反射的应用场景
异常
- Java异常类层次结构图
- Throwable类常用方法
- try-catch-finally
- 使用try-with-resources来代替try-catch-finally
I/O流
- 什么是序列化?什么是反序列化?
- Java 序列化中如果有些字段不想进行序列化,怎么办?
- 获取用键盘输入常用的两种方法
- Java 中 IO 流分为几种?
- 既然有了字节流,为什么还要有字符流?