- J2SE 桌面应用的开发 JAVA SE corejava
- J2EE 企业级开发 JAVA EE
- J2ME 手机应用的开发 JAVA ME
SDK software development kit 软件开发包 函数库或者工具等
JDK java development kit 是面向开发人员的, java开发工具
JRE java runtime enviroment java 运行环境, 是面向应用程序使用者的
API application program interface 应用程序编程接口
JAVA_HOME: JDK安装的目录路径
CLASSPATH: 类加载时候查找的字节码路径
PATH: JDK安装目录里面的命令目录
bin : java的相关命令
java javac jar javadoc javap javah
db: java提供的数据库
demo/sample : java代码的一些示例
include : C语言的头文件等内容
jre : java的运行环境
lib : java所用的基本的jar包
简单性 : (相对应C和C++来讲) java不需要程序员操作内存
跨平台 : 一次编译, 到处运行 (JVM)
多线程 : 其他语言的多线程一般是系统级别的, java的多线程是语言级别的
动态编译: (相对应C或者C++来说), 在一个项目中, 如果需要修改一个java文件的话, 那么就修改这一个文件就行了,其他的java文件不需要动
垃圾回收器: java中有一个线程, 专门负责JVM中垃圾内存的释放
垃圾: 没有引用的内存节点
垃圾回收的算法
注意:
垃圾回收有自己的算法, 我们是不能控制垃圾回收机制的, 虽然有和垃圾回收相关的方法 : java.lang.System.gc() java.lang.Runtime.gc(), 但是还是无法控制垃圾回收机制
运行的前提是 : XXX.java文件中 没有写包(package)名
编写的java文件要以XXX.java命令
(注意当前路径和java文件路径要一致)
编译:
javac XXX.java
编译完后会生成一个XXX.class(字节码文件)
运行:
java XXX (后面不加.class)
可以把字节码文件打成jar包
jar -cvf hello.jar HelloWorld.class
类加载 : 双亲委托机制
启动类加载
扩展类加载
本地类加载
自定义类加载
网络类加载
JVM
类加载–>字节码验证–>JIT运行
字节码验证:
代码要符合JVM的规范
代码破坏计算机的系统或者硬件
栈不能溢出
方法的参数类型要正确
类型转换要正确
一个java源文件(.java)中,可以有好多个类(class),但是,最多只能有一个类(class)被public修饰
如果有一个类被public修饰,那么这个源文件(.java)的名字就必须和这个被public修饰的类的名字一致,而且还要首字母大写
package
- 最终会是以文件夹的形式体现出来(有什么包, 就必须有什么文件夹, 运行的时候 .class文件 必须在这个文件夹下面)
- .java文件中有多个package的时候, 用 . 分割并且结尾用 ; 号结束 例如: (com.test;)
- 包也是java中类的标识的一部分, 确定某一个类是通过包名加类名来唯一确定的 比如运行java类的时候:
java package.类名
import
- 导包用的关键字
- 如果你想在当前这个类使用其他的类, 那么就必须通过这个关键字, 把那个类导入进来
- java.lang包下面的类可以直接使用, 不用导入.
- 和当前这个类位于同一个包下面的类, 也不需要导入, 可以直接使用
class
java中标识一个类的关键字
(java类中可以没有package, 也可以没有import, 但是一定会class)
建立文件夹并且把.class文件剪切到相应的文件夹里面的操作, 我们可以用命令在编译的时候实现
javac -d . HelloPackage.java
-d 表示编译的同时生产和这个.java文件中定义的包名相一致的是文件夹结构,
. 表示在当前目录下生产这个文件夹(这个不一定非是. 也可以是其他路径)
最后编译完成后的.class文件也会自动的放进生产的文件夹里面
然后我们直接用 package.类名 去运行就可以了
注意: 没有main方法的类是不能直接运行的
因为main方法是程序的入口, 要直接运行的那个类, 类加载之后, JVM没有在这个类中找个main方法, 那么就会报错
JVM只会运行 java命令后面 指定的类中的main方法(如果没有这个方法就报错)