Java语法相关知识汇总(一)

前言

第一章、计算机语言发展史

第一代语言:机器语言

  1. 主要编写二进制码,以打孔机为代表

第二代语言:低级语言

  1. 主要以汇编语言为代表
  2. 在低级语言中已经引入了一些英语单词,例如变量赋值

第三代语言:高级语言

  1. 几乎和人类的语言完全相同,即使是没有学习过计算机编程,只要看到这段代码就知道该代码完成什么功能,例如:c语言,c++,Java

总之,大家看到的编程语言的发展方向是:向着人类更加容易理解的方向发展。

第二章、Java概述

一、Java语言发展史

Java语言诞生于1995年

 

Java包括三大块

--JavaSE:Java标准版

--JavaEE:Java企业版

--JavaME:Java微型版

其中JavaSE是基础,以后主攻JavaEE方向

二、Java语言的特性(开源免费,纯面向对象,跨平台)

  • 简单性
    • 相对而言的,例如Java中不再支持多继承,C++是支持多继承的,多继承比较复杂
    • C++中有指针,Java中屏蔽了指针的概念
    • 所以相对来说Java是简单的
    • Java语言底层是C++实现的,不是C语言
  • 面向对象
    • Java是纯面向对象的,更符合的人的思维模式,更容易理解
  • 可移植性
    • Java程序可以做到一次编译,到处运行,也就是说Java程序可以在windows操作系统上运行,不做任何修改,也可以放到别的操作系统上运行,也叫做跨平台
  • 多线程
    • 多线程threading,实现并发,效率更高
  • 健壮性
    • 自动垃圾回收机制,GC机制
    • Java语言运行过程中产生的垃圾是自动回收的,不需要程序员关心
  • 安全性

1、Java跨平台原理(可移植性)

        Windows操作系统内核和Linux操作系统的内核肯定不同,他们这两个操作系统执行指令的方式是不一样的。一般情况下同一个Java程序是不能在不同的操作系统上运行的。

        显然Java程序不能直接和操作系统打交道,因为Java程序只有一份,操作系统执行原理都不同。SUN团队很聪明,他们想了一个办法,他们让Java程序运行在一台虚拟的计算机中,这个虚拟的计算机叫做Java虚拟机(JVM:Java Virtual Machine),给不同的操作系统安装不同版本的JVM,这样Java程序就可以运行在JVM中,相当于JVM屏蔽了操作系统之间的差异。因此可以实现Java的跨平台

        

2、java的设计哲学

Java 是一种通用的、面向对象的编程语言,由 Sun Microsystems(现在是 Oracle Corporation)的詹姆斯·高斯林(James Gosling)等人开发。Java 的设计哲学主要包括以下几个方面:

  1. 简单性(Simplicity):Java 设计追求简单性,尽可能简化语言的规范和语法,使得初学者能够更轻松地学习和掌握它。Java 的语法借鉴了 C 和 C++,但是去除了一些容易引起错误和混乱的特性,使得代码更易于阅读和理解。

  2. 面向对象(Object-Oriented):Java 是一种纯粹的面向对象编程语言,它支持封装、继承和多态等面向对象的概念。这使得 Java 代码更具有灵活性和可扩展性,便于编写复杂的软件系统。

  3. 平台无关性(Platform-Independence):Java 被设计为一种具有平台无关性的语言,这意味着编写的 Java 程序可以在不同的操作系统和硬件平台上运行。这是通过 Java 虚拟机(JVM)实现的,它允许 Java 程序在不同的平台上以相同的方式运行。

  4. 安全性(Security):Java 的设计注重安全性,它提供了许多安全特性来保护系统免受恶意代码的攻击。Java 的安全模型包括字节码验证、安全沙箱、安全类库等特性,这些特性使得 Java 成为一种安全可靠的编程语言。

  5. 可移植性(Portability):由于 Java 的平台无关性,它具有很高的可移植性。Java 程序可以在任何支持 Java 虚拟机的平台上运行,而不需要针对特定的操作系统或硬件进行重新编译。

  6. 高性能(Performance):尽管 Java 是一种解释型语言,但是它通过即时编译器(Just-In-Time Compiler,JIT)提高了代码的执行效率。Java 虚拟机通过动态优化技术提高了代码的执行速度,使得 Java 程序可以达到接近原生代码的性能水平。

Java 的设计哲学使得它成为一种功能强大、易学易用、安全可靠且具有高性能的编程语言,广泛应用于企业级应用开发、移动应用开发、云计算等各个领域。

三、安装java

1、JDK8安装

JDK8下载及安装

jdk1.8.0_111

2、JDK19安装

JDK19下载

安装教程

3、java历史版本

下载地址

四、JRE和JDK

 

1、JRE和JDK和JVM之间的关系

        在 Java 中,JVM(Java Virtual Machine)和 JRE(Java Runtime Environment)是两个不同但密切相关的概念。
        JVM 是 Java 虚拟机,它是 Java 运行程序的核心。它负责将 Java 字节码(.class 文件)翻译成机器码,并在计算机上执行 Java 程序。它提供了内存管理、垃圾回收、线程管理等功能。
而 JRE 是 Java 运行时环境,它包含 JVM 和 Java 类库等运行 Java 程序所需的核心组件。JRE 还包括了一些工具和库,使得 Java 应用程序能够在计算机上运行,例如 Java 核心类库、Java 程序所需的运行时库等。

        简而言之,JVM 是运行 Java 程序的虚拟机,而 JRE 则是包含 JVM 和其他运行时所需组件的环境。在运行 Java 程序时,JRE 提供了必要的资源和库,JVM 则负责将 Java 代码转换成可执行的机器码并执行。

所以只需要安装jdk就可以了,安装JDK教程

2、java版本说明

"java version 1.8.0_111" 表示 JDK 8 版本的第111个更新版本。在 Java 的版本号规则中,第一个数字表示主版本号,第二个数字表示次版本号,第三个数字表示更新版本号。因此,在这个版本号中,“1.8.0” 表示 JDK 8 版本,“111” 表示这个版本的更新次数。

比如说 Java SE Development Kit 11.0.2,其中:

  • 主版本号为 11,表示这是 JDK 11 版本。
  • 次版本号为 0,表示这是 JDK 11 的初始版本。
  • 更新版本号为 2,表示这是 JDK 11 的第二个更新版本。

那为什么8版本是这样写的 

        Java SE Development Kit 8 版本之前的版本号规则与 Java SE 8 及以后的版本略有不同。在早期的版本中,版本号中的第一个数字表示主要版本号,后面的数字表示次要版本号和更新版本号。例如,在 "java version 1.7.0_80" 中,1 表示主要版本号,7 表示次要版本号,0_80 表示更新版本号。

        但是从 Java SE Development Kit 8 开始,版本号规则被调整为与后续版本一致。主要版本号位于版本号的第一个位置,次要版本号位于第二个位置,更新版本号位于第三个位置。因此,Java SE Development Kit 8 版本的完整版本号是 1.8.0_xxx。

3、Windows操作系统搜索硬盘上某个命令原理

  • 首先会从当前目录下搜索
  • 当前目录搜索不到的话,会从环境变量path制定的路径中搜索
  • 如果都搜索不到则会报错

 一般都在系统变量中配置path,配置变量后一定要重启DOS窗口

4、JDK目录介绍

JDK默认安装在:C:\Program Files\Java

JDK/bin:该目录下存放了很多命令,例如javac.exe和java.exe

在 Java 的安装目录中,常见的目录结构及其作用如下:

  1. bin 目录:包含了可执行的二进制文件,如 javajavac 等。这些命令是用来运行 Java 程序和编译 Java 源代码的。

  2. lib 目录:包含 Java 运行时所需的核心类库文件。这些文件是 Java 程序运行所必需的基本类库。

  3. conf 目录:存放了 Java 配置文件,可以用来配置 Java 运行时的各种参数和选项。这些配置文件可以用来控制 Java 虚拟机的行为,如内存管理、类加载器设置等。

  4. include 目录:主要包含了一些用于本地方法调用(JNI)的头文件,这些头文件用于在 Java 中调用本地系统的一些特定功能。

  5. jre 目录:这是 Java Runtime Environment(JRE)的子目录,包含了用于在计算机上运行 Java 程序所需的类库和虚拟机。在 JDK 安装中,该目录通常是一个子模块,而在 JRE 安装中则是主要部分。

  6. jmods目录:这是在Java 9及更高版本中引入的目录,它包含了Java平台模块的文件。Java平台模块是用于将Java SE分解为互不依赖的一组模块的概念。在jmods目录中,您可能会找到一些以.jmod为扩展名的文件,这些文件包含了Java模块的信息。

  7. legal目录:该目录通常包含了法律方面的信息,比如许可协议和版权信息等。这些文件列出了Java平台及相关组件的使用条款和条件,以及版权声明。这对于了解和遵守Java平台的法律限制非常重要。

这些目录提供了 Java 开发和运行所需的基本组件和配置文件。通过对这些目录的管理和设置,您可以对 Java 环境进行调整和定制,以满足特定的应用需求。

4、JVM介绍

Java虚拟机(Java Virtual Machine,JVM)是Java平台的核心组成部分之一,它是一个虚拟的计算机,它的任务是执行Java字节码(bytecode)

        Java编译器将Java源代码编译成Java字节码,这种字节码可以在任何平台上运行,只要该平台有一个安装了Java虚拟机的运行环境。Java虚拟机在运行Java应用程序时,会将Java字节码转换成该平台的本地机器指令执行。

        Java虚拟机的主要优点是,它提供了一种独立于平台的执行环境,使得Java程序可以跨平台运行。此外,Java虚拟机还提供了一些内存管理机制,例如自动垃圾回收等,这些机制可以使Java程序员更容易编写高效且可靠的代码

        Java虚拟机的实现有很多种,其中最著名的是Oracle公司开发的HotSpot虚拟机,其他的实现包括IBM公司的J9虚拟机和Azul Systems公司的Zing虚拟机等。

五、Java的加载与执行

Java程序的运行包括两个非常重要的阶段

编译阶段只检查语法,不会进行运算,不会赋值,不会开辟内存空间

运行阶段会进行运算,赋值和开辟内存空间

六、java运行原理

java程序运行是以类为基本单位的,方法为一般单位,成员变量为最小单位

1、源码编译

        是指在Java程序编译的时候,就将所需的类文件编译到了可执行文件中,这些类文件在程序运行时不需要再次加载。又称编译期加载。

        当Java程序被编译成字节码文件(.class文件)时,编译器会将所有的依赖类都编译到字节码文件中。这样,在程序运行时,只需要将字节码文件加载到方法区内存中即可,无需再次加载依赖的类文件。这种方式也称为静态链接或静态绑定。

        不同的Java源文件都会被编译成不同的.class文件,而不是同一个。每个Java源文件都应该被编译成一个独立的.class文件,这个文件包含了该源文件中的类和接口的字节码。

Java源代码编译过程:

1、编译成员变量,

2、在编译构造方法

        java源代码编译时默认执行默认的构造方法(无参),如果没有的话则执行自定义的构造方法

3、编译方法

class字节码文件内容

Java中的.class文件是Java程序的编译结果,其中包含了Java代码的字节码和一些元数据。以下是Java中.class文件中包含的内容:

  1. 魔数(Magic Number):用于标识该文件是否为Java字节码文件。在Java中,该值为0xCAFEBABE。

  2. 版本号:用于标识Java版本。

  3. 常量池(Constant Pool):包含了字节码中用到的各种常量,比如字符串常量、类常量、方法常量等。

  4. 访问标志(Access Flags):用于标识该类的访问级别和属性。

  5. 类信息(Class Information):包含了该类的名称、父类、接口、字段和方法等信息。

  6. 字段信息(Field Information):包含了该类中定义的字段的名称、类型和访问标志等信息。

  7. 方法信息(Method Information):包含了该类中定义的方法的名称、参数、返回值类型和访问标志等信息。

  8. 属性信息(Attribute Information):包含了该类中定义的各种属性的名称、类型和值等信息。

Java中的.class文件是平台无关的二进制文件,可以在任何Java虚拟机上运行。

        源码编译可以提高程序的运行效率,因为它避免了在程序运行时动态加载类所产生的开销。但是,编译期加载的缺点是,它限制了程序的灵活性,因为在编译时就需要确定所有的依赖关系,无法动态地加载新的类。

Java不允许在类体中方法体外直接编写可执行代码,包括输出语句等。

        因为Java是一种面向对象的编程语言,它的主要思想是将程序分解成对象,每个对象包含数据和方法,通过这些方法来操纵数据。因此,在类体中只能定义数据和方法,而不能直接编写可执行代码,因为这样会违反面向对象的设计原则。

        另外,Java的编译过程中会将类体中的成员变量和方法提取出来,生成类的字节码文件。如果在类体中编写可执行代码,编译器就无法将其提取出来,也就无法生成可执行的字节码文件

        如果您需要在类体中编写可执行代码,可以使用静态块或实例块等机制来实现。但是,这种做法并不是很常见,一般情况下还是建议将可执行代码放到方法体内部执行。

2、JVM启动

        虚拟机启动是指当我们启动一个Java应用程序时,操作系统会首先启动JVM,然后JVM会负责解释和执行Java代码。在JVM启动的过程中,会进行一系列的初始化操作,例如加载核心类库、设置系统属性、创建线程等等。

必须加载核心类库

        在JVM启动的过程中,会执行一系列的初始化操作,包括设置系统属性、加载java核心类库 如Object、Class、String等类,这些类被称为启动类(Bootstrap Classes)、创建主线程等等。在初始化完成之后,JVM会启动应用程序的主线程,并且通过类加载器加载应用程序的类。类加载器会根据需要加载类,并将这些类加载到JVM的方法区内存中。

        需要注意的是,类加载器的加载顺序是有规定的,首先会使用启动类加载器(Bootstrap ClassLoader)加载Java核心类库到JVM方法区内存,然后使用扩展类加载器(Extension ClassLoader)加载Java扩展类库到JVM方法区内存,最后使用应用程序类加载器(Application ClassLoader)加载应用程序的类到JVM方法区内存。这个加载顺序保证了类的唯一性,也保证了类的正确性和安全性。

2.1、java核心类库(只有java.lang包自动加载 )

java核心类库是指:rt.jar

核心类库中的核心是指:rt.jar/java.base/java/lang

        在Java中,java.lang包下的类会自动加载,这是因为它们被视为Java语言本身的一部分,属于语言的核心部分。这些类包括ObjectStringException等。Java编译器会自动导入这些类,因此您无需手动导入它们就可以直接使用。

        其他核心类库中的类,如java.utiljava.io等,由于不是语言本身的一部分,因此需要显式地导入才能使用。这是为了避免不必要的资源浪费,因为Java标准库中包含了大量的类和方法,如果所有类都自动加载,会对系统资源造成不必要的负担。此外,这种显式导入的方式也提供了更好的可读性和代码的清晰性,使得开发人员能够清楚地知道代码所使用的类来自哪个包。

Java核心类库中包含了很多常用的类和接口,以下是一些常用的类的例子:

  1. java.lang:全部自动加载,无需显式导入,是Java语言的一个核心包(package),其中包含了Java语言的基本类和接口。这个包在Java程序中自动导入,无需手动导入。(只是java.lang包中的类自动加载,java.lang子包中的类需要显示导入)

    1. java.lang.String:用于处理字符串的类,提供了字符串的各种操作,如连接、截取、替换、大小写转换等。
    2. java.lang.System:是一个包含一些有用的类成员和类方法的工具类,它提供了一些系统级别的操作和信息,比如标准输入输出流、获取系统属性、垃圾回收等。
  2. java.util部分自动加载,需显式导入,提供了Java语言中常用的数据结构和算法,如集合框架、日期和时间处理、随机数生成等。

    1. java.util.ArrayList:用于存储和操作集合元素的类,它可以动态地增加或减少元素,并提供了各种访问、排序、遍历等操作。

    2. java.util.concurrent.ExecutorService:用于管理多线程的执行,可以并发地执行多个任务,并提供了线程池等机制

  3. java.io部分自动加载,需显式导入,提供了Java语言中用于输入和输出的类和接口,如文件处理、网络通信、对象序列化等。

    1. java.io.File:用于操作文件和文件夹的类,提供了创建、读取、写入、删除等文件操作方法。

  4. java.net部分自动加载,需显式导入,提供了Java语言中用于网络编程的类和接口,如Socket、ServerSocket、URL等。

    1. java.net.URL:用于表示统一资源定位符(URL),可以进行网络连接和通信。

  5. java.sql部分自动加载,需显式导入,提供了Java语言中用于数据库编程的类和接口,如JDBC API,用于连接和操作各种关系型数据库。

  6. java.awt部分自动加载,需显式导入,提供了Java语言中的基本图形界面组件和功能,如窗口、按钮、标签、绘图等。

  7. javax.swing部分自动加载,需显式导入,提供了Java语言中的高级图形界面组件和功能,如表格、树形控件、弹出式菜单等。

2.2、java扩展类库(手动加载)

Java扩展类库(Java Extension Libraries)是Java平台提供的一组功能强大、可定制的类库,它们不像Java核心类库那样必须被加载,而是通过Java平台的扩展机制进行加载和使用。可以通过Java的类加载机制进行加载。扩展类库是一些独立的Java库,它们扩展了Java SE API中的功能,例如Java邮件API和Java数据库连接API。如果要使用扩展类库中的类,需要将相应的库文件添加到Java类路径中。

Java扩展类库中包含了很多有用的类和接口,例如:

  1. Java Database Connectivity (JDBC) 扩展类库:用于连接和操作各种关系型数据库,提供了一组标准的接口,可以通过这些接口访问和管理数据库。

  2. Java Cryptography Extension (JCE) 扩展类库:用于实现加密和解密算法,提供了多种加密方式,如对称加密、非对称加密、数字签名等。

  3. Java Servlet API:用于实现基于Java的Web应用程序的开发,提供了一组标准的接口和类,可以处理HTTP请求和响应,构建Web页面和应用程序等。

  4. Java Messaging Service (JMS) 扩展类库:用于实现分布式应用程序之间的消息传递,提供了一组标准的接口和协议,可以在不同的应用程序之间进行消息传递。

  5. Java Naming and Directory Interface (JNDI) 扩展类库:用于实现命名和目录服务,提供了一组标准的接口和协议,可以将分布式应用程序中的资源进行命名和查找。

Java扩展类库提供了丰富的功能和灵活的扩展机制,可以满足不同应用程序的需求。开发者可以通过加载和使用Java扩展类库中的类和接口,快速构建高效、可靠的应用程序。

3、类加载器启动

        在Java程序运行的过程中,类的加载时机可以分为二种,分别是虚拟机启动时加载和运行时加载。它们的含义如下:

  1. 虚拟机启动时加载:在Java虚拟机启动时就将类加载到内存中。这种方式主要是针对一些核心类,如Java核心类库、Java扩展类库等。

  2. 运行时加载:在Java程序运行时动态地将类加载到内存中。这种方式主要是针对用户自定义的类和库中的类。在运行时加载类可以提高程序的灵活性和可扩展性,因为程序可以在运行时根据需要动态地加载和卸载类。

        需要注意的是,类的加载只会发生一次,也就是说,一个类只会被加载一次,不管这个类被引用了多少次。在类被加载之后,JVM会将这个类的信息存放在方法区中,并且在内存中创建一个Class对象,这个Class对象可以用来获取类的信息和访问类的成员。

        Class对象也是保存在方法区中的,Class对象是保存在方法区中的,它描述了一个类的各种信息,并且可以在程序运行时动态地获取和操作类的信息。而类的实例则是在堆中创建的,它保存了这个类的实例数据和相关的成员方法。

类加载原理:

JVM在加载类时,并不会一次性地把整个包中的所有类文件全部加载进来。相反,它是按需动态加载的,即在需要使用某个类的时候,才会加载该类所对应的类文件。这个过程中,JVM会根据类的继承关系和依赖关系来确定需要加载哪些类文件,以及它们的加载顺序。

当一个类第一次被使用时,JVM会尝试查找该类的类文件,如果该类文件还没有被加载,则会触发类加载过程。在类加载过程中,JVM会执行以下步骤:

  1. 加载:在文件系统或网络中查找并读取该类的二进制字节流,将其转换为JVM内部的表示形式,并创建该类的Class对象。

  2. 链接:将该类的二进制字节流合并到JVM的运行时数据区域中,并进行验证、准备和解析等操作,生成符号引用和直接引用。

  3. 初始化:执行该类的静态代码块和初始化语句,为该类的静态变量赋初值。

在类加载过程中,JVM只会加载必要的类文件,并且只会加载一次。如果在后续的执行过程中,再次需要使用该类,则会直接使用已经加载的Class对象,而不会重新加载该类文件。这样可以避免重复加载和浪费内存。

3.1、关于JDK中自带的类加载器(以JDK8说明)

类加载器:ClassLoader,是专门负责加载类的命令/工具

JDK中自带了3个类加载器

  • 启动类加载器:rt.jar
  • 扩展类加载器:ext/*.jar
  • 应用类加载器:CLASSPATH环境变量指定目录

假设有这样一段代码:

String s = "abc";

代码在开始执行之前,会将所需的类全部加载到JVM中。

通过类加载器加载,看到以上代码类加载器会找String.class字节码文件

找到就加载,那么是怎么进行加载的?

  • 首先通过“启动类加载器”加载。
    • 注意:启动类加载器专门加载:C:\Program Files\Java\jdk1.8.0_101\jre\lib\rt.jar中的class文件
    • rt.jar中都是JDK中最核心的类库 

  • 如果通过启动类加载器加载不到的时候,会通过“扩展类加载器”加载
    • 注意:扩展类加载器专门加载:C:\Program Files\Java\jdk1.8.0_101\jre\lib\ext\*.jar

  • 如果“扩展类加载器”没有加载到,那么会通过“应用类加载器”加载
    • 注意:应用类加载器专门加载:CLASSPATH在环境变量中指定的路径加载其中的jar包(class文件)

3.2、双亲委派机制

java中为了保证类加载的安全,使用了双亲委派机制。

优先从启动类加载器中加载,这个称为“父”,“父”无法加载时,再从扩展类加载器中加载,这个称为“母”,双亲委派,如果都加载不到,才会考虑从应用类加载器中加载,直到加载到为止。

4、main主方法执行

        一个Java程序中只能有一个main方法,这是程序的入口点,JVM会从这个方法开始执行程序。java程序中执行一个类时,JVM(Java虚拟机)会寻找这个类的main方法作为程序的入口点。因此,在Java程序执行过程中,首先执行的是main方法。JVM会自动调用main方法,

   public类不是必须的

   main方法必须写在一个类中,这个类的名称可以任意取,如果写在一个public类中,该文件名必须和这个类名相同,并且文件扩展名为.java

        类是一个封装了属性和行为(方法)的单位,main方法是这个类的一个静态方法,它可以访问这个类的静态成员(如静态变量和静态方法),也可以创建这个类的对象来访问它的非静态成员(如非静态变量和非静态方法)。

        因此,为了让main方法能够访问这个类的属性和行为,它必须写在这个类中。同时,Java程序的运行也是从这个类的main方法开始的

        当我们在Java程序中执行一个类时,JVM会先加载这个类对应的.class文件,并且创建一个对应的Class对象。然后,JVM会搜索这个类中是否有一个名为main的静态方法,如果找到了就执行这个方法。因此,main方法所在的类必须已经被加载到方法区内存中,并且可以通过Class对象来访问这个类的静态方法。

七、编译阶段

  • 编译阶段主要的任务是检查Java源程序是否符合Java语法,符合Java语法则能够生产正常的字节码文件(xxx.class),不符合Java语法规则则无法生产字节码文件
  • 字节码文件中不是纯粹的二进制,这种文件无法在操作系统中直接执行
  • 编译阶段的过程:
    • 程序员需要在硬盘的某个位置(任意位置)新建一个.java扩展名的文件,该文件被称为Java源文件,源文件当中编写的是Java源代码/源程序。而这个源程序是不能随意编写,必须符合Java语法规则(语法规则是需要记忆的)
    • Java程序员需要使用JDK当中自带的Javac.exe(Java编译器)命令进行Java程序的编译
      • Javac使用规则:javac java源文件的路径
      • 在DOS命令窗口中使用
      • javac是一个java编译器工具/命令
      • 一个java源文件可以编译生产多个.class文件,一个class类就会有一个.class字节码文件
      • 字节码文件/.class文件是最终要执行的文件,所以说.class文件生成之后,java源文件删除并不会影响java程序的执行(一般不删除,因为.class文件最终执行效果可能不理想,就要修改源文件,重新编译后重新执行)
      • 编译结束之后,可以将.class文件拷贝到其他操作系统上运行(跨平台)

八、运行阶段

JDK安装之后,除了自带一个javac.exe文件之外,还有一个自带的文件java.exe文件

java.exe命令主要负责运行阶段

java.exe使用:

  • 在DOS窗口中使用
  • java.exe使用规则:java 类名
    • 例如:
      • 硬盘上有一个A.class,则使用java A; A为类名
      • 硬盘上有一个B.class,则使用java B;
      • 硬盘上有一个C.class,则使用java C
      • 不能写成java A.class
  • 运行阶段的过程
    • 打开DOS命令窗口
    • 输入 java A
    • java.exe命令会启动Java虚拟机(JVM),JVM会启动类加载器(ClassLoader)
    • ClassLoader会去硬盘上搜索A.class文件,找到该文件后则将该字节码文件装在到JVM中
    • JVM将A.class字节码文件解释成二进制数据
    • 操作系统执行二进制数据并和底层硬件平台进行交互

1、命令行参数运行java

Java 程序需要接受命令行参数,可以在运行时在类名后面添加参数,例如:

java MyProgram arg1 arg2

 其中 MyProgram 是你的 Java 类名,arg1arg2 是传递给程序的命令行参数。

九、hello world

public class HelloWorld{
	public static void main(String[] args){
		System.out.println("HelloWorld!");
	}
}

1、编译Java程序

绝对路径:打开DOS窗口,javac 直接将源文件拖进去  回车即可

相对路径:在源文件所在文件夹打开DOS窗口  javac  文件名.java

2、运行Java程序

首先需要在字节码文件所在目录处打开DOS窗口

一定注意:java命令后面跟的不是文件路径,是一个类名

【JAVA】错误: 找不到或无法加载主类 HelloWorld_GokuCode的博客-CSDN博客

CLASSPATH变量是为类加载器指路的

 CALSSPATH是类加载器特有的

3、编码问题

java 错误: 编码GBK的不可映射字符


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值