02、Java 语言的特点

  • 简单性、面向对象、可移植(平台无关)、安全、健壮性、编译&解释、高性能、多线程、动态。

1、简单性(Simplicity)


  • 上世纪九十年代,James Gosling团队希望构建一个无需深奥训练,就可以进行编程的系统。
    • 在设计 Java 时,以便系统更容易理解,就让 Java 的语法尽可能的接近 C++ 。
      • Java 的语法算是 C++ 语法的一个“纯净”版本。
      • 如:没有头文件、指针、结构、联合、操作符重载、多重继承、手动管理内存等。
  • 实现机制
    • 去复杂化:移除显式指针操作(由 JVM 管理内存)、头文件、预处理器等。
    • 自动内存管理:垃圾回收机制(GC)代替手动内存释放。
    • 清晰的语法结构:强制面向对象设计,统一使用类和方法组织代码。

2、面向对象(Object-Oriented)


  • 特点:支持封装、继承、多态和抽象,代码模块化且易于扩展。
  • 实现机制
    • 类与对象:通过 class 定义类,new 关键字实例化对象。
    • 接口与抽象类:通过 interface 和 abstract class 实现多态和规范约束。
    • 访问控制:public、protected、private、默认(包级)权限控制封装性。

3、分布式


  • 特点:内置网络编程能力,适合分布式系统开发。
  • 实现机制
    • RMI(远程方法调用):允许跨 JVM 调用对象方法。
    • HTTP/HTTPS 客户端:Java 11+ 提供标准化的 HttpClient。
    • 序列化:通过 Serializable 接口实现对象网络传输。

4、健壮性(Robustness)


  • 特点减少运行时错误,增强程序稳定性。
  • 实现机制
    • 强类型检查:编译时严格类型匹配,避免隐式类型转换错误。
    • 异常处理机制:强制处理检查异常(Checked Exceptions)。
      • 如:IOException。
    • 指针隐藏:通过引用替代显式指针,防止内存越界访问。

5、安全性


  • 特点:防止恶意代码攻击,保障系统安全。
  • 实现机制
    • 字节码验证:JVM 加载类时检查字节码合法性
    • 类加载隔离:双亲委派模型(Parent Delegation Model)确保核心类库不被篡改
    • 安全管理器:通过 SecurityManager 限制代码访问文件、网络等系统资源。

6、体系结构中立


  • Java 编译器通过生成与特定计算机体系结构无关字节码指令 来实现这一特性。
    • 精心设计的字节码不仅可以很容易地在任何机器上解释执行
    • 而且可以很容易地动态转换为原生的 机器代码

7、可移植性


  • 特点:一次编译,多平台运行(Write Once, Run Anywhere, WORA)。
  • 实现机制
    • JVM(Java 虚拟机):字节码(.class)由平台特定的 JVM 解释编译执行。
    • 中间字节码javac 编译器将源码转换为与硬件无关的字节码。
    • 标准库统一:Java API 在不同操作系统中提供一致的接口。
      + 如:处理文件、正则表达式、XML、日期和时间、数据库、网络连接、线程等。
      • 不仅程序是可移植的,Java API 往往也比原生 API 质量更高。

8、解释性


  • Java 解释器可以在任何安装了解释器的机器上直接执行 Java 字节码

9、高性能


  • 特点:接近原生语言(C / C++)的执行效率
    • 早期的 Java 确实是解释性的。现在 Java 虚拟机使用了 即时编译器JIT)。
      • 因此,用 Java 编写的“热点”代码运行速度与 C++ 相差无几,有些情况下甚至更快
  • 实现机制
    • JIT 编译器:将热点代码(频繁执行的字节码)编译为本地机器码
    • 内存优化:堆外内存(如:ByteBuffer)和逃逸分析减少 GC 压力。
    • 并发优化:无锁算法(如:CAS)和高效线程池提升吞吐量。

10、多线程与并发支持


  • 因为,摩尔定律即将走到尽头。
    • 我们不再追求更快的处理器,而是着眼于获得更多的处理器,而且要让它们保持繁忙

  • 特点:内置线程管理,支持多线程、高并发****编程。使多线程编程,变得简单。
  • 实现机制
    • 线程模型
      • 通过 Thread 类、Runnable 接口或 Executor 框架创建线程。
    • 同步机制
      • synchronized 关键字、Lock 接口。
      • volatile 变量和原子类(如:AtomicInteger)。
    • 并发工具包
      • java.util.concurrent 提供线程池。
      • 并发集合(如:ConcurrentHashMap)和同步器(如:CountDownLatch)。
  • 与 C++ 对比
    • C++11 之前:必须依赖操作系统 API第三方库(如:Boost.Thread、pthread)。
    • C++11 及之后标准库(thread、mutex 等)已支持多线程编程无需第三方库。
    • 高级需求:如果需要线程池、并行算法或更复杂的工具链,可借助第三方库。
      • 如:Intel TBB、OpenMP 。
  • 现代 C++ 开发中,标准库已足够覆盖大多数多线程场景,但第三方库能进一步提升开发效率和性能

11、动态性(Dynamic)


  • 特点:支持运行时动态加载类反射代码扩展。
  • 实现机制
    • 反射(Reflection):通过 Class 对象动态获取类信息、调用方法修改字段
      • 如:Class.forName()。
    • 动态代理
      • java.lang.reflect.Proxy生成接口的代理实例,支持 AOP(面向切面编程)。
    • 动态类加载自定义类加载器(如:ClassLoader)实现热部署和模块化加载。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值