JAVA:语言+开发环境+应用环境+部署环境
语言
关键字+语法要求
环境
jdk: 开发
jre: 运行 JVM+类库
api:程序接口,封装好的东西在jre里面放着。而api提供给你了java开发者已经封装好的包的用法
JAVA文件介绍
bin:放着运行程序的命令
db:自带的小型数据库
include:java中使用C语言写的那一部分
jre:自己运行需要的环境
jre-lib-中有个rt.jar 用java命令打出的压缩包,java所有源码以后缀class的形式存在,这也是java可以运行的原因
lib:所依赖的包
src:java中jdk的源码--对应api中的内容
JAVA不同的三个运行平台:
JavaSE 基础Java,提供最基本语法和关键字,以及API
JavaME 移动端开发。但界面是弱势,鬼鬼,这也太丑了!!!
JavaEE 企业级应用开发。也叫做JavaWEB开发,在基础语法上加上了一些网络工具,集成了更多的API
作用方向不同,但语言相同
JDK:
安装:
1.windows 双击安装即可
之后配置路径:
JAVA_HOME: 安装路径 #现在暂时用不着,等安装tomcat之后会默认寻找JAVA_HOME
PATH: 安装路径、bin
PATH = blahblahblah\bin ;
2.linux:
JAVA_HOME=/opt/java/jdk1.8..
PATH=$JAVA_HOME/bin"$PATH
CLASSPATH
jvm:Java虚拟机
XXXX.class 这个文件计算机都不认识,因此利用JVM将其翻译成相应的机器语言进行识别
只要有JVM,class文件就可以运行
每个操作系统的JVM不同,因此是class跨平台,不是JVM
垃圾回收站GC:专门用来管理内存,清理掉没有引用的内存节点
C语言用完内存需要手动释放内存,如果忘记内存就会一直停留
Java有了垃圾回收站,使用内存时只需要用new申请就可以
利用系统级的线程来控制,专门的算法计算哪个空间不需要,如果计算出不需要的就会自动回收
安全检查机制:
将class交给虚拟机,会先进行检测
书写第一个Java程序
1.创建一个后缀名为.java的文件Hello.java,
2.vim Hello.java
3.class name
{
程序内容
}
4.将源文件编译转换成.class 字节码文件
5.运行
编译:javac -X XXXX.java
运行:java XXXX(没有.class)
编写时注意中英文符号
类加载器:
***PS: “ . ”代表当前路径
将需要运行的程序从他原本所在的位置加载到虚拟器内存执行
采用双亲委托机制(推卸责任!)进行加载
三个加载器都可以进行加载,也都会执行
编译时先交给本地类加载器,但是本地类不想加载,就把加载任务交给扩展类加载器,扩展类在推卸给启动类,启动类也不想加载,因此就去能加载的目录中寻找XXX.jar
但是找不到,就下面传递给扩展类,扩展类去对应找,如果还找不见就去本地类,此时本地类才会去CLASSPATH查找
有很多分类,将自己可以加载的东西都加载到内存
1.启动类加载器 只加载jre--lib--rt.jar中的内容
2.扩展类加载器 只加载jre--lib--ext中的jar包
3.本地类加载器 只加载CLASS所指定的位置,有时候找不到或者无法加载主类,就是因为CLASSPATH指向错误
java -cp XXXX CLASSPATH临时指向某一目录
也可以将Hello.class打成一个jar包
Jar -cvf XXX.jar XXX.class
但是需要手动打开jar包,然后手动添加主函数的路径
打开压缩包,然后在META-INF中的文件中添加主函数
运行jar包:java-jar XXX.jar
然后放到jre--lib--ext中
java -verbose可显示详细的编译过程
这三个最重要
4.自定义加载器
...
Java规范
源文件
public修饰的类名必须要与文件名一模一样,包括大小写
同一个文件中不允许出现两个使用public修饰的类
同一个源文件中允许出现多个class
同一个源文件中可以在多个类中定义主方法,二期主方法不一定非要定义在用public修饰的类中
Java类的书写规则
字节码验证
代码要符合JVM的规范(编程规范,语法错误)
代码破坏计算机的系统或者硬件
栈不能溢出(内存一定要够用)
方法的参数类型一定要正确
类型转换要正确
Java的三大元素
包 package:为了避免命名冲突 可加可不加
定义: package com.briup.day1
class One{}
之后想找到这个class文件,就要com.briup.day1.One
package 定义之后需要用包名+类名来寻找 java com.briup.day1.PackageTest
javac -d [将编译后的包文件以及class想放到的目录]
导包 import 只要不在同一个包并且也不再Java.lang包下面类的引用都需要加import
one/Hello.class two/Hello.class
one中的Hello的类可导入two中Hello中
import two.* 导入全部
Java.lang 最基本的包,即使不做引入也会将这个包中的内容引入
class
定义类的关键字 必须要存在