语法基础-变量类型&表达式&运算符

104 阅读7分钟

一.变量的分类:

从书写的位置区分

1.成员变量:

​ 【写在类里面的 和主方法平级】

​ 特点:

1.1作用范围:

​ 在当前类里面所有的方法都能使用成员变量

1.2

​ 成员变量可以不赋值,直接使用,系统会自动分配默认值,分配值根据数据类型不同而不同

​ 整数型默认值是 0

​ 浮点型默认值是 0.0

​ 字符型默认值是 空

​ 布尔型默认值是 false

​ 引用数据类型默认值都是 null

1.3

​ 成员变量不能重名

​ 如果main主方法中使用到成员变量,成员变量必须加上static修饰

2.局部变量:

​ 【写在方法里面或者代码块里面】

​ 特点:

​ 2.1只能在当前方法和代码块中使用

​ 2.2局部变量必须要先赋值再使用

​ 2.3局部变量不能重名

3.成员变量和局部变量的注意事项:

​ 3.1局部变量和成员变量可以重名

​ 3.2就近原则:先从小范围开始查找

public class Work02Text {
    //成员变量
    static int a = 10;
    static int num1;
    static byte num2;
    static short num3;
    static long num4;
    static float num5;
    static double num6;
    static char num7;
    static boolean num8;
    static String num9;

    public static void main(String[] args) {
        //局部变量
        int i= 10;
        //方法
        System.out.println(i);

        if (true){
            int i2 = 69;
            System.out.println(i2);
            System.out.println(i);
        }
        if (true){
            System.out.println(i);
        }
        /*
        static int a = 10;
        static int num1;
        static byte num2;
        static short num3;
        static long num4;
        static float num5;
        static double num6;
        static char num7;
        static boolean num8;
        static String num9;
         */

        }
    public void other() {
        int t =10;
        System.out.println(a);
# }
}

二.基础数据类型的转换

为什么需要使用类型转化:

​ boolean不进行数据类型转换

1.隐式转换/自动转换:

​ 1.1把一个小的数据类型赋值给大的数据

​ 1.2特别:char的类型转换 转换的是对应的其表中的数字

​ 1.3无语法

public class Work04DateChange {;

    public static void main(String[] args) {
        byte b = 127;
        short s = b;
        int i =s;
        long l = i;
        float f = l;
        double  d = f;


        //char
        char c = 'a';
        //把字符c赋值给int 实际上是把'a' 对应的数字97 赋值给i2
        int i2 = c;



        int i3 = 117;
        //把数字赋值给 char   实际上 是对应的字符 赋值给 char
        char cc = (char)i3;
        System.out.println(cc);

        float f2 = 255;
        System.out.println(f2);
        System.out.println("----------------------分割线----------------------");

2.强制转换:

​ 2.1把一个大的的数据类型赋值给小的数据类型

​ 2..2语法:数据类型 变量名 = (数据类型)变量名

​ 2.3注意事项:强制转换有风险,可能会存在精度损失; 小数转整数,小数点后的都会舍去,不会进行四舍五入



        double dd= 3.14;
        //语法:数据类型 变量名 = (数据类型)值/变量名; //值可能是更高的类型
        float ff = (float)dd;//没有精度的损失
        long ll = (long)ff;//出现精度的损失
        int ii= (int)ll;
        short ss = (short)ii;
        byte bb = (byte) ss;


        int iii = 137;
        byte bbb = (byte)iii;
        System.out.println(bbb);

    }
}

三.常量的默认类型:

​ 整数常量 :默认类型是int值 最多只有十位

​ 变量值后面加一个 l / L

​ 浮点常量: 默认类型是double值

​ 通过强制转换赋值

float变量值后面加 f/F

​ byte short 以下的值都经过特殊处理

public class Work05DefaultType {
    public static void main(String[] args) {
        //通过强制转换赋值
        float f = (float)3.14;
        //加f显示的告诉jvm 这是一个float值 不是double
        float f2 = 3.14f;

        //12345678912 默认值是int   加L显示的告诉jvm 这是一个long值 不是int
        long l  = 12345678912L;

        System.out.println();
        byte b = 10;
    }
}

四.表达式

​ 右边变量

​ 4.1运算顺序和数学一样

​ 4.2

​ 1)当表达式中所有的变量类型小于****int*的时候,运算后的结果都会自动提升为*int****类型。

​ 2) 当表达式中有变量类型大于****int*的时候,运算后的结果以表达式中*精度最高****的为主。

public class Work06Expression {
    public static void main(String[] args) {
        byte byt = 1;
        short s = 2;
        int i = 3;
        long lon = 5l;
        float f = 1.0f;
        double doub = 3.14;


        //1.将上面所有的变量相加,得到一个表达式
        //2.当表达式中有变量类型大于int的时候,运算结果以表达式精度最高的为主
        double sum = byt + s + i + lon + f + doub;
        System.out.println(sum);


        //当表达式中所有的变量类型小于int的时候,运算结果都会自动提升为类型
        int sum2 = byt + s;
        System.out.println(sum2);
    }
}

五.运算符

1.数学运算

​ 【一旦出现字符串就不是数学远算了】

+ 除了作为数学里的加号,还可以作为拼接符号

)

       //+号的两种用法
        System.out.println(123+123);//作为加法使用
        System.out.println(123+"123"); //作为拼接符号使用
        //计算的表达式里面 按照计算顺序一旦出现了字符串就不再是数学运算
        System.out.println(3+5+"ab");//8ab
        System.out.println("ab"+3+5);//ab35
        System.out.println(3+5+"ab"+3+5);//8ab35

- 减法

​ ***** 乘法

/ (运算结果以常量的默认值显示,要想显示小数点位)

public class Work07Operator {
    public static void main(String[] args) {
        System.out.println(10/1);//10
        System.out.println(10/2);//5
        System.out.println(10/3);//3
        System.out.println(10/4);//2
        System.out.println(10/5);//2
        System.out.println(10/6);//1
        System.out.println(10/7);//1
        System.out.println(10/8);//1
        System.out.println(10/9);//1
        System.out.println(10/10);//1
 
    }
}

% (取模,取余数)

public class Work07Operator {
    public static void main(String[] args) {

        System.out.println(10%1);//0
        System.out.println(10%2);//0
        System.out.println(10%3);//1
        System.out.println(10%4);//2
        System.out.println(10%5);//0
        System.out.println(10%6);//4
        System.out.println(10%7);//3
        System.out.println(10%8);//2
        System.out.println(10%9);//1
        System.out.println(10%10);//0

 
    }
}

2.自增自减运算

​ 2.1自增自减只能对变量使用(只能用在变量上面,不能用在常量上面)

​ 2.2自增自减运算每次改变的步长为1 其不会改变变量本身的值

++;先使用/运算再自增 ------------【在表达式里面使用的就是自增后的值】

++;先自增再使用/运算 ------------【在表达式里面使用的就是自增前的值,使用结束后再自增】

public class Work08Operator {
    public static void main(String[] args) {
        int a = 5;
        a++;//a=6
        System.out.println(a++);//打印6 运算后结果为7
        System.out.println(a++);//打印7 运算后结果为8


        ++a;
        System.out.println(a++);//打印6 运算后结果为7
        System.out.println(a++);//打印7 运算后结果为8;
        System.out.println(a);
    }
}

![1689921633799](../sum up/7-21.assets/1689921633799.png)

![1689921654530](../sum up/7-21.assets/1689921654530.png)

int x = 3;
int y = x++ + x++ + x++;
int z = ++x + ++X + ++x;

x = 9
y = 12
z = 24

3.赋值运算

​ 【把运算结果赋值给变量本身的一种缩写】

结论:不会改变变量本身的数据类型

![1689922781120](../sum up/7-21.assets/1689922781120.png)

public class Work09Operator {
    public static void main(String[] args) {
        int i = 10;
        //赋值运算:把运算结果赋值给变量本身的一种缩写

        i+=10;//i=i+10;
        i-=10;//i=i-10;
        i*=10;//i=i*10;
        i/=10;//i=i/10;
        i%=10;//i=i%10;

        System.out.println(i);
    }
}
i=i+10;//会出现编译报错
i+=10;//结论:不会改变变量本身的数据类型
 

4.比较运算

​ 【比较运算的结果是布尔值】

![1689924449541](../sum up/7-21.assets/1689924449541.png)

5.逻辑运算

​ 【将多个进行组合性的表达结果】

& 与------并且 两边都为true ,结果为true

![1689924915923](../sum up/7-21.assets/1689924915923.png)

| 或-----或者

​ ![1689925026788](../sum up/7-21.assets/1689925026788.png)

非------取反

&& 双与 和&意思结果一致 不同点在于具有短路效果 执行效率更高

|| 双或 和&意思结果一致 不同点在于具有短路效果 执行效率更高

​ 当符号左边的比较运算结果已经可以确定整个结果

^ 异或 两边结果不一样为 true

public class Work10Operator {
    public static void main(String[] args) {
       

        int java =100;
        int php =99;


        System.out.println(java==100  &&  php==100);//false
        //| --或者: 只要有一边为true,结果为true
        //                   true         false
        System.out.println(java==100  ||  php==100);//true
        //取反
        System.out.println(!true);
        System.out.println(!false);

        System.out.println("----------------------------");
        int i = 69;
        //                  false    整个表达已经不可能为true
        System.out.println(i>=100 && i++<=150);
        System.out.println(i);
        //                  true     true
        System.out.println(i>=69 && ++i<=100);

        int z = 10;
        //                  true
        System.out.println(z>=10 || z++<=50);//true
        System.out.println(z);
        //                  false
        System.out.println(z>=20 || z++<=50);


        System.out.println(false ^ false);
    }
}

6.三目运算/三元运算:

​ 写法: x?y:z

x: 必须是一个布尔值或者结果为布尔值的表达式【boolean变量,比较运算,逻辑运算】

? 分隔符

y: 当X的值为true整个三目运算的结果为y

z: 当x的值为false整个三木运算的结果为z

例如:

public class Work11Operator {


    public static void main(String[] args) {
        //判断一个数是否是3的倍数
        int num = 16647;
        //直接输出三目运算的结果
        System.out.println(num%3 ==0?num+"是3的倍数":num+"不是3的倍数");

        String s = num % 3 == 0 ? num + "是3的倍数" : num + "不是的倍数";
        //输出变量
        System.out.println(s);


        int a = 85;
    }
}

public class Work4 {
    public static void main(String[] args) {
        // /*
        //        三目运算可以嵌套使用,
        //            定义成绩分数 判断当前成绩等级
        //                0-59   结果 D
        //                60-69  结果 C
        //                70-89  结果 B
        //                90+    结果 A
        //        */
        int score= 20;
        String  result = score>=90 && score<=100 ?"A": (score>=70 && score<=89
        ? "B":(score>=60 && score<=69 ? "C" : "D"));
        System.out.println(result);
    }
}

7.位运算[了解]

把十进制数字钟转换为二进制

1为true 0为false

&:按位与

|:按位或

^ :

右移三位 就是把非零的数字又移三位 >>

<< :左移三位 就是把非零的数字左移三位

Sannner: 使用的注意事项:

​ 1.尽量Src