前言
第一章、计算机语言发展史
第一代语言:机器语言
- 主要编写二进制码,以打孔机为代表
第二代语言:低级语言
- 主要以汇编语言为代表
- 在低级语言中已经引入了一些英语单词,例如变量赋值
第三代语言:高级语言
- 几乎和人类的语言完全相同,即使是没有学习过计算机编程,只要看到这段代码就知道该代码完成什么功能,例如: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 的设计哲学主要包括以下几个方面:
-
简单性(Simplicity):Java 设计追求简单性,尽可能简化语言的规范和语法,使得初学者能够更轻松地学习和掌握它。Java 的语法借鉴了 C 和 C++,但是去除了一些容易引起错误和混乱的特性,使得代码更易于阅读和理解。
-
面向对象(Object-Oriented):Java 是一种纯粹的面向对象编程语言,它支持封装、继承和多态等面向对象的概念。这使得 Java 代码更具有灵活性和可扩展性,便于编写复杂的软件系统。
-
平台无关性(Platform-Independence):Java 被设计为一种具有平台无关性的语言,这意味着编写的 Java 程序可以在不同的操作系统和硬件平台上运行。这是通过 Java 虚拟机(JVM)实现的,它允许 Java 程序在不同的平台上以相同的方式运行。
-
安全性(Security):Java 的设计注重安全性,它提供了许多安全特性来保护系统免受恶意代码的攻击。Java 的安全模型包括字节码验证、安全沙箱、安全类库等特性,这些特性使得 Java 成为一种安全可靠的编程语言。
-
可移植性(Portability):由于 Java 的平台无关性,它具有很高的可移植性。Java 程序可以在任何支持 Java 虚拟机的平台上运行,而不需要针对特定的操作系统或硬件进行重新编译。
-
高性能(Performance):尽管 Java 是一种解释型语言,但是它通过即时编译器(Just-In-Time Compiler,JIT)提高了代码的执行效率。Java 虚拟机通过动态优化技术提高了代码的执行速度,使得 Java 程序可以达到接近原生代码的性能水平。
Java 的设计哲学使得它成为一种功能强大、易学易用、安全可靠且具有高性能的编程语言,广泛应用于企业级应用开发、移动应用开发、云计算等各个领域。
三、安装java
1、JDK8安装
2、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 的安装目录中,常见的目录结构及其作用如下:
-
bin 目录:包含了可执行的二进制文件,如
java
和javac
等。这些命令是用来运行 Java 程序和编译 Java 源代码的。 -
lib 目录:包含 Java 运行时所需的核心类库文件。这些文件是 Java 程序运行所必需的基本类库。
-
conf 目录:存放了 Java 配置文件,可以用来配置 Java 运行时的各种参数和选项。这些配置文件可以用来控制 Java 虚拟机的行为,如内存管理、类加载器设置等。
-
include 目录:主要包含了一些用于本地方法调用(JNI)的头文件,这些头文件用于在 Java 中调用本地系统的一些特定功能。
-
jre 目录:这是 Java Runtime Environment(JRE)的子目录,包含了用于在计算机上运行 Java 程序所需的类库和虚拟机。在 JDK 安装中,该目录通常是一个子模块,而在 JRE 安装中则是主要部分。
-
jmods目录:这是在Java 9及更高版本中引入的目录,它包含了Java平台模块的文件。Java平台模块是用于将Java SE分解为互不依赖的一组模块的概念。在
jmods
目录中,您可能会找到一些以.jmod
为扩展名的文件,这些文件包含了Java模块的信息。 -
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文件中包含的内容:
魔数(Magic Number):用于标识该文件是否为Java字节码文件。在Java中,该值为0xCAFEBABE。
版本号:用于标识Java版本。
常量池(Constant Pool):包含了字节码中用到的各种常量,比如字符串常量、类常量、方法常量等。
访问标志(Access Flags):用于标识该类的访问级别和属性。
类信息(Class Information):包含了该类的名称、父类、接口、字段和方法等信息。
字段信息(Field Information):包含了该类中定义的字段的名称、类型和访问标志等信息。
方法信息(Method Information):包含了该类中定义的方法的名称、参数、返回值类型和访问标志等信息。
属性信息(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语言本身的一部分,属于语言的核心部分。这些类包括Object
、String
、Exception
等。Java编译器会自动导入这些类,因此您无需手动导入它们就可以直接使用。
其他核心类库中的类,如java.util
、java.io
等,由于不是语言本身的一部分,因此需要显式地导入才能使用。这是为了避免不必要的资源浪费,因为Java标准库中包含了大量的类和方法,如果所有类都自动加载,会对系统资源造成不必要的负担。此外,这种显式导入的方式也提供了更好的可读性和代码的清晰性,使得开发人员能够清楚地知道代码所使用的类来自哪个包。
Java核心类库中包含了很多常用的类和接口,以下是一些常用的类的例子:
java.lang:全部自动加载,无需显式导入,是Java语言的一个核心包(package),其中包含了Java语言的基本类和接口。这个包在Java程序中自动导入,无需手动导入。(只是java.lang包中的类自动加载,java.lang子包中的类需要显示导入)
- java.lang.String:用于处理字符串的类,提供了字符串的各种操作,如连接、截取、替换、大小写转换等。
- java.lang.System:是一个包含一些有用的类成员和类方法的工具类,它提供了一些系统级别的操作和信息,比如标准输入输出流、获取系统属性、垃圾回收等。
java.util
:部分自动加载,需显式导入,提供了Java语言中常用的数据结构和算法,如集合框架、日期和时间处理、随机数生成等。
java.util.ArrayList:用于存储和操作集合元素的类,它可以动态地增加或减少元素,并提供了各种访问、排序、遍历等操作。
java.util.concurrent.ExecutorService:用于管理多线程的执行,可以并发地执行多个任务,并提供了线程池等机制
java.io
:部分自动加载,需显式导入,提供了Java语言中用于输入和输出的类和接口,如文件处理、网络通信、对象序列化等。
java.io.File:用于操作文件和文件夹的类,提供了创建、读取、写入、删除等文件操作方法。
java.net
:部分自动加载,需显式导入,提供了Java语言中用于网络编程的类和接口,如Socket、ServerSocket、URL等。
java.net.URL:用于表示统一资源定位符(URL),可以进行网络连接和通信。
java.sql
:部分自动加载,需显式导入,提供了Java语言中用于数据库编程的类和接口,如JDBC API,用于连接和操作各种关系型数据库。
java.awt
:部分自动加载,需显式导入,提供了Java语言中的基本图形界面组件和功能,如窗口、按钮、标签、绘图等。
javax.swing
:部分自动加载,需显式导入,提供了Java语言中的高级图形界面组件和功能,如表格、树形控件、弹出式菜单等。
2.2、java扩展类库(手动加载)
Java扩展类库(Java Extension Libraries)是Java平台提供的一组功能强大、可定制的类库,它们不像Java核心类库那样必须被加载,而是通过Java平台的扩展机制进行加载和使用。可以通过Java的类加载机制进行加载。扩展类库是一些独立的Java库,它们扩展了Java SE API中的功能,例如Java邮件API和Java数据库连接API。如果要使用扩展类库中的类,需要将相应的库文件添加到Java类路径中。
Java扩展类库中包含了很多有用的类和接口,例如:
Java Database Connectivity (JDBC) 扩展类库:用于连接和操作各种关系型数据库,提供了一组标准的接口,可以通过这些接口访问和管理数据库。
Java Cryptography Extension (JCE) 扩展类库:用于实现加密和解密算法,提供了多种加密方式,如对称加密、非对称加密、数字签名等。
Java Servlet API:用于实现基于Java的Web应用程序的开发,提供了一组标准的接口和类,可以处理HTTP请求和响应,构建Web页面和应用程序等。
Java Messaging Service (JMS) 扩展类库:用于实现分布式应用程序之间的消息传递,提供了一组标准的接口和协议,可以在不同的应用程序之间进行消息传递。
Java Naming and Directory Interface (JNDI) 扩展类库:用于实现命名和目录服务,提供了一组标准的接口和协议,可以将分布式应用程序中的资源进行命名和查找。
Java扩展类库提供了丰富的功能和灵活的扩展机制,可以满足不同应用程序的需求。开发者可以通过加载和使用Java扩展类库中的类和接口,快速构建高效、可靠的应用程序。
3、类加载器启动
在Java程序运行的过程中,类的加载时机可以分为二种,分别是虚拟机启动时加载和运行时加载。它们的含义如下:
-
虚拟机启动时加载:在Java虚拟机启动时就将类加载到内存中。这种方式主要是针对一些核心类,如Java核心类库、Java扩展类库等。
-
运行时加载:在Java程序运行时动态地将类加载到内存中。这种方式主要是针对用户自定义的类和库中的类。在运行时加载类可以提高程序的灵活性和可扩展性,因为程序可以在运行时根据需要动态地加载和卸载类。
需要注意的是,类的加载只会发生一次,也就是说,一个类只会被加载一次,不管这个类被引用了多少次。在类被加载之后,JVM会将这个类的信息存放在方法区中,并且在内存中创建一个Class对象,这个Class对象可以用来获取类的信息和访问类的成员。
Class对象也是保存在方法区中的,Class对象是保存在方法区中的,它描述了一个类的各种信息,并且可以在程序运行时动态地获取和操作类的信息。而类的实例则是在堆中创建的,它保存了这个类的实例数据和相关的成员方法。
类加载原理:
JVM在加载类时,并不会一次性地把整个包中的所有类文件全部加载进来。相反,它是按需动态加载的,即在需要使用某个类的时候,才会加载该类所对应的类文件。这个过程中,JVM会根据类的继承关系和依赖关系来确定需要加载哪些类文件,以及它们的加载顺序。
当一个类第一次被使用时,JVM会尝试查找该类的类文件,如果该类文件还没有被加载,则会触发类加载过程。在类加载过程中,JVM会执行以下步骤:
加载:在文件系统或网络中查找并读取该类的二进制字节流,将其转换为JVM内部的表示形式,并创建该类的Class对象。
链接:将该类的二进制字节流合并到JVM的运行时数据区域中,并进行验证、准备和解析等操作,生成符号引用和直接引用。
初始化:执行该类的静态代码块和初始化语句,为该类的静态变量赋初值。
在类加载过程中,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 类名,arg1
和 arg2
是传递给程序的命令行参数。
九、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是类加载器特有的