了解java

目录

 一、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方法 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值