Java基础
文章目录
- Java基础
-
-
- 1、面向对象和面向过程的区别?
- 2、什么是JVM?
- 3、JDK和JRE的区别?
- 4、Java和C++的区别?
- 5、构造器Constructor是否可被override?
- 6、方法重载和重写的区别?
- 7、Java面向对象的三大特性
- 8、String,StringBuffer和StringBuilder的区别是什么?
- 9、自动装箱与自动拆箱
- 10、为什么静态方法内不能调用非静态成员?
- 11、在Java类中定义一个不做事且没有参数的构造方法有什么作用?
- 12、接口和抽象类的区别?
- 13、== 与 equals的区别?
- 14、hashCode()与equals()为什么要重写?
- 15、Java中是引用传递还是值传递?
- 16、线程、进程、程序直接的关系?
- 17、线程有哪些基本状态?
- 18、说一下final关键字
- 19、Java异常层次结构图
- 20、Throwable类常用方法
- 21、异常处理机制try...catch...finally
- 22、有些字段不想进行序列化,怎么办?
- 23、获取键盘输入常用的两种方法
- 24、IO流分为几种?
- 25、BIO,NIO,AIO有什么区别?
- 26、深拷贝与浅拷贝
-
1、面向对象和面向过程的区别?
(1)面向过程:面向过程偏步骤化,性能比面向对象高。因为类调用时需要实例化,开销比较大,比较消耗资源,所以当性能是最重要的考量因素时,比如近底层的东西,单机片、嵌入式开发、Linux系统等一般采用面向过程开发。但是,面向过程没有面向对象易维护、易复用、易扩展。
(2)面向对象:把所有事物当成对象看待,不管是实体对象还是虚拟对象。面向对象易维护、易复用、易扩展。因为面向对象有封装、继承、多态性的特性,所以可以设计低耦合的系统,更加灵活。但是面向对象的性能比面向过程低。
2、什么是JVM?
JVM是运行Java字节码的虚拟机。对不同的系统(Windows,Linux,macOS)都有特定的实现,目的是使用相同的字节码,能给出相同的运行结果。
3、JDK和JRE的区别?
JDK是Java Development Kit,Java运行工具包,是功能齐全的Java SDK,能够创建和编译程序。JDK包括了JRE。
JRE是Java Run Environment,Java运行时环境,是指当Java程序编译好之后,需要运行字节码的那部分东西,包括Java虚拟机JVM,Java类库,java命令和其他一些基础构件。显然JRE不能创建程序,只能运行程序。
4、Java和C++的区别?
(1)都是面向对象的语言,都支持封装、继承和多态;
(2)Java不提供指针直接访问内存,程序内存更加安全;
(3)Java类是单继承,C++支持多继承;虽然Java类不可以多继承,但是接口可以多继承;
(4)Java有自动内存管理机制,不需要程序员手动释放无用内存;
(5)在C语言中,字符串或字符数组最后都会有一个额外的字符‘\0’来表示结束,但是Java语言中没有结束符这一概念。
5、构造器Constructor是否可被override?
Constructor不能被override(重写),但是可以overload(重载),所以经常看到一个类中有多个构造方法。
6、方法重载和重写的区别?
重载:一个类中,方法名相同,参数列表不同。
重写:也叫方法覆盖,子类继承父类,对父类的方法进行重写。
区别点 | 方法重载 | 方法重写 |
---|---|---|
发生范围 | 同一个类 | 子类 |
参数列表 | 必须修改 | 一定不能修改 |
返回值类型 | 可修改 | 子类方法返回值比父类更小或相同 |
异常 | 可修改 | 子类方法抛出的异常比父类更小或相同 |
访问修饰符 | 可修改 | 子类方法访问修饰符不能比父类高 |
发生阶段 | 编译期 | 运行期 |
7、Java面向对象的三大特性
(1)封装:把一个对象的属性私有化,对外提供访问方法。
(2)继承:子类可以选择性的继承一个父类,复用父类代码。
(3)多态:父类型引用变量指向子类型对象,编译时一种状态,运行时另一种状态。
8、String,StringBuffer和StringBuilder的区别是什么?
(1)可变性
String类中的字符数组采用了final修饰,是不可变的。而StringBuilder与StringBuffer都继承AbstractStringBuilder类,在这个父类中也是采用字符数组存储字符串的&