Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程。
1、Java跨平台原理(字节码文件、虚拟机)
C/C++语言都直接编译成针对特定平台机器码。如果要跨平台,需要使用相应的编译器重新编译。
Java源程序(.java)要先编译成与平台无关的字节码文件(.class),然后字节码文件再解释成机器码运行。解释是通过Java虚拟机来执行的。
Java虚拟机是可运行Java字节码文件的虚拟计算机。不同平台的虚拟机是不同的,但它们都提供了相同的接口。
Java语言具有一次编译,到处运行的特点。就是说编译后的.class可以跨平台运行,前提是该平台具有相应的Java虚拟机。但是性能比C/C++要低。
Java的跨平台原理决定了其性能没有C/C++高
2、java三大版本
Standard Edition(标准版)J2SE包含构成java语言核心的类
Enterprise Edition(企业版) J2EE 包含J2SE 中的类,并且还包含用于开发企业级应用的类。
Micro Edition(微缩版) J2ME 包含J2SE中一部分类,用于消费类电子产品的软件开发。
3、JDK、JRE、JVM
JDK:DK是java development kit(java开发工具包)的缩写。那让我们来看下jdk的安装目录:
bin目录:主要的是编译器javac.exe
include:java和jvm交互用的头文件
lib:类库
jre:java运行时环境
JRE:JRE是java runtime environment(java运行环境)的缩写。光有JVM还不能让class文件执行,因为在解释class的时候JVM需要调用解释所需要的类库lib。
JVM:JVM是Java Virtual Machine(Java虚拟机)的缩写。它是整个java实现跨平台的核心,所有的java程序会首先被编译为.class的类文件,这种类文件可以在虚拟机上执行,也就是说class并不直接与机器的操作系统相对应,而是经过虚拟机间接与操作系统交互,由虚拟机将程序解释给本地系统执行。
JDK,JRE,JVM三者关系概括如下:
jdk是JAVA程序开发时用的开发工具包,其内部也有运行环境JRE。JRE是JAVA程序运行时需要的运行环境,就是说如果你光是运行JAVA程序而不是去搞开发的话,只安装JRE就能运行已经存在的JAVA程序了。JDk、JRE内部都包含JAVA虚拟机JVM,JAVA虚拟机内部包含许多应用程序的类的解释器和类加载器等等。
3、JDK的安装与环境变量配置
现在我们了解了jdk、jre、jvm的关系后,然后要做的就是要安装jdk,要安装jdk首先就要去下载jdk,现在我们去官网下载jdk:oracle官网
进入官网我们可以看到这样一个界面
然后点击左上角的菜单,就会看到右边产品帮助下有一个下载,然后点击下载
进入后往下翻找到java,然后点击java
最后点击面向开发人员的java(JDK)
进入后就会看到有各种版本的jdk,这里我们选择市面上常用的jdk1.8
点击DOWNLOAD,进入下载页
这里我们选择同意协议,并选择对应系统的jdk下载就可以了
下载好后找到安装包,双击开始安装:
这里点击下一步就可以了
由于我这里是直接安装到C盘,你可以根据自己的情况选择安装到哪个盘,不过最好在英文目录下且不能有空格,然后点击下一步
这里和上一步的安装位置保持一致,点击下一步
现在说明安装成功,点击关闭就可以了
现在我们来测试下是否真正安装成功,按住键盘上的“win+R”键并输入cmd打开cmd.exe窗口,输入java -version,如果出现如下界面说明安装成功,但是提示该命令不是内部或外部命令,也不是可运行的程序或批处理文件,说明安装失败!
安装到此结束,现在我们来配置环境变量:
配置环境变量的目的:在任意路径下执行javac命令
回到桌面,鼠标右键单击计算机,点击属性,高级系统设置
点击环境变量:
在系统变量里点击新建
输入
变量名:JAVA_HOME
变量值:C:\Program Files\Java\jdk1.8.0_171(这是写你的jdk安装目录)
输入完毕后点击确定
配置JAVA_HOME的目的:因为不想要频繁操作path,可能修改错误,所以可以本着会变的传入,不变的保留,在系统变量中新建一个JAVA_HOME,值为jdk目录
然后找到Path变量,并点击编辑
点击新建,输入:%JAVA_HOME%\bin
好了,环境变量配置到这了,最后一路点击确定就可以了,最后我们用记事本写一个helloworld程序,看能否运行成功
public class HelloWorld{
public static void main(String[] args){
System.out.println("helloworld");
}
}
可以看到,运行成功,那么jdk的安装和环境变量的配置到此结束了。
4、JDK1.5的新特性
1、自动装箱和拆箱
自动装箱:java自动将基本数据类型的数据转化为相应的包装类对象,而不需要手动转换。如:Integer i=5 相当于 Integer i=Integer.valueOf(5);
自动拆箱:自动装箱的反过程,相应的包装类对象自动转化为基本数据类型的数据,而不需要手动转换。如:Integer i=5;int j=i;
2、可变参数
methodName(dataType… argumentName);
3、泛型
一个集合可以放任何类型的对象,相应地从集合里面拿对象的时候我们也不得不对他们进行强制得类型转换。从而引入了泛型,它允许指定集合里元素的类型,这样你可以得到强类型在编译时刻进行类型检查的好处。
5、JDK1.7的新特性
1、在switch语句中可以使用String类型
String s = "hello";
switch (s) {
case "hello" :
System.out.println("hello");
case "world" :
System.out.println("world");
break ;
default :
System.out.println("break");
break ;
}
2、在try catch异常捕捉中,一个catch可以写多个异常类型,用"|"隔开
jdk1.7之前:
try {
......
} catch(ClassNotFoundException ex) {
ex.printStackTrace();
} catch(SQLException ex) {
ex.printStackTrace();
}
jdk1.7后:
try {
......
} catch(ClassNotFoundException|SQLException ex) {
ex.printStackTrace();
}
3、数值可加下划线
例如:int one_million = 1_000_000;
6、JDK1.8的新特性
1、Lambda表达式
//匿名内部类
Comparator<Integer> cpt = new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return Integer.compare(o1,o2);
}
};
TreeSet<Integer> set = new TreeSet<>(cpt);
System.out.println("=========================");
//使用lambda表达式后只需要一行代码
Comparator<Integer> cpt2 = (x,y) -> Integer.compare(x,y);
TreeSet<Integer> set2 = new TreeSet<>(cpt2);
2、函数式接口
只定义了一个抽象方法的接口(Object类的public方法除外),就是函数式接口,并且还提供了注解:@FunctionalInterface
3、接口中可以定义默认实现方法和静态方法
在接口中可以使用default和static关键字来修饰接口中定义的普通方法
public interface Interface {
default String getName(){
return "han";
}
static String getName2(){
return "han";
}
}