JavaSE基本语法~2

简介: JavaSE基本语法~2

布尔类型变量:

在Java中,使用boolean定义布尔类型变量,布尔类型变量只有true和false两个值,定义布尔类型变量

举例:

boolean flag=false;//定义一个boolean类型的变量flag,初始值为false
flag=true;//改变变量flag的值为true

变量的类型转换:

自动转换类型:

自动类型转换也叫隐式类型转换,指的是两种数据类型在转换的过程中不需要显示地进行声明,由编译器自动完成

自动类型转换必须同时满足两个条件:

一是两种数据类型彼此兼容
二是目标类型的取值范围大于源类型的取值范围

举例:

byte b=3;
int x=b;

上述代码中,使用byte类型变量b为int类型的变量x赋值,由于int类型的取值范围大于byte类型的取值范围,编译器在赋值过程中不会造成数据的丢失,所以编译器能够自动完成这种转换,在编译时,不报任何错误


总的来说就是取值范围小的转换为取值范围大的实现的是自动转换


比如:


byte转化为short,int,long等

short,char转化为int,long


反过来则不能自动进行转化,需要强制类型转化!

强制类型转化:

强制类型转化也叫做显式类型转化,意为两种数据类型之间的转化需要进行显式的说明,当两种类型彼此不兼容,或者是将取值范围大的转化为取值范围小的,自动类型转化无法进行,必须进行强制类型转化


举例:

public class HelloWorld{
    public static void main(String[]args){
        int num=4;
        byte b=num;
        System.out.println(b);
    }
}

编译并没有通过,而是报出以下错误:

解决办法:

进行强制类型转化,即强制将int类型的值赋给byte类型的变量

强制类型转化格式:目标类型 变量=(目标类型)值

因此对于上述类型转换,我们可以修改为:

byte b=(byte)num;

此时便可以正常运行!

在对变量进行类型转化的时候,如果将取值范围较大的数据类型强制转化为取值范围较小的数据,例如将int–>byte这种,则极容易造成数据精度的丢失

举例:

public class HelloWorld{
    public static void main(String[]args){
        byte a;
        int b=298;
        a=(byte)b;
        System.out.println("b="+b);
        System.out.println("a="+a);
    }
}

输出:

b=298
a=42

通过输出结果,我们会发现,即使进行了强制类型转化,但a和b的值仍然不同,这就是因为取值范围大的变量类型int转化为取值范围小的变量类型byte的过程中,发生了数据精度的丢失

具体原因如下:


变量的作用域:

无论C语言还是Java,变量都需要先定义才能使用,但这并不代表定义了的变量在下面的程序代码中都可以使用,变量只能在其作用范围内才可以被使用,这个作用范围称为变量的作用域

变量一定会被定义在某一对大括号中,该大括号所包含的代码区域便是这个变量的作用域

举例:

基本了解了变量的定义域后,下面我们通过一个程序熟悉一下:

举例:

public class HelloWorld{
    public static void main(String[]args){
        int  a=90;
        {
            int b=2;
            System.out.println("a is"+a);
            System.out.println("b is"+b);
        }
        a=b;
        System.out.println("a is"+a);
    }
}

编译未通过,报错如下:

原因即为:变量y在作用域范围之外被使用,出错代码为:a=b;这一句,由于变量b的作用域为内括号,因此出了这个内括号的范围,变量b便无法使用。


Java中的运算符:

在绝大多数的程序中都出现过以下的特殊符号,例如+,-,*,=,>等等,这些特殊符号叫做运算符,运算符通常用于对数据进行算术运算,赋值运算和比较运算

算数运算符:

算术运算符在使用的过程中需要注意以下几点:

1:在进行自增(++)和自减(–)运算时,如果运算符++或–放在操作数的前面,则先进行自增或自减运算,再进行其他运算。反之,如果运算符放在操作数的后面,则先进行其他运算再进行自增或自减运算

举例:

public class HelloWorld{
    public static void main(String[]args){
            int a=1;
            int b=2;
            int x=a+b++;
            System.out.println("b="+b);
            System.out.println("x="+x);
    }
}

输出:

b=3
x=3

对于如下所示,这行代码,因为自增(++),放在了操作数的后面,因此先执行a+b运算,再执行b++操作

此时的b还是2,但当程序运行到下一步时,b就变成3了

int x=a+b++;

2:在进行除法运算时,当除数和被除数都为整数时,得到的结果也是一个整数,如果除法运算有小数参与,得到的结果会是一个小数


举例:


2510/1000 属于整数之间相除,会忽略小数部分,得到的结果是2

而2.5/10的结果是0.25

//这种规则和C语言是完全相同的,要想结果为浮点数,那么除数,被除数中,至少包含一个浮点数


3:在进行取模(%)运算时,运算结果的正负取决于被模数(%左边的数)的符号,与模数(%右边的数)的符号无关


举例:


(-5)%3=-2

5%(-3)=2

赋值运算符:

赋值运算符在使用的过程中需要注意以下几点:

1:在Java中可以通过一条赋值语句对多个变量进行赋值


举例:

int x,y,z;
 x=y=z=-4;//同时为多个变量赋初始值为4

但是不能在定义变量的时候,进行多个变量赋多个初始值

举例:

int x=y=z=3;

2:在众多赋值运算符中,除了“=”,其他都是特殊的赋值运算符,以“+=”为例,x+=3所表示的含义即为x=x+3,表达式首先会进行x+3运算,再将其结果赋值给x,其他运算符以此类推

比较运算符:


注:一定不要将比较运算符“==”误写成赋值运算符"="

逻辑运算符:

逻辑运算符在使用的过程中需要注意以下几点:

1:逻辑运算符可以针对结果为布尔值的表达式进行运算


例如:

x>3&&y!=0

2:运算符“&”和“&&”都表示与操作,当且仅当运算符两边的操作数都为true时,其结果才为true,否则结果为false

虽然运算符“&”和“&&”都表示与操作,但二者在使用上还是有一定的区别:


在使用“&”进行运算时,不论“&”左边的表达式结果为true还是false,“&”右边的表达式都会进行运算,但在使用“&&”进行运算时,当“&&”左边的表达式结果为false时,“&&”右边的表达式就不再进行运算,因此“&&”被称作短路与

举例:

public class HelloWorld{
    public static void main(String[]args){
        int x=0;
        int y=0;
        int z=0;
        boolean a,b;//a,b是布尔型变量,因此输出结果只能为true或者false
        a=x>0&y++>1;//即使x>0为false,y++>1还是会执行,因此才有下面的y输出结果为1
        System.out.println(a);
        System.out.println("y="+y);
        b=x>0&&z++>1;//挡x>0的结果为false,z++>1便不会被执行,因此z的值依然是0
        System.out.println(b);
        System.out.println("z="+z);
    }
}

输出:

false
y=1
false
z=0

3:运算符“|”和“||”都表示或操作,当运算符两边的任一表达式的值为true时,其结果为true,只有两边表达式的结果都为false时,其结果才为false,和逻辑与操作相类似,“||”为短路或,当运算符“||”左边的表达式结果为true时,右边的表达式便不再进行


4:运算符“^”表示异或操作,当运算符两边的布尔值相同(都为true或者false),其结果为false,否则为true

运算符优先级:

上表中所列举的这些运算符,优先级的数字越小代表优先级越高

举例:

public class HelloWorld{
    public static void main(String[]args){
        int a=2;
        int b=a+3*a;//*的优先级高于+,因此先执行3*a,在执行+a运算
        System.out.println("b="+b);
        int c=(a+3)*a;//()的优先级高于*,因此先执行(a+3),再执行*a运算
        System.out.println("c="+c);
    }
}

输出如下:

b=8
c=10
相关文章
|
机器学习/深度学习 Java C语言
【JAVASE】循环结构 中
【JAVASE】循环结构
|
存储 Java
|
存储 Java C语言
教你精通JavaSE语法->第三章、运算符
计算机的最基本的用途之一就是执行数学运算,即:对操作数进行操作时的符号,不同运算符操作的含义不同。-------->复习或初学Java语法
78 0
|
7月前
|
存储 SQL Java
【JavaSE语法】类和对象(二)
本文主要介绍了面向对象的三大特点之一封装,并引入了包的概念;还介绍了static修饰类的成员(变量+方法),最突出的特点就是static修饰的属于类,而不属于某个对象;最后介绍了四种代码块
53 7
|
存储 Java 编译器
JavaSE基本语法~1
JavaSE基本语法~
|
存储 机器学习/深度学习 Java
【JavaSE语法】运算符
【JavaSE语法】运算符
82 0