了解java

2023-11-18

目录

 一、Java是什么?

二、Java语言特性

1、 简单性

2、面向对象

3、健壮性

4、多线程

5、 可移植性/ 跨平台

三、Java两种核心机制

 1、Java虚拟机 (Java Virtal Machine) 

 2、垃圾收集机制 (Garbage Collection)

四、什么是JDK、JRE

 1、JDK

 2、JRE       

3、JDK 、JRE 、JVM 三者之间的关系​​

五、java程序开发到运行的过程   

1、开发、编译和运行

2、classpath环境变量的作用是什么

3、编译运行所用命令

六、public class 和 class的区别


 一、Java是什么?

Java是一门面向对象的编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程。


Java具有简单性、面向对象、分布式、健壮性、安全性、平台独立与可移植性、多线程、动态性等特点 。Java可以编写桌面应用程序、Web应用程序、分布式系统和嵌入式系统应用程序等


二、Java语言特性


1、 简单性

Java 语言底层采用 C++语言实现,相对于 C++来说,Java 是简单的,在Java
语言中程序员不需要再操作复杂的指针(指针的操作是很复杂的),继承方面也是只支持单继
承(C++语言是一种半面向对象的编程语言,支持多继承,多继承会导致关系很复杂),在很
多方面进行了简化。

2、面向对象

Java是一个面向对象的语言,提供了封装、继承、多态等面向对象的机制。对程序员来说,这意味着要注意其中的数据和操纵数据的方法(method),而不是严格地用过程来思考。在一个面向对象的系统中,类(class)是数据和操作数据的方法的集合。数据和方法一起描述对象(object)的状态和行为。每一对象是其状态和行为的封装。类是按一定体系和层次安排的,使得子类可以从超类继承行为。在这个类层次体系中有一个根类,它是具有一般行为的类。Java程序是用类来组织的。

3、健壮性

 C++程序当中的无用数据/垃圾数据需要编程人员手动释放,当忘记释放内
存的时候,会导致内存使用率降低,影响程序的执行;在Java 语言当中这种问题得到了解决,
因为 Java 语言引入了自动垃圾回收机制(GC 机制),Java 程序启动了一个单独的垃圾回收线
程,时刻监测内存使用情况,在特定时机会回收/释放垃圾数据,这样会让内存时刻处于最好
的状态。

4、多线程

Java 语言支持多个线程同时并发执行,同时也提供了多线程环境下的安全机
制。Java是多线程语言,它提供支持多线程的执行(也称为轻便过程),能处理不同任务,使具有线索的程序设计很容易。Java的lang包提供一个Thread类,它支持开始线索、运行线索、停止线索和检查线索状态的方法。
Java的线索支持也包括一组同步原语。这些原语是基于监督程序和条件变量风范,由C.A.R.Haore开发的广泛使用的同步化方案。用关键词synchronized,程序员可以说明某些方法在一个类中不能并发地运行。这些方法在监督程序控制之下,确保变量维持在一个一致的状态。

5、 可移植性/ 跨平台

        可移植性/跨平台表示Java 语言只需要编写/编译一次,即可处处运行 。Java 代码既可以运行在 windows 的环境下,又可以运行在 Linux 的环境下,而不需要修改Java 源程序,原因是使用“Java 虚拟机(Java Virtual Machine,简称JVM)”这种机制。

        实际上 Java 程序运行的时候并不是直接运行在操作系统上面的,而是在操作系统上先安装了一个 JVM,把 Java 程序放到了 JVM 当中运行,JVM 屏蔽了各操作系统之间的差异,这样就完成了跨平台。但是,JVM 的出现虽然搞定了跨平台,同时也带来了一些问题,比如要想运行Java 程序就必须先安装 JVM,没有JVM,Java 程序是运行不了的,那么 Java 程序、Java 虚拟机、操作系统之间是怎样的关系呢?请看下图:
 

 


三、Java两种核心机制

 1、Java虚拟机 (Java Virtal Machine) 

JVM 是一个虚拟的计算机,具有指令集并使用不同的存储区域。负责执行指 令,管理数据、内存、寄存器。
对于不同的平台,有不同的虚拟机。 只有某平台提供了对应的java虚拟机,java程序才可在此平台运行。
Java虚拟机机制屏蔽了底层运行平台的差别,实现了“一次编译,到处运行”。

 2、垃圾收集机制 (Garbage Collection)

不再使用的内存空间应回收—— 垃圾回收。
在C/C++等语言中,由程序员负责回收无用内存。
Java 语言消除了程序员回收无用内存空间的责任:它提供一种系统级线程跟踪存储空
间的分配情况。并在JVM空闲时,检查并释放那些可被释放的存储空间。
垃圾回收在Java程序运行过程中自动进行,程序员无法精确控制和干预。

 Java程序还会出现内存泄漏和内存溢出问题吗?Yes!


四、什么是JDK、JRE


 1、JDK

         JDK(Java Development Kit Java 开发工具包)
         JDK是提供给Java开发人员使用的,其中包含了java的开发工具,也包括了JRE。
         所以安装了JDK,就不用在单独安装JRE了。
         其中的开发工具:编译工具(javac.exe) 打包工具(jar.exe)等

 2、JRE
       

        JRE(Java Runtime Environment Java 运行环境)
       包括Java虚拟机(JVM Java Virtual Machine)和Java程序所需的核心类库等,
       如果想要 运行一个开发好的Java程序,计算机中只需要安装JRE即可。

简单而言,使用JDK 的开发工具完成的java 程序,交给JRE

3、JDK 、JRE 、JVM 三者之间的关系

 JDK = JRE + 开发工具集(例如javac.exe、java.exe、javadoc.exe等工具)
JRE = JVM + Java SE标准类库


五、java程序开发到运行的过程
   

1、开发、编译和运行

步骤:
        1. 将 Java 代码 编写到扩展名为 .java 的文件中。
        2. 通过 javac 命令对该 java 文件进行 编译。
        3. 通过 java 命令对生成的 class 文件进行 

步骤详细描述:

第一步(写代码):

                                 在任意位置创建一个.java 结尾的文件,程序员在该文件中编写符合Java
                                语法的源代码,这个文件被称为Java 源文件。


第二步(编译):

                        使用“javac”命令对 java 源文件进行编译,如果 Java 源文件符合 Java
                        语法规则,则编译生成 1 个或者多个以“.class”结尾的文件。“.class”结尾的文件我们称之
                        为字节码文件,注意字节码文件不是普通文本文件,使用记事本等文本编辑器是无法打开的,
                        但该文件内容也不是二进制,如果是二进制形式的话,操作系统是可以直接执行的,这个文件
                        的内容我们称之为字节码。注意:这里有一个“类名”的概念,假设生成的文件是 A.class,
                        则表示类名为 A,B.class 则表示类名为 B。


第三步(运行):

                        使用“java”命令运行已编译的 Java 程序,假设编译之后的字节码文件
                        是 A.class,则在 dos 命令窗口中执行 java A命令,这个时候 Java 虚拟机(JVM)就启动了
                        Java 虚拟机通过“类装载器 ClassLoader”从硬盘中找到 A.class 文件并装载,字节码文件被装
                        载到 Java 虚拟机之后,Java 虚拟机解释器对字节码进行解释,最终解释为二进制码,然后操
                        作系统通过执行二进制指令来和硬件平台完成交互。

         默认情况下,类加载器去硬盘上找“字节码”文件的时候,默认从哪找????
                            默认情况下类加载器(classloader)会从当前路径下找。
    
    此处应该有疑问,你可以提出哪些问题????
        能不能给类加载器指定一个路径,让类加载器去指定的路径下加载字节码文件。
        答案:可以的。但是我们需要设置一个环境变量,叫做:classpath
    
    classpath是一个环境变量,是给谁指路的?
        答案:是给“类加载器”指路的。
    
    classpath环境变量不属于windows操作系统,classpath环境变量隶属于java。

    classpath环境变量是java特有的。
        classpath=A路径;B路径;C路径.....
        classpath是一个变量名
        A路径;B路径;C路径.....是变量值
    
    我们把classpath配置一下,这个环境变量在windows中没有,需要新建!!!!
        计算机-->右键-->属性-->高级系统设置-->环境变量-->新建...
    
    注意:变量名不能随意写:大小写无所谓,但必须叫做:classpath
        CLASSPATH
        ClassPath
        Classpath
        classpath
        都行。


    目前是随意配置的:(重启CMD)
        classpath=D:\course
        非常重要的一个特点,必须记住:
            配置了classpath=D:\course之后,类加载器只会去D:\course目录下找“xxx.class”文件
            不再从当前路径下找了。

2、classpath环境变量的作用是什么

是给类加载器指路的。
        在没有配置环境变量classpath的时候,默认从当前路径下加载。
        如果配置了环境变量classpath的话,就只能从指定的路径下加载了。

3、编译运行所用命令

        javac 命令,负责编译

使用规则:                                                   可同时编译多个源文件

                javac         java源文件的路径

例:javac  K.java      

                        (如果K.java原文件中有多个类的话,会生成多个class字节码文件)                                                  

        java 命令,负责运行

使用规则:                                                   同一时间 只能运行一个class文件

                java        类名(就是class文件的名字)

例:java K

                        (不能加   “ .class”  后缀名)       


六、public class 和 class的区别

  1. 一个 java 源文件中可以定义多个 class,在编译的时候一个 class 定义会对应编译生成一个xxx.class字节码文件
  2. 一个 java 源文件中public 的 class 不是必须的,可以没有
  3. 如果定义 public class 的类,仅且只能定义一个,并且要求此类名必须和 java 源文件名保持一致
  4. 任何一个 class 中都可以设定程序入口,也就是说任何一个 class中都可以写 main 方法(主方法)。                                                                      想从哪个入口进去执行,则让类加载器先加载对应的类即可(注意:若执行的类中无main方法,就会出现运行错误),例如:想让 A类中的 main 方法执行,则执行:java A,想让 B 类中的 main 方法执行,则执行:java B。但实际上,对于一个完整的独立的应用来说,只需要提供一个入口,也就是说只需要定义一个 main 方法即可。

类加载机制:在程序执行前,凡是需要加载的类全部加载到JVM中,先完成加载才会执行main方法 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

了解java 的相关文章

  • JavaMail Gmail 问题。 “准备启动 TLS”然后失败

    mailServerProperties System getProperties mailServerProperties put mail smtp port 587 mailServerProperties put mail smtp
  • 如何使用 FileChannel 将一个文件的内容附加到另一个文件的末尾?

    File a txt好像 ABC File d txt好像 DEF 我正在尝试将 DEF 附加到 ABC 所以a txt好像 ABC DEF 我尝试过的方法总是完全覆盖第一个条目 所以我总是最终得到 DEF 这是我尝试过的两种方法 File
  • 在Windows上安装Java 11 OpenJDK(系统路径问题)

    Java 11 最近发布了 众所周知 这个版本没有安装文件 当然 要在没有安装程序的情况下安装 Java 我将系统设置 PATH 和 JAVA HOME 设置为解压缩 Java 11 的文件夹的地址 根据对类似问题的已接受回复建议 唯一的事
  • 如何测试 JUnit 测试的 Comparator?

    我需要测试 Compare 方法 但我对如何测试感到困惑 我可以看看该怎么做吗 public class MemberComparator implements Comparator
  • 线程自动利用多个CPU核心?

    假设我的应用程序运行 2 个线程 例如渲染线程和游戏更新线程 如果它在具有多核 CPU 当今典型 的移动设备上运行 我是否可以期望线程在可能的情况下自动分配给不同的核心 我知道底层操作系统内核 Android linux内核 决定调度 我的
  • Java8无符号算术

    据广泛报道 Java 8 具有对无符号整数的库支持 然而 似乎没有文章解释如何使用它以及有多少可能 有些函数 例如 Integer CompareUnsigned 很容易找到 并且似乎可以实现人们所期望的功能 但是 我什至无法编写一个简单的
  • 在浏览器中点击应用程序时播放框架挂起

    我正在 Play 中运行一个应用程序activator run 也许 5 次中有 3 次 它会挂起 当我去http localhost 9000 它就永远坐在那里旋转 我看到很多promise timed out错误也 我应该去哪里寻找这个
  • 当分配给变量时,我可以以某种方式重用 Gremlin GraphTraversals 代码吗?

    我有看起来像这样的 GraphTraversals attrGroup GraphTraversal
  • OnClick 事件中的 finish() 如何工作?

    我有一个Activity一键退出Activity 通过layout xml我必须设置OnClick事件至cmd exit调用 this finish 效果很好 public void cmd exit View editLayout thi
  • 无法理解 Java 地图条目集

    我正在看一个 java 刽子手游戏 https github com leleah EvilHangman blob master EvilHangman java https github com leleah EvilHangman b
  • 归并排序中的递归:两次递归调用

    private void mergesort int low int high line 1 if low lt high line 2 int middle low high 2 line 3 mergesort low middle l
  • Java直接内存:在自定义类中使用sun.misc.Cleaner

    在 Java 中 NIO 直接缓冲区分配的内存通过以下方式释放 sun misc Cleaner实例 一些比对象终结更有效的特殊幻像引用 这种清洁器机制是否仅针对直接缓冲区子类硬编码在 JVM 中 或者是否也可以在自定义组件中使用清洁器 例
  • 将多模块 Maven 项目导入 Eclipse 时出现问题 (STS 2.5.2)

    我刚刚花了最后一个小时查看 Stackoverflow com 上的线程 尝试将 Maven 项目导入到 Spring ToolSuite 2 5 2 中 Maven 项目有多个模块 当我使用 STS 中的 Import 向导导入项目时 所
  • 应用程序关闭时的倒计时问题

    我制作了一个 CountDownTimer 代码 我希望 CountDownTimer 在完成时重新启动 即使应用程序已关闭 但它仅在应用程序正在运行或重新启动应用程序时重新启动 因此 如果我在倒计时为 00 10 分钟 秒 时关闭应用程序
  • 使用 SAX 进行 XML 解析 |如何处理特殊字符?

    我们有一个 JAVA 应用程序 可以从 SAP 系统中提取数据 解析数据并呈现给用户 使用 SAP JCo 连接器提取数据 最近我们抛出了一个异常 org xml sax SAXParseException 字符引用 是无效的 XML 字符
  • Keycloak - 自定义 SPI 未出现在列表中

    我为我的 keycloak 服务器制作了一个自定义 SPI 现在我必须在管理控制台上配置它 我将 SPI 添加为模块 并手动安装 因此我将其放在 module package name main 中 并包含 module xml 我还将其放
  • 将2-3-4树转换为红黑树

    我正在尝试将 2 3 4 树转换为 java 中的红黑树 但我无法弄清楚它 我将这两个基本类编写如下 以使问题简单明了 但不知道从这里到哪里去 public class TwoThreeFour
  • com.jcraft.jsch.JSchException:身份验证失败

    当我从本地磁盘上传文件到远程服务器时 出现这样的异常 com jcraft jsch JSchException Auth fail at org apache tools ant taskdefs optional ssh Scp exe
  • java8 Collectors.toMap() 限制?

    我正在尝试使用java8Collectors toMap on a Stream of ZipEntry 这可能不是最好的想法 因为在处理过程中可能会发生异常 但我想这应该是可能的 我现在收到一个我不明白的编译错误 我猜是类型推理引擎 这是
  • Jackson 将单个项目反序列化到列表中

    我正在尝试使用一项服务 该服务为我提供了一个带有数组字段的实体 id 23233 items name item 1 name item 2 但是 当数组包含单个项目时 将返回该项目本身 而不是包含一个元素的数组 id 43567 item

随机推荐

  • 关于uniapp小程序端提示v-for 暂不支持循环数据问题的解决方案

    关于uniapp小程序端提示v for 暂不支持循环数据问题解决方案 需求描述 在uniapp小程序此项目中使用多层for循环时 小程序端提示 uniapp v for 暂不支持循环数据 以至于获取不到循环的数据 解决方案
  • JAVA的并发编程(八):Disruptor并发框架

    目录 一 Disruptor并发框架 1 介绍 2 关键知识点 3 实现方法 1 RingBuffer Disruptor 单线程 2 RingBuffer Squencebarrier BatchEventprocessor 多线程 单生
  • 杭电OJ 1002 A + B Problem II

    A B Problem II 页面数据来自 this page from http acm hdu edu cn showproblem php pid 1002 Time Limit 2000 1000 MS Java Others Me
  • linux EXPECT

    expect 概念 Expect除支持Unix Linux平台外 它还支持Windows平台 用过secureCRT的人应该知道有个自动登录的设置 那就是利用expect实现的 expect 安装需要那些包支持 tcl包和tk包 linux
  • Recovery系统升级(2)--- 软件架构

    软件架构 Recovery升级系统原理 Main System下载新版本升级包到设备存储 重启进入Recovery System Recovery从设备存储load升级包并升级Main System 最后重启回到Main System 与之
  • DLT(Diagnostic Log and Trace)嵌入式系统程序运行记录

    http blog csdn net yanlinembed article details 49837975 DLT的使用有属于Application范畴与Context范畴 在使用DLT时 需要包含以下头文件 include
  • 浅谈在线IDE的搭建,配置,体验

    首先想说一句 在线IDE体验不是很好 也可能是对于在线的IDE有了太多的期望 网页实现一些软件的功能确实比较困难 已经体验的IDE有 腾讯家的Coding Cloud Studio 亚马逊家的 Cloud9 代码沙盒 Codesandbox
  • 慧眼识才、认识自己

    慧眼识才的十二杆标尺 学历 经历 掌控特质 老虎性格 表现特质 孔雀性格 耐心特质 考拉性格 精确特质 猫头鹰性格 自信心 精力水平 现场爆发力 策略规划力 支持执行力 敏锐度 慧眼识才的十二杆标尺包括由表及里的五个圈层 最外层是学历和经历
  • maven [INFO] Generating project in Batch mode

    搜资料很简单是某些东西被Q了 那么解决方法也很简单 S S T A P全局模式就OK了
  • Flask框架的web开发02(web项目整体架构)

    目录 一 flask框架整体构造 1 介绍 2 构造图 二 核心对象 管理 启动模块 1 核心对象app py模块 2 管理模块manager py 3 启动模块server py 三 配置文件模块 四 forms验证模块 五 libs公共
  • 关于华三HCL使用时,设备端口状态为down的解决

    内存不能低于默认值 可以通过关闭一些模拟器中的设备 可以关闭物理机上一些正在使用的应用和后台程序 一台或少量的启动设备
  • 习题

    1 在路由器上配置SSH服务器的过程 2 简述以太网交换机Mac地址表的学习过程 首先当4台pc机连接到交换机相互通信时 交换机会取出每个数据包的源MAC地址 通过算法找到相应的位置 如果是新地址 则创建地址表项 填写相应的端口信息 生命周
  • 1132. 合法的三角数

    给定一个包含非负整数的数组 你的任务是计算从数组中选出的可以制作三角形的三元组数目 如果我们把它们作为三角形的边长 样例 输入 2 2 3 4 输出 3 解释 合法的组合如下 2 3 4 使用第一个 2 2 3 4 使用第二个 2 2 2
  • 【机试练习】【C++】随机选择算法

    随机选择算法的实现 include
  • 【并发多线程】java.util.concurrent简介

    主要的组件 Executor ExecutorService ScheduledExecutorService Future CountDownLatch CyclicBarrier Semaphore ThreadFactory java
  • matlab遗传算法求多元函数最小值,matlab遗传算法求函数最小值

    function obj yichuan lb ub px pm lb ub为自变量的下界与上界 px为杂交概率 pm为变异概率 popsize 40 设定种群大小为40 maxgen 500 设定最大遗传代数为500代 dim 20 定义
  • 鸡和兔子共36脚100Matlab,matlab编程.ppt

    matlab编程 ppt 由会员分享 可在线阅读 更多相关 matlab编程 ppt 51页珍藏版 请在人人文库网上搜索 1 1 Matlab 编程基础 数学实验 数学软件 Matlab 2 本讲主要内容 M 文件 Matlab 编程基础
  • c语言基础回顾 —— 其他知识点

    参考 c语言基础回顾 其他知识点 作者 丶PURSUING 发布时间 2021 03 11 14 48 59 网址 https blog csdn net weixin 44742824 article details 114666007
  • python实现微信机器人: 登录微信、消息接收、自动回复

    安装wxpy pip install U wxpy 登录微信 导入模块 from wxpy import 初始化机器人 扫码登陆 bot Bot 运行以上代码 会生成一个二维码 通过图片扫描二维码即可登录微信 如果是在服务器上运行代码 无法
  • 了解java

    目录 一 Java是什么 二 Java语言特性 1 简单性 2 面向对象 3 健壮性 4 多线程 5 可移植性 跨平台 三 Java两种核心机制 1 Java虚拟机 Java Virtal Machine 2 垃圾收集机制 Garbage