Java的内存需要划分成为5个部分:
-
栈(Stack): 存放的都是方法中的局部变量。方法的运行一定要在栈当中运行
局部变量: 方法的参数, 或者是方法 {} 内部的变量
作用域: 一旦超出作用域,立刻从栈内存当中消失
-
堆(Heap): 凡是new出来的东西,都在堆当中
堆内存里面的东西都有一个地址值: 16进制
堆内存里面的数据,都有默认值, 规则:
如果是整数 默认为 0
如果是浮点数 默认为 0.0
如果是字符 默认为 'u0000'
如果是布尔 默认为 false
如果是引用类型 默认为null
-
方法区(Method Area) : 存储.class相关信息,包含方法的信息
-
本地方法栈(Native Method Stack): 与操作系统相关。
-
寄存器 (Pc Register): 与CPU相关
一
1. 关键字
特点: 完全小写的字母 (在编译器中,一般有颜色 ( 但是有颜色不一定就是关键字))
2. 标识符
- 标识符: 是指在程序中,我们自己定义的内容。比如类的名字、方法的名字和变量的名字等,都是标识符
- 命令规则: 硬性要求
- 标识符可以包含 英文字母26个(区分大小写)、0-9数字、$、和 _ (下划线)
- 标识符不能以数字开头
- 标识符不能是关键字
- 命名规范: 软件建议
- 类名规范: 首字母大写,后面每个单词首字母大写 (大驼峰式)
- 变量名规范:首字母小写, 后面每个单词首字母大写 (小驼峰式)
- 方法名规范: 与变量名规范一样
3. 注释
//
单选注释/**/
多行注释
4. 常量
常量: 在程序运行期间,固定不变的量
常量的分类:
- 字符串常量: 凡是用双引号引起来的部分,都是字符串常量. 如: "abc" / "123"
- 整数常量: 直接写上的数字, 没有小数点。 如: 100 200 0 -20
- 浮点数常量: 直接写上的小数, 有小数点, 例如: 2.5 / -3.14 / -0.0
- 字符串常量: 凡是用单引号引起来的单个字符, 就叫做字符常量。 例如: 'A', 'b', '岩'
- 布尔常量: 只有两种取值: true(真), false(假)
- 空常量: null , 代表没有任何数据 (不能直接用来打印输出)
5. 基本数据类型
数据类型 | 关键字 | 内存占用 | 取值范围 |
---|---|---|---|
字节型 | byte | 1个字节 | -127-127 |
短整型 | short | 2个字节 | -32768-32767 |
整型 | int (默认) | 4个字节 | -2^31 ~ 2^31-1 |
长整型 | long | 8个字节 | -2^63 ~ 2^63-1 |
单数度浮点数 | float | 4个字节 | 1.4013E-45 ~ 3.4028E+38 |
双精度浮点数 | double (默认) | 8个字节 | 4.9E-324 ~ 1.7977E+308 |
字符型 | char | 2个字节 | 0-65535 |
布尔类型 | boolean | 1个字节 | true, false |
6. 三元运算
格式: 条件 ?表达式A : 表达式B
二
1. 方法的定义
/*
方法其实就是若干语句的功能的集合
定义方法的完整格式:
修饰符 返回值类型 方法名称(参数类型 参数名称 ....) {
方法体
return 返回值; // 如果 返回值类型为void ,则 return 可以不用写,或者直接return就行,不要再写其他的了
} */
public class DefindMethod {
public static void main(String[] args) {
int res = sum(5, 10);
System.out.println(res);
methodC(5, 20);
}
// 求两个数的和
public static int sum(int a, int b) {
int result = a + b;
return result;
}
}
重载方法
/*
方法的重载(OverLoad): 多个方法的名称一样,但是参数列表不一样
好处: 只需要记住唯一一个方法名称, 就可以实现类似的多个功能
*/
public class OverLoadMethod {
public static void main(String[] args) {
Sum(10, 20, 30);
Sum(10, 20, 30, 40);
}
public static void Sum(int a, int b) {
int res = a + b;
}
public static void Sum(int a, int b, int c) {
int res = a + b + c;
}
}
2. 数组
数组的概念: 是一种容器,可以同时存放多个数据值
访问数组: 数组名称[索引] // 从0开始
数组的特点:
1. 数组是一种引用数据类型
2. 数组当中的多个数据,类型必须统一
3. 数组的长度在程序运行期间不可改变
数组的初始化: 在内存当中创建一个数组,并且向其中赋予一些默认值
两种常见的初始化方式:
1. 动态初始化 (指定长度)
2. 静态初始化 (指定内容) ps: 没有直接指定长度,但是依然会自动推算得出长度
动态初始化数组的格式:
数据类型[] 数组名称 = new 数据类型[数组长度]
静态初始化数组的格式:
数据类型[] 数组名称 = new 数据类型[] {元素1, 元素2, ...};
public class Demo01Array {
public static void main(String[] args) {
/*
动态初始化数组
*/
// 创建一个数组, 能存放300个int类型的数据
int[] arrayA = new int[300];
// 创建一个数组, 能存放5个字符串
String[] arrayS = new String[5];
/*静态初始化数组*/
// 直接创建一个数组,里面装的全部都是int 类型的数据, 具体为: 1, 5, 20, 30
int[] arrayI = new int[] { 1, 5, 20, 30 };
// 使用省略格式,创建一个装有: "hello" "world" "java" 的数组
String[] arrayS2 = { "hello", "world", "java" };
System.out.println(arrayS2); // 直接打印数组名称, 得到的是数组对应的 内存地址的哈希值 // [Ljava.lang.String;@1b6d3586
System.out.println(arrayS2[0]); // hello 访问数组的第一个元素
}
}
求数组的长度: array.length
public class TraverseAarray {
public static void main(String[] args) {
int[] arrayA = {1, 2, 5, 6, 9};
// 遍历数组
for (int i=0; i<arrayA.length; i++) {
System.out.println(arrayA[i]);
}
}
}