Java学习笔记(一)——变量数据类型运算符
前言
Java的各种版本:
Java SE(Java standard edition):标准版,定位在个人计算机上的应用。
Java EE(Java enterprise edition):企业版,定位在服务器端的应用。
Java ME(Java micro edition):微型版,定位在消费性电子产品的应用(几乎不用)。
Java在运行过程中既要经过编译也要经过解释,如图:
JDK、JRE、JVM之间的关系:
JVM(Java virtual machine):用于执行bytecode字节码文件的虚拟计算机,是Java语言实现跨平台的核心机制。Java语言跨平台的实质就是Java针对每一种操作系统开发相应的虚拟机,Java语言运行时是在各平台的Java虚拟机上边解释边运行,从而屏蔽了底层运行平台的差异,实现了一次编译到处运行。
JRE(Java runtime environment):包含Java虚拟机、库函数、运行Java应用程序所必须的文件。
JDK(Java development kit):包含JRE、编译器和调试器等用于Java程序开发的文件。
注释
示例:
标识符
变量(variable)
注意事项
- 每个变量都有类型,类型可以是基本类型,也可以是应用类型。
- 变量名必须是合法的标识符。
- 变量声明是一条完整的语句,以分号结束。
- 建议逐一声明每一个变量,可提高程序可读性。
变量的分类和作用域
常量(constant)
常量通常指一个固定的值,Java中用关键字final来定义常量,常量被初始化后不能更改它的值。
final type varName = value;
为了更好的区分和表述,一般将1、2、3、‘a’、‘b’、“hello world”、true、false等称为字符常量,将final 修饰的PI等称为符号常量。
基本数据类型(primitive data type)
Java是一种强类型语言,每个变量必须声明其数据类型。Java数据类型分为基本数据类型(primitive data type)和引用数据类型(reference data type)。
Java中定义了3类8种数据类型:
- 数值型:byte,short,int,long,float,double
- 字符型:char
- 布尔型:boolean
引用数据类型统一占4个字节,记录的是其应用对象的地址。
byte:1字节
short:2字节
int:4字节
long:8字节
float:4字节
double:8字节
整型
浮点类型
字符型
字符型在内存中占2个字节,在Java中使用单引号来表示字符常量。例如‘A’是一个字符,它与"A"是不同的,后者表示含有一个字符的字符串。
char类型用来表示在Unicode编码表中的字符,Unicode编码被设计用来处理各种语言的文字,它只占2个字节,可允许有65536个字符。
Unicode具有从0到65535之间的编码,他们通常用从‘/u0000’到‘/uFFFF’之间的十六进制值来表示。(其中u表示Unicode)
常用转义字符
boolean型
运算符(operator)
赋值运算符
关系运算符
逻辑运算符
短路与和逻辑与的区别:逻辑与是检查所有条件再给出结果,短路与不一定检查所有条件。
位运算符
连接符
运算符优先级问题
数据类型的转换
自动类型转换
自动类型转换指的是容量小的数据类型可以自动转换为容量大的数据类型。
如下图,实线表示无数据丢失的自动类型转换,而虚线表示在转换时可能会有精度的缺失。
可以将整形常量直接赋值给byte,short,char等类型变量,而不需要进行强制类型转换,只要不超出其表示范围即可。
强制类型转换
强制类型转换又称为造型(cast)。在有可能丢失信息的情况下进行的转换是通过造型来完成的,但有可能造成精度降低或者溢出。
//语法格式
(type) var
注意:
- 当将一种类型强制转换成另一种类型,而又超出了目标类型的表示范围,就会被截断为一个完全不同的值。
- 不能在布尔类型和任何数值类型之间做强制类型转换。
基本类型转换时常见错误和问题
- 操作比较大的数时,要留意是否溢出,尤其是整数操作时。
简单的键盘输入和输出
import java.util.Scanner;
public class TestScanner {
public static void main(String[] args){
Scanner s = new Scanner(System.in);
//要求输入用户名, 年龄,薪水(月薪)
System.out.println("请输入您的用户名: ");
String uname = s.nextLine);
System.out.println("请输入您的年龄: ");
int age = s.nextIntQ:
System.out.println("请输入您的月薪: ");
double monthSalary = s.nextDouble(;
System.out.println("程序运行结束! ! ! ");
System.out.println("用户名: " +uname+ "\t年龄: "+age+
"\t月薪:" + monthSalary+ "\t年薪: "+ (12*monthSalary));
}
}