当前位置: 首页 > article >正文

java语言知识点(1)

一.java语言有什么特点

1.简单性

java 的语法相对简洁明了,它摒弃了 C++ 语言中一些复杂、容易出错的特性,如指针操作。例如,在 Java 中不需要像在 C++ 中那样手动管理内存指针。

Java 是完全面向对象的语言。它的基本编程单元是类(class)和对象(object)。类定义了对象的属性和行为,对象是类的实例。

2.面向对象

封装性:Java 支持将数据(属性)和操作数据的方法封装在一个类中。通过访问修饰符(如 private、protected、public)来控制对类成员的访问。

继承性:Java 允许类之间通过继承来建立层次关系。子类可以继承父类的属性和方法,并且可以添加自己特有的属性和方法。

多态性:Java 有多态性的特点,这体现在方法重载(Overloading)和方法重写(Overriding)上。方法重载是指在一个类中可以定义多个同名方法,但是它们的参数列表不同(参数的数量、类型或顺序不同)。

3.分布式

网络编程支持强大:Java 提供了丰富的类库用于网络编程,能够方便地开发分布式应用程序。例如,通过 Java 的 Socket 类可以轻松地实现基于 TCP/IP 协议的网络通信。它可以用于开发客户端 - 服务器应用程序,如一个简单的 Web 服务器或者一个多人在线游戏的服务器端和客户端通信部分。

远程方法调用(RMI)机制:Java 的 RMI 允许一个 Java 虚拟机(JVM)上的对象调用另一个 JVM 上对象的方法。这使得在分布式环境下,不同计算机上的 Java 程序可以像本地调用一样方便地进行交互,实现了分布式计算的功能。

4.健壮性

强类型检查机制:Java 是强类型语言,在编译阶段会对变量的类型进行严格检查。例如,如果定义了一个整型变量,就不能将一个字符串值赋给它。这种类型检查机制有助于在程序运行之前发现许多错误,减少了程序运行时出现类型不匹配等错误的可能性。

自动垃圾回收(GC)机制:Java 的垃圾回收器会自动管理内存,回收不再使用的对象所占用的内存空间。程序员不需要手动释放内存,这样就避免了因内存管理不当(如忘记释放内存、多次释放内存等)而导致的内存泄漏和悬空指针等问题,使得程序更加稳定可靠。

5.可移植性

java 程序经过编译后生成字节码(.class 文件),字节码是一种中间形式的代码。字节码可以在任何安装了 Java 虚拟机(JVM)的平台上运行。这意味着开发人员只需要编写一次代码,就可以在不同的操作系统(如 Windows、Linux、Mac OS 等)和硬件平台上运行,只要该平台有对应的 JVM 实现。

6.多线程

Java 内置了对多线程的支持,使得开发人员可以方便地在程序中实现多线程编程。例如,在一个图形处理软件中,可以用一个线程来负责接收用户的输入,另一个线程负责对图像进行渲染,还有一个线程负责将渲染后的图像保存到文件中。通过多线程可以提高程序的并发处理能力和资源利用率。而c++在2011年的版本中才加入了多线程机制,可以使用std::threadstd::async来创建线程。

二.javaSE和javaEE的区别

JAVASE主要用于开发桌面应用程序和简单的命令行程序。它提供了 Java 语言的基础核心类库,包括基本数据类型、操作这些数据类型的操作符、控制流语句(如 if - else、for 循环等),还有面向对象编程的基础类(如 Object 类)、集合类(如 ArrayList、HashMap)、输入输出流(用于文件读写等操作)等。这些功能使得开发者可以编写独立的、小型到中型规模的应用程序。

JAVAEE侧重于企业级应用开发,这些应用通常是分布式、多层架构的大型复杂系统。Java EE 提供了一系列用于构建企业级应用的技术和规范,包括 Web 应用开发、企业级服务(如消息队列、事务管理等)、分布式组件开发等。它使得开发者能够构建可伸缩、安全、可靠并且能够与其他企业系统集成的应用程序。

三.JVM 和 JDK 和 JRE的区别

1.JRE

Java 运行时环境,是运行 Java 程序的最小环境。它主要包括 Java 虚拟机(JVM)和 Java 核心类库。当用户只想运行已经开发好的 Java 程序时,只需要安装 JRE 即可。

JVM 是 JRE 的核心部分,它负责执行 Java 字节码。不同的操作系统有不同的 JVM 实现,如 Windows 系统有 Windows 版的 JVM,Linux 系统有 Linux 版的 JVM 等。JVM 提供了一个抽象的运行环境,使得 Java 程序可以在不同的操作系统上运行,实现了 “一次编写,到处运行” 的特性。例如,一个 Java 程序在 Windows 上的 JVM 中运行和在 Linux 上的 JVM 中运行,用户看到的程序功能是一样的,只是底层的操作系统调用等细节由 JVM 来处理。

JAVA核心库,这些类库是 Java 程序运行所必需的。包括 java.lang 包(提供了像 Object、String 等基础类)、java.util 包(包含各种实用工具类,如集合框架)、java.io 包(用于输入输出操作)等。这些类库提供了丰富的功能,如进行数学计算(通过 java.lang.Math 类)、处理日期时间(java.util.Date 等类)、读取和写入文件(java.io.File 等类)等,使得 Java 程序能够完成各种各样的任务。

2.JDK

Java 开发工具包,是开发 Java 程序的工具集合。如果要开发 Java 程序,就需要安装 JDK。JDK 包含了 JRE 和一系列开发工具。

开发工具:

编译器(javac):这是 Java 开发中最常用的工具之一。它的作用是将 Java 源文件(.java 文件)编译成字节码文件(.class 文件)。例如,当编写一个名为 HelloWorld.java 的程序,通过 javac HelloWorld.java 命令,编译器就会检查程序中的语法错误等,并将其编译成 HelloWorld.class 字节码文件,这个字节码文件才能在 JVM 中运行。

调试工具(jdb):用于调试 Java 程序。在程序开发过程中,难免会遇到错误或者不符合预期的情况。jdb 可以帮助开发者逐步执行程序,查看变量的值,找出程序中的逻辑错误。例如,如果一个复杂的算法实现的程序运行结果不正确,就可以使用 jdb 来跟踪程序的执行过程,检查每一步的变量变化,从而定位错误。

Java 文档生成工具(javadoc):用于生成 Java 代码的文档。它可以根据 Java 源文件中的注释(特殊格式的注释)来生成 API 文档。这对于团队开发或者开源项目非常重要,其他开发者可以通过查看生成的文档来了解代码的功能、类和方法的使用等信息。

3.JVM

Java 虚拟机,是 Java 程序的运行核心。它是一个虚构出来的计算机,具有自己的指令集和运行时数据区。JVM 读取并执行字节码文件,将字节码指令翻译成底层操作系统能够理解的机器指令。

运行时数据区:

程序计数器(PC Register):用于记录当前线程所执行的字节码指令的地址。因为在多线程环境下,每个线程都有自己独立的程序计数器,这样可以保证线程切换后能够正确地恢复执行。例如,当一个线程暂时被挂起,切换到另一个线程执行,当这个线程再次被调度执行时,程序计数器可以帮助它从上次暂停的位置继续执行。

Java 虚拟机栈(Java Virtual Machine Stack):用于存储局部变量表、操作数栈、动态链接、方法出口等信息。每个方法被调用时,都会在栈中创建一个栈帧,用于存储该方法的相关信息。当方法执行完毕,栈帧就会被弹出。例如,在一个递归方法中,每次递归调用都会在栈中创建一个新的栈帧,当递归深度过大时,可能会导致栈溢出。

本地方法栈(Native Method Stack):与 Java 虚拟机栈类似,但是它用于存储本地方法(用非 Java 语言编写的方法,如 C 或 C++ 编写的方法)的相关信息。

堆(Heap):是 Java 程序中最大的一块内存区域,用于存储对象实例。所有的对象实例和数组都在堆中分配内存。例如,当通过 new 关键字创建一个新的对象时,这个对象就会在堆中分配一块内存空间。

方法区(Method Area):用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等。例如,一个类的字节码信息、类中的常量池(包含字符串常量等)都存储在方法区中。


http://www.kler.cn/news/362118.html

相关文章:

  • C++代码操作指令的定义
  • Redis实现全局ID生成器
  • ICMP协议以及ARP欺骗攻击
  • 【算法】归并排序概念及例题运用
  • 苍穹外卖学习笔记(三十二最终篇)
  • 解密 Redis:如何通过 IO 多路复用征服高并发挑战!
  • Selenium:设置元素等待、上传文件、下载文件
  • 数字化转型中的IT价值:如何让管理层相信“钱花得值”?
  • 如何判断一个数是几位数与这个数是否为回文数并打印出其逆序数
  • 为何大家都对谷歌老号白包趋之若鹜
  • 从零开始学PHP之helloworld
  • 计算套餐续订率:梧桐数据库与`oracle`实现`SQL`的细微差异分析
  • C++运算出现整型溢出
  • Opensearch集群部署【docker、服务器、Helm多种部署方式】
  • LeetCode 142 - 环形链表 II
  • 动态规划19:53. 最大子数组和
  • solidworks管理员运行install.bat提示[sC]0penService 失败 5:拒绝访问。请按任意键继续...
  • YOLO11改进 | 注意力机制 | 添加SE注意力机制
  • U盘文件删除后的全面恢复指南
  • 纯css实现瀑布流! 附源码!!!
  • Android Studio Gradle版本、插件以及Android API对应关系(持续更新)
  • 二百六十八、Kettle——同步ClickHouse清洗数据到Hive的DWD层静态分区表中(每天一次)
  • docker 误删gitlab文件,另类的删库跑路,如何进行恢复?
  • css 不管目录结构层级。父元素有很多块子元素,孙子元素。希望从左往右从上往下排列
  • MySQL程序介绍<二>
  • TensorRT推理端到端