学习大数据的第一天

Java基础学习

day01:

1、上课学习笔记
(1)java层次结构

​ 层次一:基本语法:

​ 变量、运算符、流程控制、数组、

​ 层次二:面向对象 :

​ 层次三:高级应用:

​ 多线程、集合、IO流、网络编程、反射、NIO等

(2)万维网、互联网、因特网

java特点:跨平台、垃圾处理

jvm:java虚拟机

jdk jre jvm 的关系:

jdk = jre + 开发工具集(例如Javac编译工具等)

jre = jvm + javaSE标准类库

1、变量:在程序的执行过程中,其值可以发生改变的量叫变量。

定义变量的格式:

​ 1、数据类型 变量名 = 初始化值;

​ 2、数据类型 变量名;

​ 变量名 = 初始化值;

2、数据类型:

A:基本数据类型

​ byte 1个字节 -27~27-1

​ short 2个字节

​ int 4个字节

​ long 8个字节

​ float 4个字节

​ double 8个字节

​ char 2个字节

​ boolean 1个字节

B:引用数据类型(放到后面两天和下周面向对象)

自动类型转换:

​ byte,short,char在参与运算的时候会自动提升到int类型

​ 由大的数据类型接收小的数据类型,会自动转换,不会报错。

强制类型转换

​ 由小的数据类型接收大的数据类型,会报错,接收不了,这时候需要强制类型转换

​ 格式:目标数据类型 目标变量名 = (目标数据类型)要转换的数值/变量

3、运算符:

算术运算符:+,-,*,/,%

赋值运算符:=,+=,-=,*=,/=,%=

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

逻辑运算符:&,|,^,!,&&,||

位运算符:&,|,^,~,<<,>>,>>>

三目运算符:(关系表达式)?表达式1:表达式2;

位运算符
运算符运算范例
<<左移3 << 2 = 12 --> 3*2*2=12
>>右移3 >> 1 = 1 --> 3/2=1
>>>无符号右移3 >>> 1 = 1 --> 3/2=1
&与运算6 & 3 = 2
|或运算6 | 3 = 7
^异或运算6 ^ 3 = 5
~反码~6 = -7
位运算符的细节
<<空位补0,被移除的高位丢弃。
>>被移位的二进制最高位是0,右移后,空缺位补0; 最高位是1,最高位补1。
>>>被移位二进制最高位无论是0或者是1,空缺位都用0补。
&任何二进制位和0进行&运算,结果是0; 和1进行&运算结果是原值。
|任何二进制位和0进行 | 运算,结果是原值; 和1进行 | 运算结果是1。
^任何相同二进制位进行 ^ 运算,结果是0; 不相同二进制位 ^ 运算结果是1。

面试题

(1)请用最有效率的方式写出计算2乘以8的结果

​ 2<<4

(2)请自己实现两个整数变量的交换

​ 1、位异或运算

int a = 1,b = 2;
a = a ^ b;
b = a ^ b;
a = a ^ b;

​ 2、第三方变量

(3)^的特点

​ 位运算是非常迅速的,因为它直接对内存中的二进制数据进行操作

(4)^的常见用法

(1) 实现两个值的交换,而不必使用临时变量。

例如交换两个整数a=10100001,b=00000110的值,可通过下列语句实现:

a = a^b;  //a=10100111

b = b^a;  //b=10100001

a = a^b;  //a=00000110

(2) 在汇编语言中经常用于将变量置零:

xor a,a

(3) 使某些特定的位翻转

例如对数10100001的第2位和第3位翻转,则可以将该数与00000110进行按位异或运算。

10100001^00000110 = 10100111

(4)使用定理三进行编码解码

由B ^ A^ A = B,我们可以假设一聊天记录是B,密钥是A。现在B ^ A之后,成了密文了。为了解密,对密文再使用密钥A进行一次异或运算即可。也即是B ^ A^ A = B。

每日代码环节

        /* byte超过范围之后,需要强制转换,但是数值会改变,130——>-126*/
        byte b1=3,b2=4,b=(byte) 130;
        System.out.println(b);

        /* 当s的类型不是整型时:s += 1(short) 与 s = s + 1(int) 的不同*/
        short s=1;
        s+=1;
        System.out.println(getType(s));
        short s=1, s+=1;

        /* 逻辑运算 ^ 两边表达式都为true时,结果为false*/
        int x = 3;int y =4;
        x++;
        y++;
        System.out.println((x >= 4) ^ (y >= 5));

        /* 位运算符 << 左移 >> 右移  左乘右除*/
        System.out.println(-24 >>> 2);
        System.out.println(24 >>> 2);
        System.out.println(6 & 3);
        System.out.println();
        System.out.println();
        System.out.println();


//        System.out.println(2<<3);

        /* ^位异或运算符的常见用法:1、两个变量之间的转换。2、根据A^B^B = A 的特性,可以用在密码的密钥上 */

        int a = 1,b = 2;
        a = a ^ b;
        b = a ^ b;
        a = a ^ b;
        System.out.println("a="+a+"b="+b);

        int a = 1,b = 2,c;
        c = a ^ b;  //密钥
        c = c ^ b;  //同时异或相同的密码
        System.out.println(c);

        /* 三目运算符 (关系表达式)?表达式1:表达式2;*/

        /*比较两个数的大小并且选择最大的数,大数运算
        * 若有三个以及 三个以上的数比较
        * 则继续使用三目运算符*/
        int x = 3,y = 4,z;
        z = (x>y)?x:y;
        System.out.println(z);

        /* 比较两个数是否相等*/
        int x = 3,y = 4;
        boolean z = (x==y)?true:false;
        System.out.println(z);


        /*键盘录入数据*/
        Scanner sc = new Scanner(System.in);
        int x = sc.nextInt();

        /*条件语句 if else 和 switch case*/

        /*循环语句
        * 1、计算水仙花数100-999之后*/
        System.out.println("100-999水仙花数有:");
        for(int i=100;i<999;i++){
            int ge = i%10;
            int shi = i/10%10;
            int bai = i/10/10%10;
            if(ge * ge * ge + shi * shi * shi + bai * bai * bai == i){
                System.out.print(i+" ");
            }
        }


        /* 需求:请输出一个4行5列的星星(*)图案。*/
        for(int i = 0;i<4;i++){
            for(int j = 0;j<5;j++){
                System.out.print("*");
            }
            System.out.println();
        }

        /*需求:请输出如下图形
         *
         **
         ***
         ****
         *****
      */
        for(int i = 0;i<5;i++){
            for(int j = 0;j<=i;j++){
                System.out.print("*");
            }
            System.out.println();
        }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值