3.Java数据结构
1.Java关键字和保留字


1.1.标示符

package plugins_test1; /** 标示符的使用 1.标示符:凡是可以自己起名字的地方都叫标示符,比如:类名、变量名、方法名、包名、接口名 2.标示符的命名规则:--->如果不遵守,编写会不能通过 有26个英文字母大小写,0-9,_或$组成 数字不可以开头 Java中严格区分大小写,长度无限制 标示符不能包含空格 3.Java中的名称和命名规范 包名:多单词组成时所有字母都小写:xxxyyyzzz 类名、接口名:多单词组成时,所有单词的首字母大写:XxxYyyZzz 变量名、方法名:多单词组成时,第一个单词首字母小写,第二个单词开始每个单词首字母大写:xxxYyyZzz 常量名:所有字母都大写。多单词时每个单词用下划线连接:XXX_YYY_ZZZ --->注意1:在起名字时,为了提高阅读性,要尽量有意义,“见名知意”。 --->注意2:java采用unicode字符集,因此标识符也可以使用汉字声明,但是不建议使用。 */ public class identifierTest { public static void main(String[] args) { int mynumber=1001; System.out.println(mynumber); } }
2.变量
- 变量的概念:
1.内存中的一个存储区域
2.该区域的数据可以在同一类型范围内不断变化
3.变量是程序中最基本的存储单元。包含变量类型、变量名和存储的值
- 变量的作用:
用于在内存中保存数据
- 使用变量注意:
Java中每个变量必须先声明,后使用
使用变量名来访问这块区域的数据
变量的作用域:其定义所在的一对{}内
变量只有在其作用域内才有效
同一个作用域内,不能定义重名的变量

package plugins_test1; /** 1.java定义变量的格式:数据类型 变量名=变量值; 2.说明: 1.变量必须先声明,后使用 2.变量都定义在其作用域内。在作用域内,它是有效的。换句话说,出了作用域,就失效了 3.同一个作用域内,不可以声明两个同名的变量 */ public class VariableTest { public static void main(String[] args) { //变量的定义 int myAge=24; //变量的使用 System.out.println(myAge); //变量的声明 int myNumber; //变量的赋值 myNumber=1001; //输出变量值 System.out.println(myNumber); } }
2.1.变量的分类

2.2.整数类型

2.3.浮点型
package plugins_test1; class VariableTest { public static void main(String[] args) { //1.整型:byte(1字节=8bit)、short(2字节)、int(4字节)、long(8字节) //byte范围:-128~127 byte b1=12; byte b2=-128; //b2=128;编译不通过 System.out.println(b1); System.out.println(b2); //2.声明long型变量,必须以l或L结尾,同通常定义整型变量时,使用int型。 short s1=128; int i1=1234; long l1=341413128; System.out.println(l1); //3.浮点型:float(4字节)\double(8字节) //浮点型,表示带小数点的数值 //float表示数值的范围比long还大 double d1=123.3; System.out.println(d1+1); //定义float类型变量时,变量以f或F结尾 float f1=12.3F; System.out.println(f1); //通常,定义浮点型变量时,使用double型 } }
2.4.char字符类型

class VariableTest { public static void main(String[] args) { //字符型:char(1字符=2字节) // 定义char型变量,通常使用一对'',内部只能写一个字符 char c1='a'; c1='A'; System.out.println(c1); //表示方式:1.声明一个字符 2.转义字符 char c5='\n';//换行符 c5='\t';//制表符 System.out.print("hello"+c5); System.out.println("world"); //3.直接使用unicode值来表示字符型常亮 char c6='\u0043'; System.out.println(c6); } }
2.5.unicode编码

2.6.了解UTF-8

2.7.布尔类型

class VariableTest { public static void main(String[] args) { //布尔型 //只能取两个值之一,true、false,常常用在条件判断,循环结构中使用 boolean bb1=true; System.out.println(bb1); boolean isMarried=true; if (isMarried){ System.out.println("你不能参加单身party了"); }else{ System.out.println("你可以多谈谈女朋友!"); } } }
自动类型提升
class VariableTest { public static void main(String[] args) { byte b1=2; int i1=12; //编译不通过 //byte b2=b1+i1; int i2=b1+i1; long l1=b1+i1; System.out.println(i2); float f=b1+i1; System.out.println(f); short s1=123; double d1=s1; System.out.println(d1);//123.0 char c1='a'; //a字符在ascill码表里代表97 int i3=10; int i4=c1+i3; System.out.println(i4); } }
强制类型
package plugins_test1; /** 1.强制类型转换:自动类型提升运算的逆运算 1.需要使用强转符:() 2.注意点:强制类型转换,可能导致精度损失 */ class VariableTest { public static void main(String[] args) { double d1=12.3; //精度损失举例1 int i1=(int)d1;//截断操作 System.out.println(i1);//12 //没有精度损失 long l1=123; short s3=(short)l1; System.out.println(l1); //精度损失举例2 int i2=128; byte b=(byte)i2; System.out.println(b); //-128 } }

补充:强制类型转换
package plugins_test1; /** 1.强制类型转换:自动类型提升运算的逆运算 1.需要使用强转符:() 2.注意点:强制类型转换,可能导致精度损失 */ class VariableTest { public static void main(String[] args) { //1.编码情况1: long l=123213; System.out.println(l); //编译失败:过大的整数 //long l1=213123123123131 long l1=1231623131231312312L; //编译失败 //float f1=12.3; //2.编码情况2: //整型常量,默认类型为int型 //浮点型常量,默认类型为double型 byte b=12; //byte b1=b+1;//编译失败 //float f1=b+12.3;//编译失败 } }
2.8.Sring类型

练习1



3.进制
package plugins_test1; /** 计算机不同进制的使用说名 对于整数,有四种表示方式: 二进制(binary):0,1 ,满2进1.以0b或0B开头。 十进制(decimal):0-9 ,满10进1。 八进制(octal):0-7 ,满8进1. 以数字0开头表示。 十六进制(hex):0-9及A-F,满16进1. 以0x或0X开头表示。此处的A-F不区分大小写。 如:0x21AF +1= 0X21B0 */ public class BinaryTest { public static void main(String[] args) { int num1=0b110; int num2=110; int num3=0127; int num4=0x110A; System.out.println("num1="+num1); System.out.println("num2="+num2); System.out.println("num3="+num3); System.out.println("num4="+num4); } }





4.运算符

4.1.算数运算符

package plugins_test1; /** 运算符之一:算数运算符 + - + - * / %(前)++(后)++(前)--(后)-- +(连接) */ public class AriTest { public static void main(String[] args) { //除法 int num1=12; int num2=5; int result=num1/num2; System.out.println(result);//2 int result1=num1/num2*num2; System.out.println(result1);//10 double result2=num1/num2; System.out.println(result2); //2.0 double result3=num1/(num2+0.0); System.out.println(result3); //2.4 //%:取余运算 //结果的符号与被模数的符号相同 //开发中,经常使用%来判断能否被除尽的情况 int m1=12; int n1=5; System.out.println("m1%n1="+m1%n1); int m2=-12; //被模数 int n2=5; System.out.println("m2%n2="+m2%n2); //(前)++:先自增1,然后在运算,自增1不回改变变量的数据类型 //(后)++:先运算,后自增1 int a1=10; int b1=++a1; System.out.println("a1="+a1+",b1="+b1); int a2=10; int b2=a2++;//先将变量值单独拎出来赋值,然后变量在自增1 System.out.println("a2="+a2+",b2="+b2); //(前)--:先运算,后减去一 //(后)--:先减一,后运算 int a4=10; int b4=--a4; System.out.println("a4="+a4+",b4="+b4); } }
package plugins_test1; /** 运算符之一:算数运算符 + - + - * / %(前)++(后)++(前)--(后)-- +(连接) */ public class AriTest { public static void main(String[] args) { int i1=10; int i2=20; int i=i1++; System.out.println("i="+i); //10 System.out.println("i1="+i1); //11 i=++i1; //11 System.out.println("i="+i);//12 System.out.println("i1="+i1);//12 i=i2--; System.out.println("i1="+i);//20 System.out.println("i2="+i2);//19 i=--i2; System.out.println("i="+i);//18 System.out.println("i2="+i2);//18 } }

package plugins_test1; /** 随意给出一个三位数的整数,打印显示它的个位数,十位数,百位数的值。 例如: 数字153的情况如下: 个位数: 十位数:5 百位数:1 */ public class AriTest { public static void main(String[] args) { int num=187; int bai=num/100; int shi=num%100/10; //先取模100,余数为87 int ge=num%10; System.out.println("百位为:"+bai); //1 System.out.println("十位为:"+shi); //8 System.out.println("个位为:"+ge); //7 } }
4.2.比较运算符

package plugins_test1; /** * 运算符之二:赋值运算 */ public class SetValuesTest { public static void main(String[] args) { //赋值符号:= int i1 = 10; int j1 = 10; int i2, j2; //连续赋值 i2 = j2 = 10; int i3 = 10, j3 = 20; int num1 = 10; num1 += 2; //num=num+2; System.out.println(num1); //12 int num2=12; num2%=5; //num2=num2%5 System.out.println(num2); //2 short s1=10; //s1=s1+2; 编译失败 s1+=2; //结论:不会改变变量本身的数据类型 System.out.println(s1); //开发中实现变量+2的操作 //方式一:num=num+2 //方式二:num+=2;(推荐) //开发中实现变量+1的操作 //方式一:num=num+1 //方式二:num+=1; //方式三:num++;(推荐) } }

4.3.逻辑运算符

package plugins_test1; /** * 运算符之四:逻辑运算符 * <p> * & && | || ! ^ * <p> * 说明: * 1.逻辑运算符操作的都是boolean类型的变量 */ public class SetValuesTest { public static void main(String[] args) { //区分&与&& //相同点1:&与&&的运算结果相同 //相同点2:当符号左边是true时,二者都会执行符号右边的运算 //不同点:当符号左边是false时,&继续执行符号右边的运算。&&步骤不再执行符号右边的运算 //开发中,推荐使用&& boolean b1 = true; b1 = false; int num1 = 10; if (b1 & (num1++ > 0)) { System.out.println("我现在在北京"); } else { System.out.println("我现在在南京"); } System.out.println("num1=" + num1); boolean b2 = true; b2 = false; int num2 = 10; if (b2 && (num2++ > 0)) { System.out.println("我现在在美国"); } else { System.out.println("我现在在韩国"); } System.out.println("num2=" + num2); //区分:|与|| //相同点1:|与||的运算结果相同 //相同点2:当符号左边是false时,二者都会执行符号右边的运算 //不同点3:当符号左边是true时,|继续执行符号右边的运算,而||不再执行符号右边的运算 //开发中,推荐使用|| boolean b3=false; int num3=10; if(b3|(num3++>0)){ System.out.println("我在浪漫的土耳其"); }else{ System.out.println("我不在浪漫的土耳其"); } System.out.println("num3="+num3); boolean b4=false; int num4=10; if (b4 ||(num4++>0)) { System.out.println("我在山东青岛"); }else{ System.out.println("我不在山东青岛"); } System.out.println("num4="+num4); } }
4.4.位运算符




package plugins_test1; /** * 运算符之五:位运算符(了解) * 结论: * 1.位运算符操作的都是整型的数据 * 2.<<:在一定范围内,每向左移一位,相当于在原来的值再去*2 * 3.>>:在一定范围内,每向右移一位,相当于在原来的值再去/2 */ public class SetValuesTest { public static void main(String[] args) { int i = 21; //底层用的是二进制得出的结果 System.out.println("i<<2:" + (i << 2)); //84 System.out.println("i<<3:" + (i << 3)); //168 System.out.println("i<<27:" + (i << 27)); //-1476395008 int m = 12; int n = 5; System.out.println("m&n:" + (m & n)); //4 System.out.println("m|n:" + (m | n)); //13 System.out.println("m^n:" + (m ^ n)); //9 //练习:交换两个变量的值 int num1=10; int num2=20; //交换前 System.out.println("num1="+num1+",num2="+num2); //num1=10,num2=20 //方式一:定义变量的方式,推荐使用 int temp=num1; num1=num2; num2=temp; //交换后 System.out.println("num1="+num1+",num2="+num2);//num1=20,num2=10 //方式二:好处,不用定义临时变量 //弊端:相加操作可能超出存储范围,有局限性:只能适用于数值类型 num1=num1+num2; //30 num2=num1-num2; //10 num1=num1-num2; //20 System.out.println("num1="+num1+",num2="+num2);//num1=20,num2=10 } }

4.5.三元运算符

package plugins_test1; /** * 运算符之六:三元运算符 1.结构:(条件表达式)?表示1:表示2 2.说明: 2.1:条件表达式的结果为boolean类型 2.2:根据条件表达式真或假,决定执行表达式1,还是表达式2 如果表示为true,则执行表达式1 如果表达式为false,则执行表达式2 3.表达式1和表达式2要求是一致的 4.三元运算符可以嵌套使用 5.凡是三元运算符的地方,都可以改写为if-else,反之,不成立 6.如果程序既可以使用三元运算符,又可以使用if-else结构,那么我们优选选择三元运算符,原因:简介,执行效率高 */ public class SanYuanTest { public static void main(String[] args) { //获取两个整数的较大值 int m = 12; int n = 5; int max = (m > n) ? m : n; System.out.println(max); n=12; String maxStr=(m>n)?"m大":((m==n)?"m和n相等":"n大"); System.out.println(maxStr); //获取三个数的最大值 int n1=10; int n2=20; int n3=30; int maxNum=(n1>n2)? n1:n2; int maxNum1=(maxNum>n3)? maxNum:n3; System.out.println("三个数的最大值为:"+maxNum1); } }
4.4.流程控制





package plugins_test1; /** 分支结构中的if-else(条件判断结构) 一、三种结构 第一种: if(条件表达式){ } 第二种:二选一 if(条件表达式){ 执行表达式一 }else{ 执行表达式二 } 第三种:多选一 if(条件表达式){ 执行表达式一 }else if(条件表达式){ 执行表达式二 }else{ } */ public class IfTest { public static void main(String[] args) { //举例一 int heartBeats=179; if(heartBeats<60 || heartBeats>100){ System.out.println("需要做进一步检查"); } System.out.println("检查结束"); //举例二 int age=150; if(age<18){ System.out.println("你还没成年"); }else{ System.out.println("你可以看电视剧了"); } //举例三 if(age<0){ System.out.println("你输入的年龄不合法"); }else if(age<18){ System.out.println("你现在太小了"); }else if(age<35){ System.out.println("你已经成年了"); }else if(age<60){ System.out.println("中年时期"); }else { System.out.println("你已经老了,没办法工作了"); } } }
浙公网安备 33010602011771号