一、开发第一个java程序:HelloWorld
1.1、程序写完之后,一定要Ctrl+s进行保存
新建一个文件,后缀改为.java
// 这是一个类,类名叫做HelloWorld
public class HelloWorld{
public static void main(String[] args){
System.out.println("Hello World");
}
}
需要注意的是:java源代码只要修改,必须重新编译。
重新编译生成新的class字节码文件。
1.2、编译阶段
1.2.1怎么编译?配置path
需要使用的命令是:C:\Program Files\Java\jdk-14.0.2\bin\javac.exe
javac命令后加*加文件的末尾字母,可自动匹配到具有相同末尾的文件,一次性编译多个文件。
这个命令需要先测试一下,打开DOS命令窗口,看看javac命令是否可用,
这说明:windows操作系统没有发现“javac.exe"在哪里。
为什么ipconfig、ping等命令可以使用呢?为什么javac用不了?
我们发现windows操作系统中有这样一个环境变量,名字叫做:path
并且发现path环境变量的值是:
发现在:C:\windows\system32这个目录下存在:ipconfig.exe
注意:修改完环境变量之后,DOS命令窗口必须关闭重新打开才会起作用。
将path环境变量中的:C:\windows\system32;删除之后再测试:
配置环境变量path的步骤:
桌面计算机上右键–>属性–>高级系统设置–>环境变量
怎么修改path环境变量?
找到path,鼠标双击!!!
path环境变量当中都是路径,路径和路径之间必须采用“半角的分号”(win7)(英文分号)
让javac.exe能用,将以下路径配置到path中
C:\Program Files\Java\jdk-14.0.2\bin
注意:环境变量包括“系统变量”和“用户变量”
系统变量:范围比较大,系统变量会让计算机所有用户都起作用。
用户变量:范围比较小,这个变量只作用于当前用户。
优先从用户变量开始寻找。
怎么查看编译器版本?
怎么查看java虚拟机版本?
问题1:path环境变量的作用是什么?
path环境变量的作用就是给windows操作系统指路的,告诉windows操作系统去哪里找这个命令文件。
path环境变量中有很多很多的路径,路径和路径之间用半角分号分隔。
path=A;B;C;D…
path是环境变量的名字。
A;B;C;D…是环境变量path的值。
问题2:path环境变量是java中的机制,还是windows操作系统中的机制?path环境变量是隶属于java的吗?path环境变量和java有关系吗?
path环境变量本质上是隶属于windows操作系统的,和java没有关系, java只不过用了一下path环境变量。
path环境变量中的路径可以指定多个。
---------------------------------------------------------------------
javac命令怎么用?
语法格式:
javac java源文件的路径
什么是java源文件?
java源文件的名字以“.java"结尾,该文件中写了java源代码。
java源文件的路径是什么意思?
注意:路径永远包括绝对路径和相对路径。
注意:
把java源文件直接拖进到DOS命令窗口,那么DOS命令窗口就有这个路径了。
绝对路径,直接生成在该文件夹中生成了字节码文件。
相对路径,直接生成在该文件夹中生成了字节码文件。
注意:怎么在DOS命令窗口中快速定位到某个路径?
打开计算机–>打开一些文件–>在地址栏上直接输入cmd回车就OK了。
新开了一个DOS命令窗口。
编译报错的时候不会生成字节码文件。
1.3、运行阶段
运行的前提是:class文件(字节码)生成了。没有字节码文件程序是无法运行的。
重点重点重点重点!!!!!!!
假设该文件的名字叫做:HelloWorld.class
那么HelloWorld被称为?????
HelloWorld就是一个类名。
如果文件名是Test.class,那么:Test就是一个类名。
怎么运行,使用哪个命令?
使用JDK的bin目录下的:java.exe命令来运行。
先在DOS命令窗口中测试java.exe这个命令是否可用!!!
java -version
"java.exe"这个命令怎么用,语法格式是什么?
java 类名
千万要注意:java这个命令,后面跟的是“类名”,而绝对不能跟“文件路径”,因为java命令后面跟的不是文件,而是一个“类名”。
对于这个字节码:Test.class,应该:java Test
对于这个字节码:A.class,应该:java A
对于这个字节码:Hello.class,应该java Hello
…
运行java程序需要哪些步骤呢?
第一步(必须这样做):先使用cd命令切换到文件所在的路径。
第二步:执行
切记:
java命令后面只要是跟路径,就一定不行。
java命令后面只能跟类名。
二、“java HelloWorld”的执行过程以及原理
E:\Java学习\java代码编写>java HelloWorld
敲完回车,都发生了什么????
第一步:会先启动JVM(java虚拟机)
第二步:JVM启动后,JVM会去启动“类加载器classloader“
类加载器的作用:加载类的。本质上类加载器负责去硬盘上找“类”对应的“字节码”文件。
假设是“java HelloWorld”,那么类加载器会去硬盘上搜索:HelloWorld.class文件。
假设是“java Test”,那么类加载器会去硬盘上搜索:Test.class文件。
…
第三步:类加载器如果在硬盘上找不到对应的字节码文件,会报错。
类加载器如果在硬盘上找到了对应的字节码文件,类加载器会将该字节码文件装载到JVM当中,JVM启动“解释器”将字节码解释为“10001001000…"这种二进制码,操作系统执行二进制码和硬件交互。
默认情况下,类加载器去硬盘上找“字节码”文件的时候,会默认从当前路径下 找。
问题:能不能给类加载器指定一个路径,让类加载器去指定的路径下加载字节码文件。
答案:可以的。但是我们需要设置一个环境变量,叫做:classpath
classpath是一个环境变量,是给“类加载器”指路的。
classpath环境变量不属于windows操作系统,而是隶属于java。
classpath=A路径;B路径;C路径…
classpath是一个变量名
A路径;B路径;C路径…是变量值。
配置classpath,这个环境变量在windows中没有,需要新建!!!
计算机–>右键–>属性–>高级系统设置–>环境变量–>新建…
注意:变量名不能随意写:大小写无所谓,但必须叫做:classpath
目前随意配置一个:(配置后需重启DOS命令窗口)
必须理解classpath环境变量的作用是什么?
是给类加载器指路的。
在没有配置环境变量classpath的时候,默认从当前路径下加载。
在配置了环境变量classpath之后,就只能从指定的路径下加载了。
三、注释
三种注释方式
1、//单行注释
2、/*
多行注释
/
3、/*
*javadoc注释:这里的注释信息可以自动被Javadoc.exe命令解析提取并生成到帮助文档当中。
*/
/*
1、什么是注释,有什么用?
注释是对java源代码的解释说明。
注释可以帮程序员更好的理解程序。
2、注释信息只保存在java源文件当中,java源文件编译生成的字节码class文件,
这个class文件中是没有这些注释信息的。
3、在实际的开发中,一般项目组都要求积极的编写注释。这也是一个java软件工程师
的基本素养。
4、注释不是写的越多越好,精简,主线清晰,每个注释都应该是点睛之笔。(以后慢慢锻炼)
*/
// 这种注释属于单行注释,只注释两个斜杠后面的
/**
* 类的注释信息
* @version 1.0
* @author bjpowernode-dujubin
* ....
*/
public class HelloWorld{ // 这是一个类,类名叫做HelloWorld
public static void main(String[] args){
System.out.println("Hello World");
}
}
/*
在这里可以编写多行注释
这是一行注释
这是第二行注释
这是第三行注释
*/
/*
1、在java中任何有效的代码必须写到“类体”当中,最外层必须是一个类的定义。
2、public表示公开的,class表示定义一个类,Test是一个类名。类名后面必须是
一对大括号,这一对大括号被称为“类体”
3、大括号必须是成对的,并且建议都要成对编写,这样才不会掉。
{}
[]
()
4、什么时候代码缩进?
我包着你,你就比我低一级,你就需要缩进。
没有合理的缩进,代码可读性很差。
或者也可以这些想,大括号里的都需要缩进。
缩进就是可读性问题,不缩进也不影响程序的编译和执行。
通常可以按一下tab键缩进
*/
public class Test{ //声明/定义一个公开的类,起个名字叫Test
//类体
//整个这一块的代码被称为:main方法(程序的入口,sun公司java语言规定的)
//也就是说:JVM在执行程序的时候,会主动去找这样一个方法。没有这个规格的方法,程序是无法运行的。
//main方法也可以叫做主方法。
//注意:方法必须放到“类体”中,不能放到“类体”外面。
//任何一个程序都要有一个入口,没有入口进不来,无法执行。
//类体当中应该是方法,而不是直接的java语句,
//直接在类体中写java语句,不是不运行,是编译报错。编译过不去,运行肯定不行。
public static void main(String[] args){ //这是一个入口方法。
//注意:args可以改名字,随意,对于主方法来说只有这个位置可以改,其他位置不能动。
//方法体
//注意:方法体由一行一行的“java语句”构成。
//重要的是:任何一条java语句必须以“;”结尾,英文分号。
//";"代表 一条语句的结束。
//非常重要的是:方法体中的代码遵循自上而下的顺序依次逐行执行。
//main方法中什么也不写也是可以编译和运行的。
System.out.println("Test1");
//System.out.println();这行代码的作用是向控制台输出一句话。
//注意:如果println后面小括号里的内容是一个“字符串”的话,必须使用英文双引号括起来。
//双引号也要成对儿写。""
//()里可以直接添加数字,不用加双引号。
//()里数字加双引号后,和不加双引号性质是不一样的:一个是字符串,一个是数字。
//但最终输出到控制台上一个样子,没啥区别。
//()里对于数字来说能进行加减乘除。
System.out.println("Test2");
}
//能再来一个一模一样的入口吗?
//不行,有语法错误
/*
public static void main(String[] args){
}
*/
//方法2
//现在不执行不代表以后不执行,以后我们学习其他语法让他执行。
public static void main2(String[] args){
System.out.println("hello");
}
//方法3
//方法4
}
/*
1、这个内容没有为什么,只能经过测试,然后根据测试结果进行记忆。
2、第一个结论
一个java源文件中可以定义多个class。并在编译后自动生成这多个class文件。
3、第二个结论
public的类不是必须的。可以没有。
4、第三个结论
在源文件中只要有一个class的定义,那么必然会对应生成一个class文件。
5、第四个结论
public的类可以没有,但如果有的话,public修饰的类名必须和源文件名保持一致。
6、第五个结论
public的类也只能有一个。
*/
class A{
}
class B{
}
class C{
}
class D{
}