标识符、变量、常量、数据类型、运算符、基本数据类型的类型转换等。这些是编程中的“砖块”,是编程的基础。要想开始正式编程,还需要再学“控制语句”,控制语句就像“水泥”,可以把“砖块”粘到一起,最终形成“一座大厦”。
变量的本质:
1.变量本质上就是代表一个”可操作的存储空间”,空间位置是确定的,但是里面放置什么值不确定。
2.可通过变量名来访问“对应的存储空间”,从而操纵这个“存储空间”存储的值。
3.Java是一种强类型语言,每个变量都必须声明其数据类型。变量的数据类型决定了变量占据存储空间的大小。比如,int a=3; 表示a变量的空间大小为4个字节。
变量有三种类型:局部变量,成员变量(也称为实例变量)和静态变量。
局部变量(local variable):方法或语句块内部定义的变量。生命周期是从声明位置开始到到方法或语句块执行完毕为止。局部变量在使用前必须先声明、初始化(赋初值)再使用。
public class Test {public static void main(String[] args) {int i;i=10;int j=i+5;System.out.println(j);}
}
成员变量(也叫实例变量 member variable):方法外部、类的内部定义的变量。从属于对象,生命周期伴随对象始终。如果不自行初始化,它会自动初始化成该类型的默认初始值。
public class Test {public static void main(String[] args) {int i;}
}
静态变量(类变量 static variable)使用 static 定义。 从属于类,生命周期伴随类始终,从类加载到卸载。如果不自行初始化,与成员变量相同会自动初始化成该类型的默认初始值.
常量(Constant)
在 Java 语言中,用关键字 final 来定义一个常量。常量一旦被初始化后不能再更改。
public class Test {public static void main(String[] args) {final double Pl= 3.14;// PI= 3.15; //编译错误,不能再被赋值!double r = 4;double area = Pl*r* r;double circle = 2 * Pl* r;System.out.println("area = " + area);System.out.println("circle ="+ circle);}
}
为了更好的区分和表述,一般将1、2、3、'a' 、 'b'、true、false、”helloWorld”等称为字符常量,而使用 final 修饰的 PI等称为符号常量。
基本数据类型(primitive data type)
Java数据类型分为两大类:基本数据类型(primitive data type)和引用数据类型(referencedata type)。
public class Test {public static void main(String[] args) {
// 方式一:在定义时给出初始值int a = 10;System.out.println(a);// 方式二:在定义时没有给初始值,但使用前必须设置初值int b;b = 10;System.out.println(b);// 使用方式二定义后,在使用前如果没有赋值,则编译期间会报错int c;System.out.println(c);c = 100;
// int型变量所能表示的范围:System.out.println(Integer.MIN_VALUE);System.out.println(Integer.MAX_VALUE);// 注意:在定义int性变量时,所赋值不能超过int的范围int d = 12345678901234; // 编译时报错,初值超过了int的范围}
}
1.float类型又被称作单精度类型,尾数可以精确到7位有效数字。
2.double表示这种类型的数值精度约是float类型的两倍,又被称作双精度类型,绝大部分应用程序都采用double类型。
3.Java浮点类型常量有两种表示形式:
(1)十进制数形式:例:3.14314.00.314(2)科学记数法形式例:3.14e03.14E23.14E-1
4.浮点型不精确,不要用于比较浮点数存在舍入误差,数字不能精确表示。浮点数适合普通的科学和工程计算,精度足够;但不适合精度要求非常高的商业计算,这时候要使用BigDecimal进行运算和比较。
5.浮点常量默认类型是double,要改成float可以后面加F或f
public class Test {public static void main(String[] args) {float f = 3.14F;//float类型赋值时需要添加后缀F/fdouble d1= 3.14;double d2= 3.14D;}
}
ASCII字符集表示了英文字母、数字、特殊字符、控制符,所有字符集的老祖宗,大家都会兼容它。但是一个字节能够表示256个状态,而ASCII字符只用到128个,后面128个一直是空的。于是有了ISO8859-1,别名叫latin-1, 包含了256个字符。前128个字符与ASCII中完全相同。后128个包括了西欧语言、希腊语、泰语、阿拉伯语、希伯来语对应的文字符号。
随着我国的计算机普及,汉字的处理也有了我们自己的方案。那就是GB2312,两个字节表示1个汉字。两个字节可以表示65536个状态,汉字再多也能全部包含。后来,又有了GBK、GB18030。我国的台湾地区自己搞了一套显示繁体中文的大五码BIG5。全世界各个地方,都有自己的文字编码。由于不互通,经常造成乱码的问题。
如果有一种统一的字符集,将世界上所有语言字符都纳入其中,每一个字符都给予一个全球独一无二的编码,那么乱码问题就会消失。于是,全球所有国家和民族使用的所有语言字符的统一字符集诞生了,这就是Unicode字符集。Unicode字符集是为了给全世界所有字符一个唯一的编码,“唯一”对应的英文为Unique,而编码的英文为code。Unicode采用了字符集和编码分开的策略。Unicode之前,Unicode诞生之前可以将字符集和字符编码混为一谈,而在Unicode中必须严格区分开。
Unicode字符集统一采用两个字节表示一个字符,包括英文字母。但是,由于英文占据互联网信息的绝大部分。真实存储和传输时,会造成极大的浪费;因此,目前主要采用UTF8编码来实现具体的存储和传输。
UTF-8是变长编码,用1-6个字节编码Unicode字符。西欧字符仍然是1个字节,汉字3个字节。字符型在内存中占2个字节。在Java中使用单引号来表示字符常量。例如’A’是一
public class Test {public static void main(String[] args) {char c1 = 'A'; // 大写字母char c2 = '1'; // 数字字符System.out.println(c1);System.out.println(c2);
// 注意:java中的字符可以存放整形char c3 = '帅';System.out.println(c3);}
}
1.boolean类型有两个常量值,true和false。
2.在内存中占一个字节或4个字节,不可以使用0 或非0 的整数替代true 和false,这点和C语言不同。【注意点】JVM规范指出boolean当做int处理,也就是4字节,boolean数组当做byte数组处理,这样我们可以得出boolean类型占了单独使用是4个字节,在数组中是确定的1个字节。
public class Test {public static void main(String[] args) {boolean flag;flag = true; flag=false;if (flag) { // true分支} else { //false分支}}
}
1.+,-,*,/,%属于二元运算符。%是取模运算符,就是我们常说的求余数操作。
2.算术运算符中++(自增),--(自减)属于一元运算符。二元运算符的运算规则:整数运算:如果两个操作数有一个为long, 则结果也为long。没有long时,结果为int。即使操作数全为short,byte,结果也是int。浮点运算:如果两个操作数有一个为double,则结果为double。只有两个操作数都是float,则结果才为float。取模运算:其操作数可以为浮点数,一般使用整数,结果是“余数”,“余数”符号和左边操
public class Test {public static void main(String[] args) {int a = 3;int b = a++; //执行完后,b=3。先给b赋值,再自增。System.out.println("a="+a+"\nb="+b);a = 3;b=++a; //执行完后,b=4。a先自增,再给b赋值System.out.println("a="+a+"\nb="+b); }
}
扩展运算符:
public class Test {public static void main(String[] args) {int a=3;int b=4;a+=b; //相当于a=a+b;System.out.println("a="+a+"\nb="+b);a=3;a*=b+3; //相当于a=a*(b+3)System.out.println("a="+a+"\nb="+b);}
}
短路与和短路或采用短路的方式。从左到右计算,如果只通过运算符左边的操作数就能够确定该逻辑表达式的值,则不会继续计算运算符右边的操作数,提高效率。