A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© znvoid 初级黑马   /  2018-4-2 22:27  /  541 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 znvoid 于 2018-4-2 22:50 编辑

通过十几天对java基础的学习,我对就java这门编程语言有了初步的了解和掌握
分享下我的笔记和总结
1、环境搭建
    学好一门编程语言,对其开发环境的搭建掌握是必不可少的
     JVM java虚拟机
     JRE =JVM +类库       java运行时环境
    JDK =JRE+java开发工具                java开发工具包
2、常量、变量
        变量定义格式
        数据类型 变量名 = 初始化值;
        例: int a=10;
    常量:它是在编译时期确定其值,后面不能改变其值。
3、数据类型:
      基本数据类型
     整数        
           byte                一个字节
           short        两个字节
           int                四个字节
           long                八个字节
     小数
           float                4个字节
           double        8个字节
     字符
           char                2个字节
      布尔
           boolean        


     引用数据类型
         数组、对象

      float double 在内存中存放结构(了解一下)        

            float一共32位,其结构定义如下:
             |-------- 31 -------|------------ 30-23 ------------ |------------ 22-0 ------------|
                     符号位(sign)         指数部分(exp)                       小数部分(mag)
            sign:符号位就一位,0表示正数,1表示负数
            exp: 指数部分,无符号正数
            mag:小数部分,定点小数,小数点在最左边。
            float的表达式 :  pow(-1,sign)  *  (1+mag)  * pow(2,exp-127)
----------------------------------------------------------------------------------
疑问:同类型数据(如两个byte)做运算其结果的类型可能不是前面数据的类型
          byte b2 = 120+3;
         它在编译前它们能确定其值。当你输入javac命令进行编译时java编译器默认为你进行强制转换为byte
         byte b2 =(byte)(120+3);

         byte b1 =12;
         byte b2 =15;
         byte b3 = b1+b2;不能编译通过,因为b1,b2为变量编译前无法知道它们确定的值
         混合运算的时候,byte,short,char不会相互转换,都会自动将类型提升为int类型,其他类型进行混合运算时都是将小的数据类型提升为大的

4、算数运算
         +        -        *        /        %         ++          --
         加       减     乘      除    取余        自增       自减
    注意点:
       两个整数相除其结果还是整数
           单独使用的时候,++或者--无论是放在变量的前面还是后面,结果是一样的
           如果++或者--在变量的后面,先拿变量参与操作,后变量做++或者--
              如果++或者--在变量的前面,先变量做++或者--,后拿变量参与操作

5、逻辑运算
          &         |         !         ^
         &&                 ||
   与:&   falsefalse
          或:| truetrue
          异或:^ 相同则false,不同则true(男女朋友)
         非:! truefalse,falsetrue
        &&具有短路效果。左边是false,右边不执行,结果与&相同
         ||具有短路效果.左边是true,右边不执行,结果与|相同
    三元运算符
        关系表达式?表达式1:表达式2;
              int c=a>b?a:b;
           不能单独存在,结果必须被接收。关系表达式为真则返回表达式1,为假则返回表达式2
6、条件语句
      if(关系表达式) {
                   语句体
       }
     执行流程:
         首先判断关系表达式看其结果是true还是false
         如果是true就执行语句体
         如果是false就不执行语句体
     switch(表达式){
            case 值:
                  break;
           default:
                 break;
      }
       表达式可以是 int short byte char String(jdk1.7)
      case后面跟的是要和表达式进行比较的值,匹配成功则从此处执行,没有匹配的则从default 处执行
      break 表示中断,结束的意思,可以结束switch语句,如果没有则会发生穿透现象。
7、循环语句
       for(初始化语句;判断条件语句;控制条件语句){
               循环体语句;
        }
      执行顺序:
        1、初始化语句
        2、判断条件语句 如果为真则执行3 否则结束循环
        3、 循环体语句
        4、控制条件语句
        5 、跳到第二步
     while(判断条件语句){
            循环体语句;
       }
       执行顺序:
           1、判断条件语句 真则走第2步 假就结束
           2、循环体语句
           3.、跳到第1步

     do{
          循环体语句;
      }while(判断条件语句);
      执行顺序:
        1、do 中循环体语句
        2、判断条件语句 真则走第1步 假就结束
8、跳转语句
       break 跳出当前循环体
       continue        结束本次循环跳到下次循环
       return  结束方法
9数组

       声明数组:数据类型[] 数组名;
       数组赋值: 数组名=new 数组类型[数组长度];
       数组名=new 数组类型[]{数据1,数据2,...};
       数组进行初始化
                * a:动态初始化 只指定长度,由系统给出初始化值
                         * int[] arr = new int[5];         
                * b:静态初始化 给出初始化值,由系统决定长度
         int[] arr = new int[]{1,2,3,4,5};
       简写:int[] arr = {1,2,3,4,5};
       *c 不能动静结合的初始化 如int[] arr = new int[5]{1,2,3,4,5};编译不会通过

       例子:int[] arr =new int[5];//动态初始化
       int arr =new int[]{1,2,3,4,5};//静态初始化
       int arr =new int[5]{1,2,3,4,5}; 错误的表示编译报错
       二维、多维数组
       int[][] arr=new int[m][n];


几个面试小题目
       问:如下程序语句有什么问题吗?
       short s1 = 1;
       s1 = s1 + 1;    //1
       short s2 = 1;
       s2 += 1;    //2
       答:对于注释 1 来说,在 s1+1 运算时会自动提升表达式的类型为 int,所以将 int 赋予给 short 类型的变量 s1 会出现类型转换错误(无法编译,IDE 提示错误),除非主动加上强转。对于注释 2 来说 += 是 java 语法规定的运算符,所以 java 编译器会对它进行转换特殊处理,故可以正确编译执行。

       问:java 中 char 类型变量能不能储存一个中文的汉字,为什么?
       答:java 的 char 类型变量是用来储存 Unicode 编码字符的,Unicode 字符集包含了汉字,所以 char 类型自然就能存储汉字,但是在某些特殊情况下某个生僻汉字可能没有包含在 Unicode 编码字符集中,这种情况下 char 类型就不能存储该生僻汉字了。

       问:java 的 Integer 和 int 有什么区别?
       答:int 是 java 内置基本数据类型之一,java 为每个基本类型都提供了一个封装类,Integer 就是 int 的封装类(也叫包装类型);int 变量的默认值为 0,Integer 变量的默认值为 null,所以 Integer 可以区分出未赋值和值为 0 的区别;Integer 类内部提供了一些关于整数操作的方法,例如上文用到的表示整数的最大值和最小值。

       问:能否在不进行强制转换的情况下将一个 double 值赋值给 long 类型的变量?
       答:不行,我们不能在没有强制类型转换的前提下将一个 double 值赋值给 long 类型的变量,因为 double 类型的范围比 long 类型更广,所以必须要进行强制转换。

       问:java 中 float f = 3.4; 是否正确?
       答:不正确,3.4 是双精度数,将双精度型(double)赋值给浮点型(float)属于向下转型(down-casting,也称为窄化)会造成精度损失,因此需要强制类型转换 float f = (float)3.4; 或者写成 float f = 3.4F; 才可以。



0 个回复

您需要登录后才可以回帖 登录 | 加入黑马