标识符定义是:
四个可以:可以是数字、字母(不仅仅是26个字母,也包含中文、或者其他语言)、下划线_、美元符号$。
两不可以:不可以是以数字开头,不可以是关键字命名。
一见:见名知意,增强可读性。
大小写敏感:int a ; int A。
遵循驼峰命名:
类名:首字母大写,其余遵循驼峰命名
方法名,变量名:首字母小写,其余遵循驼峰命名
包名:全部小写,不遵循驼峰命名
常见关键字,见一个认识一个,关键词表如下:
官方地址点击跳转
常量的定义是一个固定值,常见的是字面常量, 比如,123,‘a’,true等等,后面将会学习到的用final修饰的字符常量。
package com.rucoding.d2;package com.rucoding.d2;
/**
* 变量的声明、赋值、使用。
* @author LiuYiXin
*
*/
public class Variable01 {
public static void main(String[] args) {
//变量的定义方式: java是强类型的语言,即是声明变量,必须为其声明类型 ,例如 type varName [=varValue];
//int age;
int age = 10;
System.out.println("age=" + age); //局部变量必须经过初始化
System.out.println("10年后的age:"+ (age + 10));
}
}
变量的内存,内存只占用一块空间。引用指向,例如,int age = 10 , 在内存开辟一块空间0x0101(假设),负责存放数字10,定义一个变量名为age的,将开辟的空间值赋值给age变量。
变量的作用域:变量可以分为成员变量和局部变量。
成员变量是直接分配内存,定义成员变量可以不经过初始化,JVM系统会自动为其分配默认值的。
局部变量:定义在方法内的变量,在参与运算之前必须进行初始化操作,若仅仅是接收某一表达式运算的结果,则可以不进行初始化操作。
package com.rucoding.d2;
/**
* 变量的作用域
* @author LiuYiXin
*
*/
public class Variable02 {
//定义成员变量,并且不赋值
static int age;
public static void main(String[] args) {
//main方法内定义局部变量
int age = 18; //只在main方法体起作用,必须经过初始化
System.out.println(age);//就近输出原则
printAge();//调用打印age方法,此时age的值为成员变量的age,默认系统赋值为0
int a = 10, b;
b = a + 10; //变量b仅仅是接收某一表达式的运算结果,可以不进行初始化操作。
System.out.println("b=" + b);
}
//打印age方法
public static void printAge(){
System.out.println(age);
}
}
整数类型:byte、short、int、long类型
java的整数类型默认是int类型,声明long类型的常量的须后加 ‘l’ 或者 ‘L’ 。
java程序中变量通常使用int类型(约21亿),除非表示的数很大,才会使用long类型
package com.rucoding.d2;
/**
* 整数变量
* @author LiuYiXin
*
*/
public class Variable03 {
public static void main(String[] args) {
//1.整型: byte(1字节=8bit) \ short(2字节=16bit) \ int(4字节) \ long(8字节)
//① byte范围: 8bit, 每个存储0或1 两种可能,则2的8次方=256.为了表示正负,分成一半,即是范围 -128 ~ 127 (中间0)
byte b1 = 12;
byte b2 = -128;
// byte b3 = 128; //编译不通过
System.out.println(b1);
System.out.println(b2);
short s1 = 128;
int i1 = 1024;//通常情况下,定义整数类型,使用的是int类型(约21亿)
//② 声明long类型,必须是'l'或 'L'结尾
long l1 = 324344434334344L; //不加默认是int类型,必须加L声明 (此时不加,会报错超出int类型的值)
System.out.println(l1);
}
}
JAVA的浮点型常量默认是double类型,声明 float类型常量时候, 须后加 ‘f’ 或者 ‘F’。
//2.浮点型:float(4字节) \ double (8字节)
//① 浮点型,表示带小数点的数值
//② float表示的数值范围比long还大。涉及底层存储方式...
double d1 = 12.3;
System.out.println(d1 + 1);
//③ 声明float变量时候,须后加 'f' 或者 'F'
float f1 = 12.3F; //不加f或F.则浮点型默认为double类型,此时大类型double转为小类型float.强转得加float
System.out.println(f1);
编码和字符集
首先,查看一下常用的编码有哪些。其中ANSI在中国大陆即为GBK(以前是GB2321),最常用的是 GBK 和 UTF8无BOM格式。
package com.rucoding.d3;
public class CharacterChar {
public static void main(String[] args) {
//字符类型: char字符类型 (1字符 = 2字节)
//① 定义char类型,只能使用一对单引号,内部只能使用一个字符
char c1 = 'a';
// char c2 = 'ab'; //编译不通过
char c2 = '1';
char c3 = '中';
char c4 = 'F';
System.out.println(c1);
//表示形式: ①.声明一个字符; ②.转义字符; ③.直接使用Unicode值来表示字符型变量
char c5= '\n'; //换行符
c5 = '\t'; //制表符 tab
System.out.print("Hello" + c5);
System.out.println("World");
//直接使用Unicode来表示
char c6 = '\u0043';
System.out.println(c6);
}
}
编写一段测试代码,另存到本地的磁盘,文件的格式默认为UTF-8,此时打开cmd窗口,进行编译运行操作, 发现输出的中文乱码了。图示测试:
解释:cmd窗口默认的编码格式为GBK格式, 可以修改java源文件的格式, 另存选择 ANSI编码(即GBK格式)。修改完成,重新编译运行, 即可正常输出中文格式。
//布尔类型: boolean
//boolean类型只能取两个值,true 或者false
//使用场景: 常常是在条件判断,或者循环结构下使用的
// boolean型变量是类变量,则默认值为false.
static boolean defalutResult;//
System.out.println(defalutResult); //false
boolean isMarried = true;
if(isMarried){
System.out.println("你不能参加\"单身\"party了");//这里想将 单身 用引号括起来,利用转义字符\"
}else{
System.out.println("你可以考虑一下");
}
前提: 这里讨论分析的只有七种基本数据类型之间的运算, 不包含boolean类型。
1、自动类型转换:容量小的类型自动转换为容量大的数据类型。即是
当容量小的数据类型的变量与容量大的数据类型的变量做运算时候,结果自动提升为容量大的数据类型。(这里的容量大小指的是 该数据类型的范围大小。比如:float容量大于long容量的)。
特别强调: 当byte、char、short类型进行运算的时候,结果为int,为啥这么规定, 可能是考虑它们的存储范围小,容易超出,所以如此设计???
代码练习:
package com.rucoding.d2;
public class Variable04 {
public static void main(String[] args) {
//自动类型提升
byte b1 = 12;
int i1 = 128;
// byte b2 = b1 + i1; //此时编译不通过
int i2 = b1 + i1;
long l1 = b1 + i1;
System.out.println(i2);
System.out.println(l1);
float f1 = b1 + i1;
System.out.println(f1);
//***以下演示结论,重点***
char c1 = 'a';
int i3 = 13;
int i4 = c1 + i3;
System.out.println(i4);//结果110
short s1 = 10;
// char c2 = c1 + s1;//此时编译不通过
// short s2 = c1 + s1;//此时编译不通过
byte b2 = 10;
// char c3 = c1 + b2;//此时编译不通过
//结论: java在做运算的时候,如果操作数均在int范围内,那么一律在int空间内运算.
//简而言之,就是当byte、char、short三种数据类型的变量做运算时候,结果为int类型
}
}
2、强制类型转换: 自动类型提升运算的逆运算。
(1).需要使用强转符:()
(2).注意点:强制类型转换,可能导致精度损失。
代码演示:
package com.rucoding.d2;
public class Variable05 {
//强转类型转换: 自动类型提升运算的逆运算
//1、需要强转符
//2、强制类型转换,可能会导致精度损失
public static void main(String[] args) {
double d1 = 12.9;
int i1 = (int)d1; //进行的是截断操作,精度损失
System.out.println(i1);//12
long l1 = 123;
short s2 = (short)l1;
System.out.println(s2);//没有精度损失
int i2 = 128;
byte b2 = (byte)i2;
System.out.println(b2);//-128 精度损失
}
}
(1)、String 属于引用数据类型,表示字符串。
(2)、声明String类型时候,使用一对双引号 " "
(3)、String类型可以和8种基本数据类型变量做运算,且运算只能是连接的运算:+
(4)、运算的结果还是 String类型。
代码演示:
package com.rucoding.d3;
/**
* @author LiuYiXin
*
*/
public class DataTypeString {
public static void main(String[] args) {
//String类型的定义: 使用一对双引号""
String s1 = "hello";
String s2 = "a";
String s3 = "";
System.out.println(s2);
// char c = '';//编译不通过,必须定义一个字符内容
//连接运算
int number = 1001;
String numberStr = "学号: ";
String info = numberStr + number; // + 为连接运算
System.out.println(info);
boolean b1 = true;
String info1 = info + b1;
System.out.println(info1); //+ 为连接运算
}
}
代码演示1:
char c = 'a';
int num = 10;
String str = "hello";
System.out.println(c + num + str); //前+是做运算的,a转为97, 后+是连接字符串的, 输出107hello
System.out.println(c + str + num); //前+是连接字符串的,连接为ahello,结果为String类型,连接后面的 ahello10
System.out.println(c + (num + str));//先运行括号的,有String类型,进行连接操作,结果是String类型,继续连接,输出a10hello
System.out.println(str + num + c);//开始为String类型,结果还是String类型,输出hello10a
小结: 做java运算时候,判断 加号 + 是做连接还是运算的操作,看String类型出现与否。做运算,char类型进行转义,有String类型为连接操作。
代码演示2:
//输出* *
System.out.println("* *"); //正确
System.out.println('*' + '\t' + '*');//单引号为char字符, +表示的运算操作,结果int类型,表示数字
System.out.println('*' + "\t" + '*'); //正确, 字符串连接操作
System.out.println('*' + '\t' + "*");//先运算,结果int类型的,再进行连接
System.out.println('*' + ('\t' + "*"));//正确, 先括号执行,是连接操作