java基础
-
java的特性
1.简单性(java底层是使用c++编写的,java指针已经封装了,而且只支持单继承)
2.面向对象
3.健壮性(GC机制,自动垃圾回收,不用c++需要手动回收内存)
4.多线程(支持多个线程同时并发执行,也提供了多线程环境下的安全机制)
5.可移植性(一次编译,到处运行,这归功与JVM,JVM屏蔽了操作系统之间的差异,在不同版本下的操作系统,都可以运行)
-
JDK,JRE,JVM三者之间的关系
(1)JDK: java开发工具箱
(2)JRE:java运行环境
(3)JVM:java虚拟机
JDK包括JRE,JRE包括JVM
JDK和JRE有单独的安装包,JVM没有,不开发不需要JDK,只需要JRE就行了 -
java的加载与执行的理解
.java文件经过编译器(javac)编译成.class文件,在虚拟机上运行
在windows上编译成字节码文件,也可以在linux执行(一次编译,到处运行)
注意:字节码文件不是二进制文件,如果是二进制文件,就不需要JVM了,因为操作系统可以直接执行二进制文件,不同的系统上的JVM把字节码文件翻译成不同系统能够识别的二进制文件,然后给操作系统执行,再和硬件平台进行交互
-
java程序从开发到最终运行经历了什么?
编译期:(可以在windows上)
第一步:在硬盘中新建.java文件
第二步:使用编译器打开.java文件
第三步:编写符合语法规则的.java文件
第四步:保存之后,使用javac编译器(安装JDK之后自带)编译.java文件
第五步:如果符合java语法规则,编译会通过,会生成字节码文件。如果不符合语法规则,编译器不会通过.不会生成字节码文件,并且一个java源文件是可以生成多个.class文件的
运行期(JRE在起作用):(可以在不同的操作系统上运行。windows或者linux都行,不用管编译器是什么系统上运行的)
第六步:如果是在Linux上运行,需要将Windows上的.class文件拷过去,不需要拷贝源代码,真正运行的文件是.class文件
第七步:使用JDK自带的一个命令/工具:java(负责运行的命令/工具),执行字节码文件
第八步:下面的就全部交给java虚拟机了,然后JVM对字节码进行解释(解释器负责将字节码文件进行解释为二进制文件)
第九步:JVM会将生成的二进制文件交给操作系统,操作系统会执行二进制码,然后和硬件进行交互
注意:javac,负责编译.java文件 java负责运行.class文件 -
环境变量
环境变量包括环境变量和系统变量
系统变量:范围比较大,系统变量会让计算机所有用户都起作用
用户变量:范围比较小,这个变量只会作用于当前用户
怎么修改环境变量:win7用半角的分号(;)分割,win10直接新增
配置jdk的环境变量:找到jdk的bin目录,然后加到path路径(因为可执行文件javac.exe和java.exe都在bin目录下)
dos命令默认先从用户变量找,然后去环境变量(建议配置到环境变量)
还有一个方法就是把javac.exe和java.exe文件放到windows/system32目录下
DOS命令
查看编译器的版本 javac -version
查看虚拟机的版本 java -version -
path环境变量的作用
就是给windows操作系统指路的,告诉windows操作系统去哪儿找这个命令,path环境变量中有很多很多路径,路径和路径之间用半角;分割,path=a;b;c;d…,path是环境变量的名字,a;b;c;d…,是环境变量path的值 -
“java HelloWorld"的执行原理和过程,java HelloWorld敲完回车,都发生了什么?
第一步:先会启动JVM(java虚拟机)
第二步:JVM启动之后,JVM会去启动"类加载器 classloader”
类加载器的作用:记载类的,本质上加载器负责去找"类"对应的"字节码"文件
假设是"java HelloWorld"那么类加载器会去硬盘上搜索:HelloWorld.class文件
第三步:如果类加载器找不到对应的字节码文件,会报错(找不到该类)
类加载器如果找到了对应的字节码文件,类加载器会将该字节码文件装载到JVM中,JVM启动"解释器"将字节码文件解释为"10101010001…"这种的二进制码,操作系统执行二进制码和硬件交互
默认情况下,类加载器去硬盘找字节码文件的时候,默认从哪儿找???
默认情况下类加载器(classloader)会从当前路径下找. -
classpath是一个环境变量,是给谁指路的?
是给类加载器指路的.
classpath环境变量不属于windows操作系统,是隶属于java的,是java特有的
classpath=A;B;C;…
配置classpath:大小写无所谓,但是必须是classpath,
配置了classpath之后,类加载器不会从当路径下去找了,只会从配置的classpath路径下去找
所以配还不如不配 -
java13新特性
在dos命令窗口,java+路径.java 可以直接运行,不用生成.class文件 -
注释
// 单行注释
/*
多行注释
/
/*
*javadoc注释,这里的命令可以被javadoc.exe命令解析提取并且生成到帮助文档中
*/ -
关于java程序
public 的类可以没有 但必须如果有的话,public 修饰的类名必须和源文件名相同,且只能有一个public修饰的类。
一个java源文件中可以定义多个class类
public的类不是必须的,可以没有