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("你已经老了,没办法工作了");
        }

    }
}

 

posted on 2023-09-30 20:27  情生意动  阅读(8)  评论(0)    收藏  举报