java跨平台原理

Java程序并非是直接运行的,Java编译器将Java源程序编译成与平台无关的字节码文件(class文件),然后由Java虚 拟机(JVM)对字节码文件解释执行。所以在不同的操作系统下,只需安装不同的Java虚拟机即可实现java程序的 跨平台。

JVM、JRE与JDK

JVM(Java Virtual Machine),Java虚拟机 ,解释并执行字节码文件。
JRE(Java Runtime Environment),Java运行环境,包含了JVM和Java的核心类库(Java API)。
JDK(Java Development Kit)称为Java开发工具,包含了JRE和开发工具。
总结:我们只需安装JDK即可,它包含了java的运行环境JRE和虚拟机JVM。

Java基础语法

注释

注释是对代码的解释和说明文字,可以提高程序的可读性,因此在程序中添加必要的注释文字十分重要。
单行注释: // 注释内容
多行注释 :/ * 注释内容 * /
文档注释 :/** */

关键字

关键字的特点是全部小写的英文单词,比如:static、void、public等。

数据类型

整数类型:byte、short、int、long 其中int为默认类型。取值范围 byte < short < int < long。
浮点类型:float、double。其中double为默认类型。取值范围 float < double。
字符类型:char 特点:单引号、1个字符
布尔类型:boolean 它只有 true 和 false 两个取值结果。
在Java中整数默认都是int类型,浮点数(小数)默认都是double类型。

常量

常量:在程序运行过程中,其值不可以发生改变的量。
Java中的常量分类:
字符串常量 用双引号括起来的多个字符(可以包含0个、一个或多个),例如"a"、“abc”、"中国"等 。
整数常量 整数,例如:-10、0、88等 。
小数常量 小数,例如:-5.5、1.0、88.88等
字符常量 用单引号括起来的一个字符,例如:‘a’、‘5’、‘B’、'中’等 。
布尔常量 布尔值,表示真假,只有两个值true和false。
空常量 一个特殊的值,空值,值为null
除空常量外,其他常量均可使用输出语句直接输出。

public class Demo{
	public static void main(String[] args){
	System.out.println(10);  // 输出一个整数 10
	System.out.println(10.1);  // 输出一个小数 10.1
	System.out.println('a');  // 输出一个字符 a
	System.out.println("Hello");  // 输出一个字符串 Hello
	System.out.println(true);  // 输出一个布尔值 true
	}
}

变量

变量:在程序运行过程中,其值可以发生改变的量。变量的本质是内存中的一小块区域
变量的定义格式:

方式一:声明并初始化
数据类型 变量名 = 初始化值;
int age = 18;  // 声明一个整数变量 age 并初始化(赋值)

int a = 1,b = 5,c = 10;  // 一次声明多个整数变量并初始化

方式二:先声明,后初始化(赋值)
数据类型 变量名;
变量名 = 初始化值;
int age;  // 声明一个整数变量 age
age = 18;  // 给变量 age 赋值

int a , b , c;  // 一次声明多个整数变量
a = 2;
b = 4;
c = 7;

使用变量的注意事项
1:在同一对{}中,变量名不能重复。
2:变量在使用之前必须先初始化(赋值)
3:定义Long类型变量时,必须在整数后面加L进行强调,因为整数默认是int类型,整数太大会超过int类型的范围。
4:定义Float类型的变量时,必须在浮点数后面加F进行强调,因为浮点数默认是double类型,double的取值范围比float大 会报错。

long a = 1540154154525212450L
float b = 5.20F

标识符

标识符是用户编程时使用的名字,用于给类、方法、变量、常量等命名。
Java中标识符的组成规则:
字母、数字、下划线“_”、美元符号“$”组成第一个字符不能是数字。 不能使用java中的关键字作为标识符。
标识符对大小写敏感(区分大小写)。
Java中标识符的命名约定:
小驼峰式命名:变量名、方法名
首字母小写,从第二个单词开始每个单词的首字母大写 比如:name、age、userName、studentNumber。
大驼峰式命名:类名
每个单词的首字母都大写比如:Demo、Test、CalculatorTest。
另外,标识符的命名最好可以做到见名知意

类型转换

类型转换分为两种:自动类型转换强制类型转换
自动类型转换:把一个表示数据范围小的数值或者变量赋值给另一个表示数据范围大的变量。这种转换方式是自动的,直接书写即 可。例如:

double score = 10;  // 10默认是int类型,int类型的取值范围比double类型小 因此可以自动转换

强制类型转换:把一个表示数据范围大的数值或者变量赋值给另一个表示数据范围小的变量。
强制类型转换格式:
目标数据类型 变量名 = (目标数据类型)值或者变量;
例如:

int score = (int)95.5;  // 5.5默认是double类型,将其强制转换成int类型会丢失小数部分
System.out.println(score);  // 输出95

补充说明:
1:char类型的数据转换为为int类型是按照码表中对应的int值进行计算的。比如在ASCII码表中,'a’对应97

int id = 'a';
System.out.println(id);  // 输出97

2: 整数默认是int类型,byte、short和char类型数据参与运算均会自动转换为int类型

byte b1 = 10; 
byte b2 = 20;
byte b3 = b1 + b2; // 第三行代码会报错,b1和b2会自动转换为int类型,计算结果为int,int赋值给byte需要强制类型转换。 
// 修改为: 
int num = b1 + b2;
// 或者:
byte b3 = (byte) (b1 + b2);

3:boolean类型不能和其他的基本数据类型进行转换。

总结:自动类型转换(小转大)可以直接书写,强制类型转换(大转小)需要按格式书写,大转小容易丢失精度。byte、short和char类型数据参与运算均会自动转换为int类型