Hello Java
1、一般考虑开发效率的情况下可以使用IDE集成开发环境工具,目前练习一天采用的是记事本之类的文本编辑工具,Centos下使用的是vi/vim
2、创建一个文本文件修改名称为Hello.java
3、Java是一个面向对象的编程语言,所以编写程序的开始就是定义类的开始,如果类是public类型的类,则类名称必须和文件名称一致(不包括后缀,包括大小写)
public class Hello //public class是系统定义的关键字,用于声明定义一个类;Hello是用户自定义的类名称,如果是public类则类名称和文件名称一致,包括大小写,{}中用于用户自定义程序
{
public static void main(String[] args){ //定义程序执行的起始点,注意方法签名是固定的,如果写错任何一个地方则程序不能正常执行
System.out.println("Hello Java!");//程序的执行逻辑。在Java中语句以;收尾,System.out.println用于实现在屏幕上输出字串内容,所谓的字串就是引号中所包含的字符序列
}
}
4、在命令行下执行编译,编译操作可以将程序.java转换为后缀为.class的二进制文件(字节码文件)。名称和源代码文件一致,只是后缀为.class的二进制文件。
如果有语法错误则返回文本编辑工具进行修改,直到编译通过生成一个.class文件,文件名称和.java名称一致
javac.exe就是编译器
javac Hello.java【源代码文件名称]编译,将源代码转换为虚拟机可以识别的中间性质语言,一般生成一个同名的后缀为class的文件【二进制文件,字节码文件】,这里就是跨平台的原理】
5、执行程序,语法为java 类名称。例如java Hello,注意这里是类名称,不是文件名称,所以没有后缀.class
java.exe就是解释器
Java文件的类型
Java文件的类型有两种:
-
扩展名为java的文件:是Java源文件,属于编译之前的纯文本文件,存储java源代码
-
扩展名为class的文件:是Java类文件,属于编译之后的二进制文件,存储字节码。
Java的编译运行原理
首先编写java源文件,然后编译成class类文件【javac,ML文件–跨平台】,然后通过虚拟机解释成机器码到硬件执行。
Java既不是完全编译型,也不是完全解释型,是半编译半解释的。特殊例外。
Java语言区分大小写:不管是数据还是标识符或者关键字都区分大小写,例如public不能写成Public,“abc”不能写成“ABC”,inti不能写成INTI等
main方法作用:这是程序的入口方法,是由虚拟机自动调用的----方法签名不能出错,否则程序不能运行
public static void main(String[] args)
java虚拟机与运行平台
java程序语言必须先经过编译,然后再利用解释的方式来运行。一个java程序先要使用编译器compile将其转化成与平台无关(Windows、DOS或Linux操作系统就是一种平台)的机器码,把这种机器码称为字节码byte-codes。然后通过解释器interpreter可以解释并运行java的字节码
Java能够解决互联网应用的安全和可移植性的关键在于Java编译器的编译结果不是可执行代码,而是字节码。字节码是一系列设计用来由名为Java虚拟机的Java运行时系统执行的高度优化的指令。Java虚拟机值一个字节码的解释器。
字节码的执行的三个大步骤
由类装载器负责把类文件加载到java虚拟机中,在此过程需要检验该类文件是否符合类文件规范
字节码校验器检查该类文件的代码中是否存在着某些非法操作
如果字节码校验器检验通过,由java解释器负责把该类文件解释成为机器码进行执行
java虚拟机采用的是沙箱运行模式,即把java程序的代码和数据都限制在一定内存空间里执行,不允许程序访问该内存空间外的内存
总结Java虚拟机中类加载的过程:系统会通过加载、连接、初始化三步来实现这个类进行初始化。
链接包括验证、准备以及解析三个阶段。(1)验证阶段。主要的目的是确保被加载的类满足Java虚拟机规范,不会造成安全错误。(2)准备阶段。负责为类的静态成员分配内存,并设置默认初始值。(3)解析阶段。将类的二进制数据中的符号引用替换为直接引用。
java字节码特性的最大的好处就是可以使java开发的程序跨平台运行,也就是说只要某种平台上配备了java虚拟机,它就可以运行java的字节码文件。“一次编写,到处运行”就是对java语言特性的极好描述