我的Java第二课下

(一)变量:在程序执行的过程中,在某个范围内其值可以发生改变的量

定义格式:数据类型 变量名 = 初始化值;

例如:int x = 1;(固定格式)

定义变量的注意事项:
   1)定义变量必须在某一个作用域内定义.
   2)变量名只能被定义一次.
  3)同一行可以定义多个变量,但是不建议这样去做.书写不规范.
   4)定义变量,并且没有初始化值,那么一定要在使用(输出这个变量)之前,给它进行赋值,否则报错!

(二)数据类型

1)基本数据类型

1.数值型

(1)整数类型:整数默认为int类型.

        byte(-128~127)占用1个字节的存储空间.

        short:占用2个字节的存储空间.

        int:占用4个字节的存储空间.

        long:占用8个字节的存储空间.(若数据为长整型,应该在数据末尾加L/l,建议加L)

(2)浮点类型:浮点类型默认为双精度浮点类型.

        float(单精度浮点型):占用4个字节的存储空间.(若数据为单精度浮点型,应该在数据末尾加F/f,建议加F)

        double(双精度浮点型):占用8个字节的存储空间.

2.字符型char:占用2个字节的存储空间.

3.布尔型boolean(true/false):占用1个字节的存储空间.

2)引用数据类型

1.类(class)

2.接口(interface)

3.数组([])

3)数据类型的默认转换

byte,short,char—int—long—float—double

byte,short,char相互之间补转换,他们参与运算首先转换为int类型.

4)数据类型的强制转换

目标类型 变量名=(目标类型)(被转换的数据);

例如:byte a = 3 ;
   int b = 4 ;
   //强制转换不好,会损失精度
   byte c = (byte) (a + b) ;
例1: byte b = 130;有没有问题?如果想让赋值正确,可以怎么做?结果是多少呢?

(计算机底层对数据进行计算通过补码进行的)

130的原码:  00000000 00000000 0000000010000010
(130的原码最高符号位0.整数的原码,反码,都相同)

截取3个字节,变成byte类型
补码:  10000010

已知补码求原码
最高符号位 数值位
1 0000010
 (通过补码求反码:数值位-1)
1 0000001 -- 反码
  (通过反码求原码:符号位不变,数值为按位取反)
1 1111110
-   64+32+16+8+4+2=126

byte b = (byte) 130;//输出b后结果为-126

例2: System.out.println("hello"+'a'+1);//helloa1--"+"全为拼接符号

   System.out.println('a'+1+"hello");//98hello

   System.out.println("5+5="+5+5);//5+5=55 

   System.out.println(5+5+"=5+5");//10=5+5

(三)运算符

1)算术运算符

1.基本算术运算符:+,-,*,/,%(模<取余>)

注意事项;
    /:默认取整,如果想结果为小数给分子或者分母乘以一个浮点类型数据
    %:模(除法):取的是余数

2.扩展的算术运算符:++,--

++或者--单独使用:无论++或者--在前还是在数据的后面,都是自增1或者自减1     

++或者--参与运算的使用:++和--在数据的后面,先参与运算(赋值),然后在自增1或者自减1;
               ++和--在数据的前面,先自增1,或者自减1,然后把最终的得到的结果进行赋值运算

例1: int a = 10 ;

   int b = 10 ;

   int c = 10 ;

   a = b++;// a=10,b=11,c=10
   c = --a;// a=9,b=11,c=9
   b = ++a;// a=10,b=10,c=9 
   a = c--;// a=9,b=10,c=8

例2: int x = 4 ;

    int y = (x++)+(++x)+(x*10);
//x:4,5,6
//y= 4+6+60

2)赋值运算符

1.基本赋值运算符:=(把等号右边的值赋值给等号左边的变量)

例如:int a = 1 ;把1值赋值给int类型的变量a

2.扩展的赋值运算符:+=,-=,*=,/=,%=

例如:int result = 10 ;

   result += a ; 相当于result = result + a 

 把符号的左边的值和右边的值相加,赋值给左边

short s = 1; s = s+ 1;

   short s = 1; s += 1 ;

上面两个代码有没有问题,如果有,哪里有问题.

short s = 1; s = s + 1;有问题:隐含了一个默认类型转换:类型不匹配:等号右边最终int类型,而等号左边属于short类型

正确的为 s = (short)(s + 1);

short s = 1; s += 1;没有问题:扩展的赋值运算符隐藏了强制类型转换.

3)比较运算符

比较运算符:>,>=,<,<=,!= ,==

(结果都是boolean类型)

注意事项:
   1.== 不能写成 =.

   2.类似这种2>x>4在Java语言中是不能直接这样写的,要用逻辑运算符连接.

4)逻辑运算符:可以连接某个值或者某一个表达式:

1.基本的逻辑运算符:&,|,^,!

&(逻辑与)-并列关系

特点:有false则false

|(逻辑或)两个满足一个条件即可

特点:有true则true

^(逻辑异或)

特点:相同则为false,不同则为true

!(逻辑非)
特点:非false则true,非true则false.

   偶数个非为它本身

2.扩展的逻辑运算符: 逻辑双与:&& ; 逻辑双或:||

逻辑单与&和逻辑双与&&的区别:

共同点:两个表达的效果是一样的:有false则false

不同点:逻辑双与&&,具有短路效果:左边的表达式如果是false,则右边不执行

同样,逻辑双或||具有短路效果:左边如果是true,右边不执行.

5)位运算符: &(位与),|(位或),^(位异或),~(反码):按位取反

注意事项:计算一个数据对另一个数据进行位运算操作,就必须算出该数据对应的二进制数据

: System.out.println(3&4);//0

   System.out.println(3|4);//7

   System.out.println(3^4);//7

   System.out.println(~3);//-4

3对应的二进制数为 0b11

4对应的二进制数为 0b100

3对应的二进制数据:4个字节 00000000 00000000 0000000000000011

4对应的二进制数据:4个字节 00000000 00000000 0000000000000100

位&:有0则0

    00000000 00000000 0000000000000011
位(&) 00000000 0000000000000000 00000100

    00000000 00000000 0000000000000000   结果:0

位|:有1则1

    00000000 00000000 0000000000000011
位(|) 00000000 0000000000000000 00000100

    00000000 00000000 0000000000000111   结果:7

位^:相同则为0,不同则为1

   00000000 00000000 0000000000000011
位(^)00000000 0000000000000000 00000100

   00000000 00000000 0000000000000111   结果:7

~:反码:按位取反,0变1,1变0
~ 00000000 00000000 0000000000000011
 11111111 11111111 1111111111111100(补码)
已知补码,求原码
 11111111 11111111 1111111111111100(补码) 
 -1
 11111111 11111111 1111111111111011 (反码)
 10000000 00000000 0000000000000100(原码)   结果:-4

位^运算符的特点:一个数据被另一个数据位异或两次,其值本身不变(可以用于实现两个数据的交换)

<<:左移动:最高位丢弃掉,在右边补齐0

>>:右移动:最高位是1,左补齐1,最高位为0,左补齐0

>>>:无符号右移:无论最高符号位是1还是0,左边补齐0

6)三目运算符(三元运算符)

格式:(表达式) ? 表达式1的结果 : 表达式2的结果;(表达的结果是一个boolean类型)

执行流程:先判断表达式是否成立

      如果成立,就是true,把表达式1作为true的结果;如果不成立,就是false,把表达式2作为false的结果.

例:判断两个数据的最大值 

int a = 100 ;
int b = 200 ;
int max = (a> b) ? a : b ;
System.out.println("两个数据的最大值是:" + max);

(四)键盘录入数据

javaAPI给提供(Sacnner类)

使用Scanner类去做键盘录入

格式:创建键盘录入对象

Scanner sc = new Scanner(System.in) ;

导包:在package下面 ,在class类的上面:两者之间位置书写

import java.util.Scanner;

接收数据:使用Scanner类中方法

输出语句:给用户提示:请您输入一个数据:

int x = sc.nextInt();

输出语句输出值

例:求三个数据最大值,键盘录入数据.

package 键盘录入;

import java.util.Scanner;

//求:三个数据最大值,键盘录入数据

public class ScannerDemo {
public static void main(String[] args) {
//创建键盘录入对象
Scanner sc = new Scanner(System.in);

//提示用户并接收数据
System.out.println("请输入第一个数据: ");
int a = sc.nextInt();
System.out.println("请输入第二个数据: ");
int b = sc.nextInt();
System.out.println("请输入第三个数据: ");
int c = sc.nextInt();

//定义中间变量,记录前两个数的最大值
//使用三元运算符
int temp = (a>b) ? a : b;
//使用中间变量与第三个数进行比较
int max = (temp>c) ? temp : c;

//输出最大值
System.out.println("您所输入的三个数据中的最大值为: "+max);
}

}







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值