Java入门基础概念
1 jdk、jre、jvm区别
- jdk: Java Development Kit
- jre: Java Runtime Environment
- jvm: Java Virtual Machine
2 环境配置
添加以下环境变量内容:
- JAVA_HOME:
D:\jvm\jdk
- Path:
%JAVA_HOME%\bin
- ClassPath:
.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar
Path变量:提供命令路径。
ClassPath变量:提供lib和jar等路径,供Java程序寻找类
。
(最前面的.;
表示先查找当前目录下的class)
3 JVM内存划分
JVM对自己的内存进行了划分,分为5个区域:
- 寄存器:内存与CPU之间
- 本地方法栈:JVM调用系统中的功能
- 方法和数据共享:运行时期class文件进入的地方
- 方法栈:所有方法运行时候进入的内存
- 堆:存储容器和对象
注意:代码块结束时,JVM会自动清除空间,不用像C++中使用delete
手动释放空间。
4 Java垃圾回收
- 传统的C/C++编程需要程序员回收已经分配的内存,Java程序的内存分配与回收都由JRE在后台自动进行。
- JRE会负责回收那些不再使用的内存,该机制为垃圾回收(GC)。
- 回收对象之前,系统会调用它的
finalize()
方法,此时对象还处于可恢复状态,在finalize()方法
中重新让一个变量引用该对象,该对象会再次变为可达状态,否则该对象进入不可达状态。
- 为更快回收不再需要的内存,建议:
- 将不再使用对象的引用变量设置为null.
- 调用
Runtime.getRuntime.gc()
或System.gc()
等方法来建议系统进行垃圾回收。public class GcTest{ public static void main(String[] args){ for(int i=0;i<4;i++){ new GcTest(); //创建匿名对象 //主动建议系统回收垃圾 System.gc(); } } public void finalize(){ System.out.println("系统正在清理GcTest对象的资源……"); } }
5 Java程序命令行启动
Java程序的执行过程:
- javac.exe: 编译器
- java.exe: 解释器
编译命令:
javac -cp [classpath1:classpath2...] -d /target/path Source.java
打包jar命令:
jar -cf test.jar /directory
执行命令
java -cp [classpath1:classpath2...] mainClass
-cp
具体的使用方式:
6 Java源文件结构
HelloWorld.java
源文件:
public class HelloWorld{ //类名必须和.java源文件名一致
public static void main(String[] args){ //main函数是java程序执行的起点
System.out.println("Hello World!!!");
}
}
7 标识符
- 标识符
程序中自己定义的内容,如类名
、方法名
、变量名
等。 - 命名规则:
硬性要求
- 标识符可以包含
英文字母26个(包含大小写)
、0-9数字
、$(美元符号)
和_(下划线)
。 - 标识符不能以数字开头。
- 标识符不能是关键字。
- 标识符可以包含
- 命名规范:
软性要求
- 类名规范:首字母大写,后面每个单词首字母大写
(大驼峰式)
。HelloWorld
- 变量名规范:首字母小写,后面每个单词首字母大写
(小驼峰式)
。helloWorld
- 方法名规范:同变量名。
(小驼峰式)
- Package名规范:全部小写。
- 类名规范:首字母大写,后面每个单词首字母大写
8 Java数据类型
注意:实际上,引用类型变量就是一个指针,只是Java中不再使用指针这个说法。
9 简单输入输出
- 输出
System.out.println(输出内容);
- 输入
import java.util.Scanner;
Scanner sc = new Scanner(System.in); int i = sc.nextInt();
- 随机数
import java.util.Random;
Random ran = new Random(); int i = ran.nextInt(10);
10 数组
- 定义数组
dataType[] arrayName = new dataType[arraySize]
- 数组大小
arrayName.length
- 数组使用示范
代码如下:
public class ArrayDemo{
public static void main(String[] args){
int[] arr1 = new int[3]; //动态初始化,动态指定数组长度
int[] arr2 = new int[]{1,2,4}; //静态初始化1
int[] arr3 = {1,2}; //静态初始化2
System.out.println(arr1); //输出数组地址
System.out.println(arr2[1]); //输出2
System.out.println(arr3.length); //输出2
}
}
程序运行中内存分配:
foreach
循环
简单的循环遍历数组和集合的方式。
for(type variableName : array | collection){
// variableName 自动迭代访问每个元素...
}
public class ForeachTest {
public static void main(String[] args) {
int[] a = new int[] { 1, 2, 3, 4, 5 };
for (int i : a) {
System.out.println(i);
}
}
}
11 方法
- 方法的定义
修饰符 返回值类型 方法名(参数列表);
如:public static void main(String[] args){ ... }
- 参数传递
- 值传递
public static void change(int a, int b){ a=a+b; b=b+a; }
- 引用传递(地址传递)
public static void change(int [] a, int index){ a[index]=100; }
- 值传递
- 方法重载(overload)
- 方法名相同
- 参数列表不同