Java开发环境
- JVM(Java Virtual Machine)
- 在需要运行Java应用程序的操作系统上,安装一个与操作系统对应的JVM
- JRE(Java Runtime Environment)
- 是Java程序运行时的环境,包含JVM和运行时需要的核心类库
- JDK(Java Development Kit)
- Java程序开发工具包,包含JRE和开发人员使用的编译器工具
- 开发工具:编译工具(javac.exe)和运行工具(java.exe)
- 想要开发一个全新的Java程序,必须安装使用JDK
- 关系图:
Java运行的内存分配
| 各部分名称 | 作用 |
|---|
| 栈(Stack) | 存储方法中的局部变量(方法的参数或方法体内部的变量);方法的运行过程一定在栈中;一旦超出作用域,立刻从栈内存中消失 |
| 堆(Heap) | 凡是new关键字创建的新对象,都存在于堆中;堆内存中每个对象都有一个地址值(16进制);堆内存中的数据,都有默认值(如整数默认值为0等) |
| 方法区(Method Area) | 存储.class相关的数据,包含方法的信息; |
| 本地方法栈(Native Method Stack) | 与操作系统相关; |
| 寄存器(pc Register) | 与CPU相关; |
Hello,World!
package 基础;
// 单行注释
public class Demo01_HelloWorld { // 单行注释
public static void main(String[] args) {
System.out.println("Hello,world!");
}
}
标识符
package 基础;
public class Demo02_标识符 {
}
常量
package 基础;
public class Demo03_常量 {
public static void main(String[] args) {
// 字符串常量:
System.out.println("abc");
System.out.println("");
// 整数常量:
System.out.println(30);
System.out.println(-5);
// 浮点数常量:
System.out.println(3.15);
System.out.println(-2.5);
// 字符常量:
System.out.println('A');
// System.out.println(''); 报错,有且必须有一个字符。
// System.out.println('AC'); 报错
// 布尔常量:
System.out.println(true);
System.out.println(false);
// 空常量:
// System.out.println(null); 报错,空常量不能直接打印输出。
}
}
数据类型
package 基础;
public class Demo04_数据类型 {
}
变量
package 基础;
public class Demo05_变量 {
public static void main(String[] args) {
int num1;
num1 = 10;
System.out.println(num1);
int num2 = 20;
System.out.println(num2);
// 修改num1的值
num1 = 30;
System.out.println(num1);
byte by1 = 30;
System.out.println(by1);
// byte by2 = 400; byte的范围: -128 ~ 127
// 注意:右侧数值的范围不能超过左侧数据类型的取值范围。
short sh1 = 50;
long lo1 = 50;
float fl1 = 2.5F;
double do1 = 1.2;
char ch1 = 'A';
boolean bool1 = true;
// int a = 10;
// int b = 20;
// int c = 30;
int a, b, c;
a = 10;
b = 20;
c = 30;
int x = 100, y = 200, z = 300;
}
}
数据类型转换
package 基础;
public class Demo06_数据类型转换 {
public static void main(String[] args) {
System.out.println(1024); // 整数,默认为int
System.out.println(3.14); // 浮点数,默认double
long num1 = 100L;
long num2 = 100;
System.out.println(num1); // 100
System.out.println(num2); // 100
//如上,加不加L都会输出100,其中发生了数据类型转换。
double dou1 = 2.5F;
System.out.println(dou1);
// float --> double 符合由小到大,发生自动类型转换。
float fl1 = 3L;
// long --> float 符合由小到大,发生自动类型转换。
// 强制类型转换:
// int number1 = 100L;
// 直接报错;long --> int 不是由小到大的范围关系,
// 不能发生自动类型转换,需要强制类型转换:
int number1 = (int)100L;
System.out.println(number1);
// long 强制转换为 int类型,发生数据溢出。
int number2 = (int)6000000000L;
System.out.println(number2); // 1705032704
// double 强制转换为 int,发生数据精度缺失。
int number3= (int)3.99;
System.out.println(number3); // 3
// A字符被当做65进行处理。
char cha1 = 'A';
System.out.println(cha1 + 1); // 66
// 计算机底层会用一个数字(二进制)来代表字符'A',即65
// 一旦char类型的数据进行了数学运算,则会按一定的规则翻译为数字。
byte byteNum1 = 30; // 等价于 byte byteNum1 = (byte)30;
System.out.println(byteNum1);
short s1 = 5;
short s2 = 8;
// short result1 = s1 + s2; //报错,左侧需要是int数据类型
short result2 = 5 + 8;
System.out.println(result2);
}
}