1. 面向过程和面向对象的区别
1.1 面向过程:
优点:
-
性能高。
相比于类调用需要实例化,开销比较大。适用于单片机、嵌入式开发、Linux/Unix。
NOTICE:
嵌入式开发:
嵌入式开发是指利用分立元件或集成器件进行电路设计、结构设计,再进行软件编程(通常是高级语言),实验,经过多轮修改设计、制作,最终完成整个系统的开发。这种嵌入式开发,适用于未来产品比较单一,产量比较大,产品开发周期比较长,成本控制比较严格的系统。
嵌入式技术不是单纯的软件技术,也不是单纯的硬件技术,是一门如何在一个特定的硬件环境上开发与构建特定的可编程软件系统的综合技术。嵌入式技术是在嵌入式系统的发展中应运而生的,它是依附于嵌入式系统,并推动嵌入式系统不断向前发展的核心动力。嵌入式是一种专用的计算机系统,作为装置或者设备的一部分。(https://baike.baidu.com/item/%E5%B5%8C%E5%85%A5%E5%BC%8F%E5%BC%80%E5%8F%91)
缺点:
- 没有面向对象的编程易维护、易复用和易扩展。
1.2 面向对象
优点:
-
易维护、易复用和易扩展。
因为具有封装、继承、多态性的特性。可以设计出低耦合的的系统,使系统更加灵活和易于维护。
缺点:
- 相比于面向过程的编程性能低。
1.3 JAVA
面向过程的语言也需要分配内存,计算内存偏移量。但是大多数都是直接编译成机械码在电脑上使用,另一些面向过程的脚本语言性能不一定比Java好。
Java是半编译语言,最终的代码不是可以直接被CPU执行的二进制机械码。这是性能差的主要原因,并不是因为它是面向对象的语言。
2. JAVA语言的特点
1.简单易学;2.面向对象(封装/继承/多态);3. 平台无关性;4. 可靠性;5. 安全性; 6.支持多线程; 7.支持网络编译并且很方便; 8. 编译与解释并存。
TIPS:
-
编译型语言在编译过程中生成目标平台的指令,解释型语言在运行过程中才生成目标平台的指令。
-
虚拟机的任务是在运行过程中将中间代码翻译成目标平台的指令。
3. JVM、JDK和JRE
3.1 JVM(Java Virtual Machine):
JVM是运行Java字节码的虚拟机。
JDK将.java文件编译为.class文件。.class文件即为字节码,与操作系统无关。JVM类加载器首先会加载字节码文件,然后通过编译器逐行编译,这种方式执行速度较慢。
IMPROVEMENT:
JIT编码器:属于运行时编译,即经过一次编译之后,会将其字节码对应的机器码保存下来,以后都可以直接使用。——即Java是编译与解释共存的语言。
3.2 JDK(Java Development Kit):
功能齐全的Java SDK,包含JRE、编译器和工具。可以创建和编译程序。
3.3 JRE:
可以运行已编译Java程序,但不能创建新程序。
4. Oracle JDK和OpenJDK
Oracle JDK | OpenJDK | |
---|---|---|
版本更新 | 6个月 | 3个月 |
是否开源 | 是OpenJDK的一个实现,并不是完全开源 | 完全开源 |
稳定性 | 更稳定,但是两者代码几乎相同 | |
响应性和JVM性能 | 性能更好 | |
支持版本 | 必须更新到最新版本 | |
许可 | 二进制代码许可协议 | GPL v2许可 |
5. Java和C++的区别
-
都是面向对象的语言,即支持封装、继承和多态;
-
Java不提供指针来直接访问内存,所以程序内存更加安全;
-
Java的类是单继承的,C++支持多重继承;但是Java的接口可以多重继承;
-
Java有内存管理机制,不需要手动释放无用内存;
-
Java没有结束符这一概念。
6. Java程序的主类
主类是Java程序执行的入口点。
Java应用程序中,主类是包含main()方法的类。在应用程序中,主类不一定是public类。
在Java小程序中,主类是一个继承自系统类JApplet或Applet的子类,这个主类必须是public类。
NOTICE:
- Applet类的作用是提供一个基本框架,使得Applet可以通过Web浏览器来运行,Applet没有main方法,它依靠浏览器调用Applet类中的方法。Applet不安全。
- 由于Applet类不能与Swing组件一起工作,所以从Applet类扩展出了一个JApplet类。JApplet的内容窗格使用BorderLayout布局管理器。
7. Java应用程序与小程序之间的差别
应用程序是从主线程启动,即main函数;
Applet主要是嵌在浏览器去页面上运行,调用init()或run()来启动。
8. 字符型常量和字符串常量的区别
字符型常量 | 字符串常量 | |
---|---|---|
形式 | 单引号 | 双引号 |
含义 | 相当于一个整型值(ASCII值),可参与表达式运算 | 代表一个地址(字符串在内存中的存放位置) |
内存 | 2字节(char) | 若干个字节 |
9. 重载和重写的区别
重载:可以发生在一个类中,多个方法有相同的名字、不同的参数,则产生了重载。编译器必须通过各个方法的参数类型和特定方法调用所使用的值类型与特定方法调用所用值类型进行匹配来挑选相应的方法。如果编译器找不到匹配的参数,会产生编译错误。(即重载解析过程)
重写:子类对父类允许访问的方法实现过程进行重新编写。方法名、参数列表相同,返回值、抛出的异常范围小于等于父类,访问修饰范围大于等于父类。另外,父类的访问修饰符为private子类则不能重写。
10. 构造器Constructor能否重写?
Constructor不能被override,但是可以overload。所以一个类中可以有多个构造函数。