Week1 java环境配置的意义,基本数据类型及运算符(个人笔记)

一.java环境配置及入门基础:

1. jvm,jre,jdk的含义

  •         jvm:Java Virtue Machine 即java虚拟机,是java程序的运行平台,实现了java语言的跨平台。
  •         jre: Java Runtime Environment  即jre=jvm+核心类库。
  •         jdk:Java Development Kit  即jdk=jre+开发工具。如:javac ,jar,javap.

 

2.path:查找.exe文件

       方式一:直接在path路径中添加jdk-bin的安装路径。

       方式二:提取变量,将jdk路径定义为某个变量如:java_home=jdk路径。然后在path路径中添加%java_home%\bin;

       推荐方式二:因为path中配置的路径非常多,当jdk路径发生改变时,修改其path路径会非常麻烦。而方法二只需修改

       java_home即可。

3.关键字

   被java语言赋予赋予特定含义的单词,全部小写 。如class int  extend等  另外:goto 和 const作为保留关键字。


 

4.标识符 

  1.    就是给类,接口,方法,变量等起名字的字符序列
  2.    组成规则:英文字母大小写,数字,$,_
  3.    注意事项:不能以数字开头,不能是java中的关键字,区分大小写。
  4.    常见的命名规则:
  •        包:全部小写   单级包:小写  举例:henson; 多级包:全部小写,域名反转,并用.隔开。
  •        类或接口: 一个单词:首字母大写  举例:Person ; 多个单词:每个单词首字母大写  举例:HelloWorld
  •        方法或变量:一个单词:首字母小写 举例:name;   多个单词:从第二个单词开始受字母大写 举例:myName
  •        常量:全部大写  一个单词:大写  举例:PI;  多个单词:大写,并用_隔开  举例:MAX_VALUE 

5.常量:在执行程序过程中,其值不能发生改变,分为字面值常量和自定义常量。

   整数常量的分类:二进制 以0b开头 如:0b101;八进制 以0开头 如:071;十六进制 以0x开头 如:0xfff;整数默认是十进制


6.数据类型:基本数据类型(byte,short,int,long,float,double,char,boolean),引用数据类型(类,接口,数组)

  •         A:整数    占用字节数        范围
  •             byte            1             -128 ~ 127
  •             short           2            能表示65536个数
  •             int               4            大概能表示43亿个数(不能用int表示全体人类)
  •             long            8
  •         B:浮点数
  •             float            4
  •             double        8
  •         C:字符
  •             char            2             (注意Java中,字符采用Unicode编码,和c不一样)
  •         D:布尔
  •             boolean      1

    注意:
            整数默认是int类型,浮点数默认是double。
            长整数要加L或者l,建议后面加L。
            单精度的浮点数要加F或者f。


7.数据类型转换:

  •    boolean类型不参和其他类型进行转换
  •    默认转换:从小到大,byte,short,char----->int------>long------>float------>double
  •    byte,short,char之间不相互转换,直接转成int类型参与运算。即使是同一个数据类型的运算,也会先转换成int类型。
  •    强制类型转换:从大到小,可能会有精度损失,一般不建议这么做。举例 int a=(int)12.34;
  •    思考题:

           A:下面两种方式有区别吗?
                float f1 = 12.345f;         
                float f2 = (float)12.345;//是将double强转为float


           B:下面的程序有问题吗,如果有,在哪里呢?
               byte b1 = 3;
               byte b2 = 4;


               // byte b3 = b1 + b2; /*  编译不成功的原因为:a,b均为byte类型,在参与运算时会隐式转为int类型,又因为a,b
               均为变量,其值随时可能发生改变,编译器不能确定其大小,也就不确定是否能将为int
               类型的结果转为byte,所以会报错 */


               byte b4 = 3 + 4;/*能编译成功的原因是:虽然相加后的结果为int型,但是2,3均为常量,其值不会改变
               编译器就会判断结果有没有超出byte的表示范围,若每超出则会强制转为byte;否则报错。*/

           C:下面的操作结果是什么呢?
                byte b = (byte)130;    // -126  

                130二进制补码为:0000 0000 0000 0000 0000 0000 1000 0010  强转规则为:大范围转小范围时,直接舍弃高位。

                 舍弃高位:1000 0010

                 转为原码:1111 1110   等于:-126


           D:字符参与运算
               是查找ASCII里面的值
               'a'        97
               'A'        65
               '0'        48
               System.out.println('a');    //a
               System.out.println('a' + 1);    //98


8.运算符:

   (1)算术运算符
       A:+,-,*,/,%,++,--
       B:+的用法:加法,正号,字符串连接符(对+进行了重载);
       C:/和%的区别:

  •            / :    整数之间的相除,结果是整数; 向0取整;如果想得到小数,*1.0即可;    
  •           % :   原理:a % b = a - (a / b) *b;  取余运算是一个很耗时的操作,在性能比较关键的时候最好不要使用;
  •           数学中的取余运算规则为:a mod b=a- [a/b]*b  这里[]代表向下取整 如[-2.3]=-3;


       D:++和--的用法:

  •             a:他们的作用是自增或者自减
  •             b:放在操作数的前面:先自增或者自减,再参与操作  ;  放在操作数的后面:先参与操作,再自增或者自减; 
  •             c:底层原理: 

                    a = a++;    
                    int temp = a;
                    a++;
                    a = temp;


   (2)赋值运算符:=,+=,-=,*=,/=,%=等;赋值运算符是从右向左结合的;赋值运算是有值的,它的值等于右边表达式的值,也就是        说赋值语句支持连续赋值。如:a=b=2;另外,扩展的赋值语句隐式包含了强制类型转换,举例如下:

      a.   short s = 1;             b.   short s = 1;
           //s = s + 1;                     s += 1;
        请问上面的代码哪个有问题?        答:a会编译错误。因为int类型的变量不能隐式转为short;而b中的扩展赋值语句隐含强制         转换 ,可将int 1转为 short 1;


 

   (3)比较运算符:比较的是值。

   (4)逻辑运算符:&,|,^,!,&&,|| 用于连接boolean类型的式子;&&,|| 具有短路功能,推荐使用。

   (5)位运算符:

        A:&, |, ^, ~, <<, >>, >>>
        B:结论:
             &:同时为1,才为1,否则为0
             |: 同时为0,才为0,否则为1
             ^:   相同为0,不同为1;
                   a ^ b = b ^a;
                   a ^ 0 = a;
                   a ^ a = 0;
            ~: ~0为1,~1为0;
           <<: 移除的高位丢弃,低位补0; 
                
左移n个单位,相当于乘以 2 ^ n;
          >>: 移除的低位丢弃,如果符号位是0,则高位补0,如果符号位是1,则高位补1;
                 右移n个单位,相当于除以2 ^ n;
         >>>: 移除的低位丢弃,高位补0;

        注意事项:如何移动的单位a超过了字长m, 则实际移动
            a mod m (数学中的取余运算)
        C:试题
            a: 判断一个数是否是奇数    a & 1 == 1;
            b: 对2 ^ n 取余。        a & (2^n - 1);
            c: 如何判断一个数是否是2^n    a & (a-1) == 0
            d: 两个整数之间的交换;
            e: 有一堆数,都是成对出现的,只有一个单独的,找出这个单独的数
            f: 用最有效率的方式求2 * 8的值        2 << 3;

   (6)三元运算:

   A:格式
            比较表达式 ? 表达式1 : 表达式2;
   B:执行流程:
            首先计算比较表达式的值,看是true还是false。
            如果是true,表达式1就是结果。
            如果是false,表达式2就是结果。
   C:案例:
            a:比较两个数据是否相等
            b:获取两个数据中的最大值
            c:获取三个数据中的最大值
                int max = (a > b ? a : b) > c ? (a > b ? a : b) : c;
                int max = a > b ? (a > c ? a : c) : (b > c ? b : c);

    D:注意:嵌套的三元运算符也是从左向右执行的,即便右边的有括号;

      int a=1;int b=2; System.out.println(a<b?false:(a==b?++a:++b));System.out.println(b);

      输出结果为:false  2 显然程序先执行的是左边的三元运算。
              
              
          

   

9.条件控制语句:

switch语句注意点:

  •   case 后面只能为常量;
  •   表达式可以是:byte,short,int,char;JDK5之后可以是枚举;JDK7之后可以是字符串;
  •   break:表示switch到这里中断,跳出switch语句
  •   default:如果所有的情况都不匹配,就执行这里
  •   switch语句的结束条件: a:遇到break就结束了;

10.循环语句:

(1)break:中断的意思
        A:用在循环和switch语句中,离开此应用场景无意义。
        B:作用
            a:跳出单层循环
            b:跳出多层循环,需要标签语句的配合
(2)continue:继续
        A:用在循环中,离开此应用场景无意义。
        B:作用
            a:跳出单层循环的一次,可以继续下一次
            b:跳出多层循环,需要标签语句的配合
(3)return:返回
        A:用于结束方法的,后面还会在继续讲解和使用。
        B:一旦遇到return, 方法就不会在继续往后执行。

          
          

 

  

 

          

     

 

   

                     

        

   

 

   

 

 

 

           

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值