corejava_day1
Java
J2SE(JAVA SE) 桌面应用的开发 corejava
J2EE(JAVA EE) 企业级开发
J2ME(JAVA ME) 手机应用的开发
SDK(software development kit) 软件开发包 函数库或者工具等
JDK(java development kit) 是面向开发人员的,java开发工具
JRE(java runtime environment java) 运行环境,是面向应用程序使用者的
注意:JDK安装后一般都会包含JRE的
API(application program interface)应用程序编程接口
别人开发好的供我们来使用(java)代码就称为API,API都会有一个API说明文档,让我们去查阅学习别人写好的代码如何来使用
windows下的环境变量的配置
JAVA_HOME: JDK安装的目录路径
C:\Program Files\Java\jdk1.8.0_74
CLASSPATH:类加载时候查找的字节码路径
PATH:%JAVA_HOME%\bin;
JDK安装后的目录结构:
bin:java的相关命令
java javac jar javadoc javap javah
db:java提供的数据库
demo/sample:java代码的一些示例
include:C语言的头文件等内容
jre:Java的运行环境
lib:Java所用的基本的jar包
JAVA的特点:
简单性:(相对应C和C++来讲)Java不需要程序员操作内存
跨平台:一次编译,到处运行(JVM)
多线程:其他语言的多线程一般是系统级别的,Java的多线程是语言级别的
gc垃圾回收器:Java中有一个线程,专门负责JVM中垃圾内存的释放
垃圾:没有引用的内存节点
垃圾回收的算法
注意:垃圾回收有自己的算法,我们是不能控制垃圾回收机制的。虽然有和垃圾回收相关的方法:
java.lang.System.gc() java.lang.Runtime.gc(),但是还是无法控制垃圾回收机制
类加载: 双亲委托机制
启动类加载 $JAVA_HOME/jre/lib
扩展类加载 $JAVA_HOME/jre/lib/ext
本地类加载 classpath Hello.class
JVM
类加载 --> 字节码验证 --> JIT运行
字节码验证:
代码要符合JVM的规范
代码不能破坏计算机的系统或者硬件
栈不能溢出
方法的参数类型要正确
类型转换要正确
Java类名和文件名的关系
一个Java源文件(.java)中,可以有好多个类(class),但是,最多只能有一个类(class)被public修饰
如果有一个类被public修饰,那么这个源文件(.java)的名字就必须和这个被public修饰的类的名字一致。
注意:首字母大写是编程规范,不是强制要求。
Java文件中搞得三个顶级元素:
package
- 最终会是以文件夹的形式体现出来(有什么包,就必须有什么文件夹,运行的时候.class文件必须在这个文件夹下面)
- .java文件中有多个package的时候,用.分割并且结尾用;号结束 例如:(com.briup.test;)
- 包也是Java中类的标识的一部分,确定某一个类是通过包名加类名来唯一确定的。
比如运行Java类的时候:java package.类名(java com.briup.test.HelloPackage)
import
- 导包用的关键字
- 如果你想在当前这个类使用其他的类,那么就必须通过这个关键字,把哪个类导入进来
- java.lang包下面的类可以直接使用,不用导入。
- 和当前这个类位于同一个包下面的类,也不需要导入,可以直接使用
class
Java中标识一个类的关键字(Java类中可以没有package,也可以没有import,但是一定会class)
编写带包名的类 HelloPackage.java
package com.briup.test;
public class HelloPackage {
public static void main(String[] ages) {
System.out.println("hello world");
}
}
注意:没有main方法的类是不能直接运行的
main的形式是固定的(大体是固定,之后会看到改动一些指定地方也是可以的)
public static void main(String[] args) {
......
}
因为main方法是程序的入口,要直接运行的那个类,类加载之后,JVM没有在这个类中找到main方法,那么就会报错
JVM只会运行java命令后面指定的类中的main方法(如果没有这个方法就报错)java com.briup.test.HelloWorld