# java_workspace **Repository Path**: li-kewei123/java_workspace ## Basic Information - **Project Name**: java_workspace - **Description**: 通过学习Java系列的技术完成应用软件的开发,我们需要掌握Java编程语言以及Java系列的技术。 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2022-06-15 - **Last Updated**: 2023-07-04 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ``` 845集,169天看完,每天至少4集 最后来补充:P1到P17集,17集已看完 2023年3月15日(7集):P160搞定、P161搞定、P162搞定、P163搞定、P164搞定、P165搞定、P201搞定 2023年3月16日(5集):P166搞定、P167搞定、P168搞定、P169搞定、P170搞定、 2023年3月17日(7集):P171搞定、P172搞定、P173搞定、P174搞定、P175搞定、P176搞定、P177搞定 2023年3月18日(6集):P178搞定、P179搞定、P180搞定、P181搞定、P182搞定、P183搞定 2023年3月19日(7集):P184搞定、P185搞定、P186搞定、P187搞定、P188搞定、P189搞定、P190搞定 2023年3月20日(4集):P191搞定、P192搞定、P193搞定、P194搞定 2023年3月21日(8集):P195搞定、P196搞定、P197搞定、P198搞定、P199搞定、P204集 P205集、P206集 2023年3月22日(集): ``` # 第一章 Java开发环境的搭建 ## 7、classpath ``` 属于java的环境变量,是给用dos窗口运行java文件时的路径,是负责在运行阶段中,类加载器去电脑上找class文件的路径。 就好比Windows上面的path路径一样,去找javac编译器一样。 如果创建了classpath路径的话,就不用在dos窗口里面运行java文件时更改路径了。 创建方法:在用户变量里面新建变量----取名为classpath-----值为要运行的java程序所在目录。 ``` ``` 1、打开DOS命令窗口,执行java HelloWorld,执行原理? java.exe命令会启动JVM JVM启动之后会启动类加载器ClassLoader ClassLoader会在硬盘上的某个位置搜索HelloWorld.class字节码文件 找到该文件则执行 找不到该文件就报错 2、疑问:ClassLoader是在哪个位置上搜索HelloWorld.class字节码文件的? 默认情况下,ClassLoader从当前路径下加载xxx.class字节码文件 当然,也可以让ClassLoader去某个指定路径下加载字节码文件,这时要配置环境变量classpath classpath环境变量属于java语言中的环境变量,不属于windows操作系统【PATH环境变量属于操作系统】 classpath是给classLoader类加载器指路的。 设置这样的环境变量:classpath=D:\workspace\java_workspace\Project\JavaSE 打开dos命令窗口在任意位置,都可以执行:java HelloWorld classpath环境变量没有配置的话,类加载器默认从当前路径下找字节码文件, 当classpath环境变量配置为某个指定的路径之后,类加载器只去指定的路径当中加载class字节码文件。 所以, 每一次执行.class程序的时候,需要在DOS命令窗口中先切换到.class字节码文件所在的路径下。 然后运行。 ``` ![1678861404413](images\java0003.png) ```java 3、我们一起来研究一下:“java HelloWorld”的执行过程以及原理。 D:\course\JavaProjects\02-JavaSE\chapter01>java HelloWorld 敲完回车,都发生了什么????? 第一步:会先启动JVM(java虚拟机) 第二步:JVM启动之后,JVM会去启动“类加载器classloader” 类加载器的作用:加载类的。本质上类加载器负责去硬盘上找“类”对应的“字节码”文件。 假设是“java HelloWorld”,那么类加载器会去硬盘上搜索:HelloWorld.class文件。 假设是“java Test”,那么类加载器会去硬盘上搜索:Test.class文件。 ....... 第三步: 类加载器如果在硬盘上找不到对应的字节码文件,会报错,报什么错? 错误: 找不到或无法加载主类 类加载器classloader如果在硬盘上找到了对应的字节码文件,类加载器会将该字节码文件装载到JVM当中,JVM启动“解释器”将字节码解释为“101010000...”这种二进制码,操作系统执行二进制码和硬件交互。 问题????? 默认情况下,类加载器去硬盘上找“字节码”文件的时候,默认从哪找???? 默认情况下类加载器(classloader)会从当前路径下找。 此处应该有疑问,你可以提出哪些问题???? 能不能给类加载器指定一个路径,让类加载器去指定的路径下加载字节码文件。 答案:可以的。但是我们需要设置一个环境变量,叫做:classpath classpath是一个环境变量,是给谁指路的? 答案:是给“类加载器”指路的。 classpath环境变量不属于windows操作系统,classpath环境变量隶属于java。 classpath环境变量是java特有的。与windows操作系统无关。 classpath=A路径;B路径;C路径..... classpath是一个变量名 A路径;B路径;C路径.....是变量值 classpath环境变量配不配都行,只是切来切去比较麻烦。 classpath是不会和之前配置的java HelloWorld.java中的环境变量冲突的,classpath是独立的。 我们把classpath配置一下,这个环境变量在windows中没有,需要新建!!!! 计算机-->右键-->属性-->高级系统设置-->环境变量-->系统变量-->新建... 注意:变量名不能随意写:大小写无所谓,但必须叫做:classpath CLASSPATH ClassPath Classpath classpath 都行。 我目前是随意配置的:(重启CMD) classpath=D:\course 非常重要的一个特点,必须记住: 配置了classpath=D:\course之后,类加载器只会去D:\course目录下找“xxx.class”文件 不再从当前路径下找了。 结论是: 到目前为止:classpath环境变量不需要配置。 但你必须理解classpath环境变量是干什么的!!!! 你一定要理解classpath环境变量的作用是什么? 是给类加载器指路的。 在没有配置环境变量classpath的时候,默认从当前路径下加载。 如果配置了环境变量classpath的话,就只能从指定的路径下加载了。 path java_home classpath,这3个环境变量path需要配置,后面两个暂时不配置。 ``` ## 10、对HelloWorld程序的解释说明 ### 10.1 类体概念的说明及缩进 ```java 1、在java中任何有效的代码必须写到“类体”当中,最外层必须是一个类的定义。 后期会学包的声明:package、import等写到包的外面。 2、什么是类体 public表示公开的,class表示定义一个类,HelloWorld是一个类名, 类名后面必须是一对大括号,这一对大括号被称为“类体” 声明/定义一个公开的嘞,起个名字叫HelloWorld,即HelloWorld是一个类名。 public class HelloWorld{//类体}//有些空格是不能省略的 3、大括号必须是成对的。并且建议都要成对编写,这样才不会丢掉。{} [] () 都需要成对写 4、什么时候代码缩进 我包着你,你就比我低一级。你就需要缩进。 没有合理的缩进,代码可读性很差。 或许也可以这样说,大括号里的都需要缩进。 有的使用Tab键,有的缩进三个空格,有的缩进4个空格。 SHift+Tab是左缩进,Tab是右缩进 缩进就是可读性问题,不缩进也不影响程序的编译和执行 ``` ### 10.2 类体解释说明 ```java 1、类体里面所有的代码被称为:main方法----->程序的入口,SUN公司java语言规定的 2、也就是说,JVM在执行程序的时候,会自动去找这样一个方法。 没有这个规格的方法,程序是无法执行的。 3、main方法也可以叫主方法。 4、注意:方法必须放到“类体”中,不能放到“类体”外面。 类体里面包含方法。 5、注意,如果在java文件中,只声明了类,没有写主方法,是可以进行编译的,但是运行的时候会报错。 报错信息是找不到main方法,这是在jdk10以后的才有的智能错误提示,之前是没有的。 提示需要定义一个main方法---->来提供入口。 ``` ![1679378898411](D:\workspace\java_workspace\images\java0006.png) ``` 6、main方法中如果不写public。 没有语法错误,能够编译通过,但是不能运行,因为没有main方法。 main方法中定义的时候,缺少了public公开的。 以下程序可以可以编译通过,但是无法运行,符合语法规则。 ``` ![1679379553638](images\java0007.png) ```java 7、总结 任何一个程序必须要有入口,没有入口是运行不了的,进不去,就执行不了。 8、注意:不能定义一模一样的入口方法,编译会不通过的,会报错,有语法错误,编译会不通过。 9、但是可以写不同的类名,定义不同的方法 public class Test{ //类体:类体里面放方法 //方法1:这是入口方法 public static void main(String[] args){ System.out.printf("HelloWorld1"); //方法体:由一行一行的java语句构成 //并且非常重要的是任何一条java语句必须以英文分号结尾,不能是中文分号。 //中文分号是会报错的。分号代表一条语句的结束。 // 重要:方法体中的代码遵循自上而下的顺序依次逐行执行。 } //方法2:注意不能和方法1中一模一样的入口方法 //方法3: //方法4: //是可以编译通过的,但是运行这样只会运行方法1 //方法不执行不代表以后不执行,以后我们学习其他语法让他执行。 public static void main4(String[] args){ System.out.printf("HelloWorld4");//这行代码的作用:向控制台输出一句话。 System.out.printfIn("HelloWorld4");//字符串的话,必须使用英文双引号括起来,成对写,必须的 } } ```