1、标识符:凡是可以自己命名的地方,都叫标识符。如:类名、方法名、变量名、接口名等。
(1)标识符命名的规则:(要求严格遵守,否则会报编译性的错误)
由26个英文字母大小写,0-9 ,_或 $ 组成
数字不可以开头。
不可以使用关键字和保留字,但能包含关键字和保留字。
Java中严格区分大小写,长度无限制。
标识符不能包含空格。
(2)Java中的名称命名规范:(如果不遵守,也不会报错)
包名:多单词组成时所有字母都小写:xxxyyyzzz
类名、接口名:多单词组成时,所有单词的首字母大写:XxxYyyZzz
变量名、方法名:多单词组成时,第一个单词首字母小写,第二个单词开始每个单词首字母大写:xxxYyyZzz
常量名:所有字母都大写。多单词时每个单词用下划线连接:XXX_YYY_ZZZ
注意:在起名字时,为了提高阅读性,要尽量有意义,“见名知意”。
2、变量:基本数据类型(8个) vs 引用数据类型(类、接口、数组)
(1)java中的变量定义的格式:数据类型 变量名 = 初始化值
如:int i = 10;
(2)变量需先定义,后使用
(3)整型:byte(-128~+127) short int(默认类型) long
long l1 = 3136546548987465L;
注:定义long型变量,值的末尾需加“L”或“l”
(4)浮点型(带小数点的数值):float double(默认类型)
float f1 = 12.3F;
注:声明float类型的浮点型数据,末尾要加“F”或者“f”
(5)字符型(=两个字节):char 只能表示一个字符(英文、中文、标点符号、日 文等)
如:char c1 = 'a';
String str = "ab";
char c3 = '中';
String str1 = "中国";
可以表示转义字符
char c4 = '\t';
char c5 = '\n';
(6)布尔类型:boolean 只能够取值为true 或 false 。不能取值null
3、变量之间的运算
(1)
/*
变量之间的运算:(char byte short int long float double,boolean类型除外)
1.自动类型转换
2.强制类型转换
*/
class TestVeriable1{
public static void main(String[] args){
//1.自动类型转换:当容量小的数据类型与容量大的数据类型做运算时,容量小的会自动转换为
//容量大的数据类型:char,byte,short ===>int ===>long ===>float===double
int i1 = 12;
short s1 = 2;
int i2 = i1 + s1;
float f1 = 12.3F;
float f2 = f1 + i2;
double d1 = f2 + 12.3;
System.out.println(i2);
System.out.println(f2);
char c1 = 'a';//97
c1 = 'A';//65
int i3 = c1 + 1;
System.out.println(i3);
//需要注意的:当char、byte、short之间做运算时,默认的结果为int类型
short ss1 = 12;
byte bb1 = 1;
char cc1 = 'a';
int ii1 = ss1 + bb1;
int ii2 = cc1 + bb1;
//2.强制类型转换:容量大转换为容量小的.要使用强制类型转换符:()
//强制类型转换的问题:导致精度的损失
long l1 = 12345L;
int m1 = (int)l1;
System.out.println(m1);
byte by1 = (byte)m1;
System.out.println(by1);
//平时常用的字符串,也是一种数据类型:String
String nation = "我是一个中国人";
System.out.println(nation);
//字符串与基本数据类型之间的运算:只能是连接运算:+。得到的结果仍为一个字符串
String str = "abc";
String str1 = str + m1;//abc12345
System.out.println(str1);
//题目:
String str1 = "hello";
int myInt1 = 12;
char ch1 = 'a';//97
System.out.println(str1 + myInt1 + ch1);//hello12a
System.out.println(myInt1 + ch1 + str1);//109hello
System.out.println(ch1 + str1 + myInt1);//ahello12
String str2 = "12";
str2 = 12 + "";
}
}
4、进制
(1)对于整数,有四种表示方式:
二进制:0,1 ,满2进1.以0b或0B开头。
十进制:0-9 ,满10进1.
八进制:0-7 ,满8进1. 以数字0开头表示。
十六进制:0-9及A-F,满16进1. 以0x或0X开头表示。此处的A-F不区分大小写。
如:0x21AF +1= 0X21B0
(2)进制的基本转换
十进制 二进制互转
二进制转成十进制 乘以2的幂数
十进制转成二进制 除以2取余数
二进制 八进制互转
二进制 十六进制互转
十进制 八进制互转
十进制 十六进制互转
5、原码、反码、补码
所有数字在计算机底层都以二进制形式存在。
计算机以补码的形式保存所有的整数。
正数的原码、反码、补码都相同
负数的补码是其反码加1。
原码:直接将一个数值换成二进制数。
反码:是对原码按位取反,只是最高位(符号位)确定为1。
Java整数常量默认是int类型,当用二进制定义整数时,其第32位是符号位;当是long类型时,二进制默认占64位,第64位是符号位。
6、测试算术运算符
class TestAri{
public static void main(String[] args){
// 除:/
int i = 12;
int j = i/5;
double d = i / 5;
double d1 = i/5.0;
System.out.println(j);//2
System.out.println(d);//2.0
System.out.println(d1);//2.4
//取模:%:取余数. 结果的符号取决于被模数
int i1 = 12 % 5;
int i2 = -12 % 5;
int i3 = 12 % (-5);
int i4 = -12 % (-5);
System.out.println(i1);
System.out.println(i2);
System.out.println(i3);
System.out.println(i4);
//前++:先自增1,后做运算
//后++:先做运算,后自增1
int myInt1 = 10;
int myInt2 = ++myInt1;//前++
System.out.println(myInt1);//11
System.out.println(myInt2);//11
int myInt3 = 10;
int myInt4 = myInt3++;//后++
System.out.println(myInt3);//11
System.out.println(myInt4);//10
//前--:先自减1,后做运算
//后--:先做运算,后自减1
int myInt5 = 10;
int myInt6 =--myInt5;//前--
System.out.println(myInt5);//9
System.out.println(myInt6);//9
int myInt7= 10;
int myInt8 = myInt7--;//后--
System.out.println(myInt7);//9
System.out.println(myInt8);//10
}
}
注:前++,前--:表示先进行自增或自减的操作再使用变量;后++,后--:表示先使用变量之后再进行自增或自减的操作。
7、逻辑运算符
&—逻辑与 | —逻辑或 !—逻辑非
&& —短路与 || —短路或 ^ —逻辑异或
理解:异或,追求的是“异”!

1 //逻辑运算符: & && | || ! ^ 2 class TestLogic{ 3 public static void main(String[] args){ 4 boolean a = true; 5 boolean b = false; 6 7 System.out.println(a & b); 8 System.out.println(a && b); 9 System.out.println(a | b); 10 System.out.println(a || b); 11 System.out.println(a & !b); 12 System.out.println(a^b); 13 14 //& 与 && 的区别:&:不管左边是true还是false,右端都会进行运算。 15 // &&:当左端为false时,右端不再进行运算 16 //以后使用时,建议使用 && 17 int i1 = 10; 18 if(b & (i1++) > 0){ 19 System.out.println("今天天气很晴朗!"); 20 }else{ 21 System.out.println("今天下雨!"); 22 } 23 System.out.println(i1);//11 24 25 int i2 = 10; 26 if(b && (i2++) > 0){ 27 System.out.println("今天天气很晴朗"); 28 }else{ 29 System.out.println("今天下雨!"); 30 } 31 System.out.println(i2);//10 32 33 34 //| 与 || 的区别:|:当左端为true时,右端照样做运算。 35 // ||:当左端为true时,右端不再进行运算。 36 //我们在使用时,选择:|| 37 int i3 = 10; 38 if(a | i3++ > 0){ 39 System.out.println("今天天气很晴朗!"); 40 }else{ 41 System.out.println("今天下雨!"); 42 } 43 System.out.println(i3);//11 44 45 int i4 = 10; 46 if(a || i4++ > 0){ 47 System.out.println("今天天气很晴朗!"); 48 }else{ 49 System.out.println("今天下雨!"); 50 } 51 System.out.println(i4);//10 52 53 } 54 }
8、位运算符和三元运算符
8.1 位运算符

注:位运算是直接对二进制进行运算。

练习一:
1 //位运算符:<< >> >>> | & ~ ^ 2 class TestBit{ 3 public static void main(String[] args){ 4 int i1 = 31; 5 6 System.out.println(i1<<3);//248(每右移一位乘以2,即:31*2*2*2=248) 7 System.out.println(i1<<28); 8 9 System.out.println(i1>>2);//7 10 System.out.println(i1>>>2);//7 11 12 int i2 = -31; 13 System.out.println(i2>>2);//-8 14 System.out.println(i2>>>2);//1073741816 15 16 System.out.println(12 & 5);//4 17 System.out.println(12 | 5);//13 18 System.out.println(12 ^ 5);//9 19 System.out.println(~12);//-13(~表示取反) 20 21 } 22 }
8.2 三元运算符
格式:
(条件表达式)? 表达式1:表达式2;
为true,运算后的结果是表达式1;
为false,运算后的结果是表达式2;
表达式1和表达式2为同种类型。
三元运算符与if-else的联系与区别:
1)三元运算符可简化if-else语句
2)三元运算符要求必须返回一个结果。
3)if后的代码块可有多个语句
练习一:
1 /* 2 三元运算符:(条件表达式)? 表达式1 : 表达式2; 3 要求:表达式1与表达式2为同种数据类型。 4 既然是运算符,就一定会有运算的结果,结果的数据类型与表达式1,2的类型一致。 5 三元运算符在一定程度上可以与if-else互换。(三元运算符一定可以转换为if-else,反之不成立。) 6 */ 7 8 class TestSanYuan{ 9 public static void main(String[] args){ 10 int i = 20; 11 int j = 20; 12 //此时max记录了i与j的较大值 13 int max = (i > j)? i : j; 14 15 //String str = (i > j)? "i大" : "j大"; 16 String str = (i > j)? "i大" : (i == j)? "相等" : "j大"; 17 18 //String str1 = (i > j)? i : "j大"; 19 System.out.println(max); 20 System.out.println(str); 21 22 //互换 23 if(i >= j){ 24 System.out.println("较大值为:" + i); 25 }else{ 26 System.out.println("较大值为:" + j); 27 } 28 29 //练习:如何使用三元运算符,输出三个数中的较大值。 30 int m = 12; 31 int n = 23; 32 int k = -9; 33 int max1 = (m > n)? m : n; 34 int max2 = (max1 > k)? max1 : k; 35 System.out.println(max2); 36 } 37 }
练习二:
1 class TestExer1{ 2 public static void main(String[] args){ 3 int m = 12; 4 int n = 5; 5 System.out.println("m:" + m + " n:" + n); 6 // 方法一:提供一个临时变量。 7 // int temp = m; 8 // m = n; 9 // n = temp; 10 // System.out.println("m:" + m + " n:" + n); 11 12 //方法二:当m和n较大时,有可能出现精度损失 13 //m = m + n;//m = 12 + 5; 14 //n = m - n;//n = 17 - 5; 15 //m = m - n;//m = 17- 12 16 //System.out.println("m:" + m + " n:" + n); 17 18 //方法三:优点:没有上面两种方法的缺点。 缺点:难! 19 m = m ^ n; 20 n = m ^ n;//(m ^ n) ^ n == m 21 m = m ^ n;//(m ^ n) ^ m == n 22 System.out.println("m:" + m + " n:" + n); 23 24 //问题: 25 //60 手动的方式,从控制台输出60的十六进制。 26 int i = 60; 27 //自动调用Integer类现成的方法 28 String binary = Integer.toBinaryString(i); 29 30 System.out.println(binary);//二进制 31 32 String hex = Integer.toHexString(i); 33 System.out.println(hex);//十六进制 34 35 36 // char c1 = 'a'; 37 // char c2 = (char)(c1 + 2); 38 // System.out.println(c2);//c 39 40 41 int j = i & 15;//获取到i的最低4位对应的值。 42 String k1 = (j <= 9)? j + "" : (char)(j - 10 + 'a') + ""; //转为字符串 43 //System.out.println(k1); 44 45 i = i >> 4; 46 int z = i & 15;//获取到i的最高4位对应的值。 47 String k2 = (z <= 9)? z + "" : (char)(z - 10 + 'a') + ""; 48 // System.out.println(z); 49 System.out.println(k2 + k1); 50 } 51 }
9、程序流程控制
顺序结构
程序从上到下逐行地执行,中间没有任何判断和跳转。
分支结构
根据条件,选择性地执行某段代码。
有if…else和switch两种分支语句。
循环结构
根据循环条件,重复性的执行某段代码。
有while、do…while、for三种循环语句。
注:JDK1.5提供了foreach循环,方便的遍历集合、数组元素。
9.1 分支语句1: if-else语句
if语句三种格式:
1. if(true){
执行代码块;
}
2. if(条件表达式){
执行代码块;
}
else{
执行代码块;
}
3. if(条件表达式){
执行代码块;
}
else if (条件表达式){
执行代码块;
}
……
else{
执行代码块;
}
举例:
1 //流程控制:顺序结构;分支结构(if-else;switch-case);循环结构(while;do...while;for(;;)) 2 class TestSortStruc{ 3 public static void main(String[] args) { 4 int i = 12; 5 int j = i + 1; 6 7 System.out.println(j);//13 8 9 int m = 10; 10 int n = m + 1; 11 System.out.println(n); 12 } 13 }
1 /* 2 注:执行if-else语句时,一定会选择其中的一个路径执行,而且也仅会选择一条路径。 3 */ 4 class TestIf1 { 5 public static void main(String[] args){ 6 int age = 28; 7 8 if(age > 18){ 9 System.out.println("你已经成年了!"); 10 }else{ 11 System.out.println("你还未成年!"); 12 } 13 14 if(age > 130 || age < 0){ 15 System.out.println("估计你不是人!"); 16 }else if(age < 30){ 17 System.out.println("人家还很年轻,只有" + age + "岁啦!"); 18 }else{ 19 System.out.println("别追我了,我都有两个娃了!"); 20 } 21 22 if(age < 30){//如果age<30,只执行第一个就跳出整个循环。 23 //1. 24 }else if(age < 60){ 25 //2. 26 }else if(age < 100){ 27 //3. 28 }else{ 29 //4. 30 } 31 32 } 33 }
1 //1.导包 2 import java.util.Scanner; 3 class TestScanner{ 4 public static void main(String[] args){ 5 //2.创建一个Scanner类的对象 6 Scanner s = new Scanner(System.in); 7 System.out.println("请输入一个字符串:"); 8 //3.调用此对象的相应的方法,完成键盘输入的值的获取 9 //next():表示从键盘获取一个字符串 10 String str = s.next(); 11 12 System.out.println(str); 13 } 14 }
1 /* 2 从键盘输入小明的期末成绩。 3 当成绩为100分时,奖励一辆汽车; 4 当成绩为(80,99]时,奖励一个台iphone7s; 5 当成绩为[60,80]时,奖励一本参考书; 6 其它时,什么奖励也没有。 7 8 1.条件判断之间可以嵌套 9 2. ①如果多个条件之间是“互斥”关系,多个条件语句上下顺序是自由的。 10 ②如果多个条件之间存在“包含”关系,要求范围小的写在范围大的上面。 11 */ 12 import java.util.Scanner; 13 class TestIf2{ 14 public static void main(String[] args) { 15 16 Scanner s = new Scanner(System.in); 17 System.out.println("请输入小明的期末成绩:(分)"); 18 int score = s.nextInt(); 19 20 if(score >100 || score < 0){ 21 System.out.println("你输入的数值有误!"); 22 }else{//if-else语句可以嵌套 23 if(score == 100){ 24 System.out.println("奖励一辆汽车"); 25 }else if(score > 80){ 26 System.out.println("奖励一个iphone7s"); 27 }else if(score >= 60){ 28 System.out.println("奖励一本参考书"); 29 }else{ 30 System.out.println("什么奖励也没有"); 31 } 32 } 33 34 } 35 }
练习一:编写程序:由键盘输入三个整数分别存入变量num1、num2、num3,对它们进行排序(使用 if-else if-else),并且从小到大输出。
1 /* 2 编写程序:由键盘输入三个整数分别存入变量num1、num2、num3, 3 对它们进行排序(使用 if-else if-else),并且从小到大输出。 4 5 说明:如果if-else if-else条件的执行语句块{}只有一条语句的话,那么这一对{}可以省略 6 建议:不要省略{} 7 */ 8 import java.util.Scanner; 9 class TestIf3{ 10 public static void main(String[] args) { 11 //1.从键盘获取三个整数 12 Scanner s = new Scanner(System.in); 13 System.out.println("请输入第一个整数:"); 14 int num1 = s.nextInt(); 15 System.out.println("请输入第二个整数:"); 16 int num2 = s.nextInt(); 17 System.out.println("请输入第三个整数:"); 18 int num3 = s.nextInt(); 19 20 //2.对num1,num2,num3从小到大排序 21 System.out.println("从小到大的排序为:"); 22 if(num1 > num2){ 23 if(num3 > num1) 24 System.out.println(num2 + "," + num1 + "," + num3); 25 //System.out.println("helloworld"); 26 else if(num3 < num2) 27 System.out.println(num3 + "," + num2 + "," + num1); 28 else 29 System.out.println(num2 + "," + num3 + "," + num1); 30 31 }else{ 32 if(num3 > num2) 33 System.out.println(num1 + "," + num2 + "," + num3); 34 else if(num3 < num1) 35 System.out.println(num3 + "," + num1 + "," + num2); 36 else 37 System.out.println(num1 + "," + num3 + "," + num2); 38 39 } 40 41 } 42 }
9.2 分支结构2:switch语句
switch(变量){
case 常量1:
语句1;
break;
case 常量2:
语句2;
break;
… …
case 常量N:
语句N;
break;
default:
语句;
break;
}
举例:
1 /* 2 switch(变量){ 3 case 值1: 4 5 case 值2: 6 7 case 值3: 8 9 default: 10 11 } 12 1.根据变量的值,选择相应的case去判断,一旦满足case条件,就执行case的相应语句。如果没有break或者已经 13 到结尾的话,会继续执行其下的case语句。 14 2.default:是可选的,而且位置是灵活的。 15 3.变量可以是哪些类型?char byte short int 枚举 String(jdk1.7) 16 4.case 条件:其中条件只能是值,不能是取值范围! 17 */ 18 class TestSwitch1 { 19 public static void main(String[] args) { 20 int i = 2; 21 switch(i){ 22 23 case 0: 24 System.out.println("zero"); 25 break; 26 case 1: 27 System.out.println("one"); 28 break; 29 case 2: 30 System.out.println("two"); 31 break; 32 case 3: 33 System.out.println("three"); 34 break; 35 default: 36 System.out.println("other"); 37 break; 38 } 39 /* 40 switch(i){//case后面只能写值,不能写范围。 41 case (i > 2): 42 System.out.println("a"); 43 break; 44 case (i > 5): 45 System.out.println("b"); 46 break; 47 default: 48 System.out.println("c"); 49 break; 50 } 51 */ 52 } 53 }
1 class TestSwitch2{ 2 public static void main(String[] args) { 3 4 String season = "SPRING"; 5 6 switch(season){ 7 case "SPRING": 8 System.out.println("春天"); 9 break; 10 case "SUMMER": 11 System.out.println("夏天"); 12 break; 13 case "AUTUMN": 14 System.out.println("秋天"); 15 break; 16 case "WINTER": 17 System.out.println("冬天"); 18 break; 19 default: 20 System.out.println("输入有误"); 21 break; 22 23 } 24 25 26 27 } 28 }
练习一:
1 /* 2 对学生成绩大于60分的,输出“合格”。低于60分的,输出“不合格”。 3 4 说明: 5 1.当多个case语句处理的语句块一致时,可以统一来书写 6 2.一定情况下switch-case与if-else之间可以相互转换。 7 */ 8 class TestSwitch3 { 9 public static void main(String[] args){ 10 int score = 69; 11 if(score >= 60){ 12 System.out.println("及格"); 13 }else{ 14 System.out.println("不及格"); 15 } 16 /* 17 switch(score){ 18 case 100: 19 ... 20 case 0: 21 default: 22 } 23 */ 24 switch(score / 10){ 25 case 10: 26 case 9: 27 case 8: 28 case 7: 29 case 6: 30 System.out.println("及格"); 31 break; 32 case 5: 33 case 4: 34 case 3: 35 case 2: 36 case 1: 37 case 0: 38 System.out.println("不及格"); 39 break; 40 default: 41 System.out.println("输入有误"); 42 break; 43 44 } 45 46 } 47 }
练习二:
1 /* 2 编写程序:从键盘上输入2014年的“month”和“day”,要求通过程序输出输入的日期为2014年的第几天 3 */ 4 import java.util.Scanner; 5 class TestSwitch4{ 6 public static void main(String[] args) { 7 Scanner s = new Scanner(System.in); 8 System.out.println("请输入月份:"); 9 int month = s.nextInt(); 10 System.out.println("请输入日期:"); 11 int day = s.nextInt(); 12 13 int sum = 0;//用来记录month月day日是2014年第几天 14 //使用switch-case 15 switch(month){ 16 17 case 12: 18 sum += 30;//30:十一月份的总天数 19 case 11: 20 sum += 31; 21 case 10: 22 sum += 30; 23 case 9: 24 sum += 31; 25 case 8: 26 sum += 31; 27 case 7: 28 sum += 30; 29 case 6: 30 sum += 31; 31 case 5: 32 sum += 30; 33 case 4: 34 sum += 31; 35 case 3: 36 sum += 28; 37 case 2: 38 sum += 31;//31:是一月份的天数 39 case 1: 40 sum += day; 41 42 } 43 44 System.out.println(sum); 45 } 46 }
练习三:
1 /* 2 编写程序:从键盘上读入一个学生成绩,存放在变量score中,根据score的值输出其对应的成绩等级: 3 4 score>=90 等级:A 5 70<=score<90 等级: B 6 60=<score<70 等级: C 7 score<60 等级:D 8 9 */ 10 import java.util.Scanner; 11 class TestScore{ 12 public static void main(String[] args) { 13 Scanner s = new Scanner(System.in); 14 System.out.println("请输入学生的成绩:"); 15 int score = s.nextInt(); 16 char level; 17 /* 18 if(score >= 90){ 19 level = 'A'; 20 }else if(score >= 70){ 21 level = 'B'; 22 }else if(score >= 60){ 23 level = 'C'; 24 }else{ 25 level = 'D'; 26 } 27 */ 28 switch(score / 10){ 29 case 10: 30 case 9: 31 level = 'A'; 32 break; 33 case 8: 34 case 7: 35 level = 'B'; 36 break; 37 case 6: 38 level = 'C'; 39 break; 40 default: 41 level = 'D'; 42 break; 43 } 44 45 System.out.println("score:" + score + ",level:" + level); 46 } 47 }
练习四:
1 //从键盘分别输入年、月、日,判断这一天是当年的第几天 2 import java.util.Scanner; 3 class TestYearMonthDay{ 4 public static void main(String[] args) { 5 Scanner s = new Scanner(System.in); 6 System.out.println("请输入年份:"); 7 int year = s.nextInt(); 8 System.out.println("请输入月份:"); 9 int month = s.nextInt(); 10 System.out.println("请输入日期:"); 11 int day = s.nextInt(); 12 13 int sum = 0;//用来记录year年month月day日是year年第几天 14 //使用switch-case 15 switch(month){ 16 17 case 12: 18 sum += 30;//30:十一月份的总天数 19 case 11: 20 sum += 31; 21 case 10: 22 sum += 30; 23 case 9: 24 sum += 31; 25 case 8: 26 sum += 31; 27 case 7: 28 sum += 30; 29 case 6: 30 sum += 31; 31 case 5: 32 sum += 30; 33 case 4: 34 sum += 31; 35 case 3: 36 if((year % 4 == 0 && year % 100 != 0) || year % 400 == 0){ 37 sum += 29; 38 }else{ 39 sum += 28; 40 } 41 case 2: 42 sum += 31;//31:是一月份的天数 43 case 1: 44 sum += day; 45 46 } 47 System.out.println(sum); 48 } 49 }
9.3 for循环

浙公网安备 33010602011771号