JAVA初探
JAVA初探
Java具有可移植性,一次编写,到处运行
简单、面向对象、可移植性、高性能、分布式(URL)、动态性(反射)、多线程、安全性、健壮性
Java的工作方式
源代码
使用既定协议创建一个源文件,即用Java语言写实现功能的代码
编译器
编译你写的文件,它会检查你文件中的错误,直到你修改到它认为可以编译时,将你的代码进行编译
输出
编译器根据你写的文件,编译为java字节码输出,这种字节码可以在任何能够运行java语言的设备上使用。
虚拟机
读取并运行你的字节码,其他人的电子设备中有一个用软件实现的java虚拟机(JVM),对你的字节码进行读取。
当你写好源代码,保存为.java文件后,运行javac(编译器应用)编译你的文件,如果没有错误,将会得到字节码组成的.class文件并输出。.class文件在你启用虚拟机后,虚拟机把该文件转换为底层平台理解的某种代码,运行实现你的程序。
Java简史
Java于1996年1月23日首次发布,也有人说这是Java从之前的困境解脱出来。时至今日,Java语言一直不断发展,Java的API也大幅扩展。所以有较老的Java代码也有较新的Java代码,但他们都可以在JVM上运行,这是Java的向后兼容性,Java也因此而闻名
Java的诞生离不开C语言和C++,C++是在C语言的基础上改造的,后来 Sun 公司又对 C++ 进行改写,产生了 Java。也可以说Java源自于C和C++。
JVM:Java的虚拟机(Java Virtual Machine)即Java实际运行机器。它可以在代码运行时优化代码,所以你写的代码可能性能不高,但它可以非常快的创建。
Java是在JVM虚拟机上运行的,编译后产生.class中间字节码文件运行在Java虚拟机上,经过解释才放到真实机器上运行的。而C/C++是CPU直接运行的,直接运行在机器上。所以运行速度C/C++(.exe)>java(.class)>JVM>机器。尽管Java语言的运行速度不是最快,但人们认为它与C和Rest等语言的速度不相上下,而且比大多语言的速度还要快。不过与C和Rest相比,Java需要大量内存。
Java版本的命名约定很混乱,有JDK1.0、 1.2、 1.3、 1.4,然后到2SE 5.0、 Java6、 Java7、 Java8······。技术上讲,Java SE 5.0实际上就是Java 1.5。同样的,6(1.6)、7(1.7)和8(1.8)也是如此,6就是Java 1.6,7对应Java 1.7,8对应Java 1.8。理论上,Java仍处于1.x版本,因为新版本是向后兼容的,所有版本最终都能与1.0兼容。
不过,版本号与所有人使用的版本名不同,这会让人有些困惑,所以从Java9开始,之后的官方版本号只有数字,而没有前面的“1”。也就是说,Java9就是版本9,而不是版本1.9。从2017年9月发布Java9以来,每6个月就会发布一个Java版本,会有一个新的“主”版本号!
Java三大版本
JavaSE:标准版(桌面程序,控制台开发······)
JavaME:嵌入式开发(手机,小家电······)卒
JavaEE:E企业级开发(web端,服务器开发······)
JDK、JRE、JVM
JDK(Java Development Kit) 是整个JAVA的核心,包括了Java运行环境(Java Runtime Envirnment),一堆Java工具(javac/java/jdb等)和Java基础的类库(即Java API 包括rt.jar)。
JDK是java开发工具包,基本上每个学java的人都会先在机器 上装一个JDK,那他都包含哪几部分呢?在目录下面有 六个文件夹、一个src类库源码压缩包、和其他几个声明文件。其中,真正在运行java时起作用的 是以下四个文件夹:bin、include、lib、 jre。有这样一个关系,JDK包含JRE,而JRE包 含JVM。
bin:最主要的是编译器(javac.exe)
include:java和JVM交互用的头文件
lib:类库
jre:java运行环境
(注意:这里的bin、lib文件夹和jre里的bin、lib是 不同的)
总的来说JDK是用于java程序的开发,而jre则是只能运行class而没有编译的功能。
JRE(Java Runtime Environment,Java运行环境),包含JVM标准实现及Java核心类库。JRE是Java运行环境,并不是一个开发环境,所以没有包含任何开发工具(如编译器和调试器)
JRE是指java运行环境。光有JVM还不能成class的 执行,因为在解释class的时候JVM需要调用解释所需要的类库lib。 (jre里有运行.class的java.exe)
JRE ( Java Runtime Environment ),是运行 Java 程序必不可少的(除非用其他一些编译环境编译成.exe可执行文件……),JRE的 地位就象一台PC机一样,我们写好的Win64应用程序需要操作系统帮 我们运行,同样的,我们编写的Java程序也必须要JRE才能运行。
JVM(Java Virtual Machine),即java虚拟机, java运行时的环境,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。针对java用户,也就是拥有可运行的.class文件包(jar或者war)的用户。里面主要包含了jvm和java运行时基本类库(rt.jar)。rt.jar可以简单粗暴地理解为:它就是java源码编译成的jar包。Java虚拟机在执行字节码时,把字节码解释成具体平台上的机器指令执行。这就是Java的能够“一次编译,到处运行”的原因。
三者联系:
JVM不能单独搞定class的执行,解释class的时候JVM需要调用解释所需要的类库lib。在JDK下面的的jre目录里面有两个文件夹bin和lib,在这里可以认为bin里的就是jvm,lib中则是jvm工作所需要的类库,而jvm和 lib和起来就称为jre。JVM+Lib=JRE。总体来说就是,我们利用JDK(调用JAVA API)开发了属于我们自己的JAVA程序后,通过JDK中的编译程序(javac)将我们的文本java文件编译成JAVA字节码,在JRE上运行这些JAVA字节码,JVM解析这些字节码,映射到CPU指令集或OS的系统调用。
三者区别:
a.JDK和JRE区别:在bin文件夹下会发现,JDK有javac.exe而JRE里面没有,javac指令是用来将java文件编译成class文件的,这是开发者需要的,而用户(只需要运行的人)是不需要的。JDK还有jar.exe, javadoc.exe等等用于开发的可执行指令文件。这也证实了一个是开发环境,一个是运行环境。
b.JRE和JVM区别:JVM并不代表就可以执行class了,JVM执行.class还需要JRE下的lib类库的支持,尤其是rt.jar。
安装开发环境
卸载JDK
- 删除java的安装目录
- 删除JAVA_HOME
- 删除path下关于Java的目录
- java -version
安装JDK
-
百度搜索JDK8,找到下载地址
-
同意协议
-
下载对应的版本
-
双击安装JDK
-
记住安装的路径
-
配置环境变量JAVA_HOME
path中要配置%JAVA_HOME%\bin和%JAVA_HOME%\jre\bin
-
测试JDK是否安装成功cmd :Java -version
安装Notepad++
Java代码结构
源文件source file 类class 方法method (三者为包含关系)
源文件中有类,类中有方法
源文件中有什么
源文件(.java)通常包含一类定义,类表示程序的一部分,必须放在大括号中
定义一个Dog类
public class Dog{
}
类中有什么
一个类中有一个或多个方法,方法必须放在类的申明中,也就是必须放在类的大括号内
在Dog类中申明一个bark方法,bark方法实现了狗叫的指令
public class Dog{
void bark(){
}
}
方法中有什么
在方法的大括号中编写这个方法如何实现的指令,方法的代码实际上是一组语句。方法就好比一个函数,在方法里面写出自变量和逻辑。
在bark方法里面写出狗叫的逻辑
public class Dog{
void bark(){
statement1;
statement2;
}
}
刨析
JVM开始运行时,它会寻找你在命令行提供的类,然后开始寻找一个专门编写的方法,形式如下:
public static void main (String[] args){
//your code goes here
}
接下来,JVM运行main方法的两个大括号之间的所有代码,每个Java应用必须至少有一个类,并且至少有一个main方法,但并不是每个类都有main方法,而是每个应用都得有一个main方法。
public class MyFirstApp{
public static void main (String[] args){
System.out.print("Hello World")
}
}
main方法中可以做什么?
做一些事:声明、赋值、方法调用等
反复的做一些事:循环,for和while
在某个条件下做一些事:分支,if/else测试
操作:用记事本完成hello world的输出
-
新建一个文件夹,存放代码
-
新建一个java文件
-
编写代码
public class helloworld{
public static void main (String[] args){
System.out.print("Hello World")
}
}
- 从文件保存地址进入控制台
javac helloworld.java
- 编译生成helloworld.class文件
java helloworld
- 在控制台输出
Java程序运行机制
编译型
解释型