美文网首页
java语言基础

java语言基础

作者: 爱睡觉的小章鱼 | 来源:发表于2019-09-18 15:05 被阅读0次

    1.常量包括

    (1)字符串常量,用双引号括起来的内容

    (2)整数常量,所有整数

    (3)小数常量 ,所有小数

    (4)字符常量 用单引号括起来的内容,里面只能放单个数字,单个字母或单个符号

    (5)布尔常量 较为特殊,只有true和false

    (6)空常量     null(数组部分讲解)

    2.进制

    二进制以0b开头,八进制以0开头,十六进制以0x开头

    3.原码,反码,补码

    (1)原码

            就是二进制定点表示法,即最高位为符号位,“0”表示正,“1”表示负,其余位表示数值的大小。

            通过一个字节,也就是8个二进制位表示+7和-7

             0(符号位)    0000111              +7

             1(符号位)    0000111              -7

       (2)反码

            正数的反码与其原码相同(+7的反码为00000111);负数的反码是对其原码逐位取反,但符号位除外(-7的反码为11111000)。

        (3) 补码

             正数的补码与其原码相同(+7的补码为00000111);负数的补码是在其反码的末位加1(-7的反码为11111001)。 

    4.数据类型

    Java中数据类型的分类

     (1)基本数据类型

     (2)引用数据类型 

    基本数据类型分类(4类8种)

    整数型

           byte 占一个字节  -128到127

          short 占两个字  -2^15~2^15-1

           int 占四个字节 -2^31~2^31-1

          long 占八个字节 -2^63~2^63-1

       浮点型

             float 占四个字节 -3.403E38~3.403E38  单精度

             double 占八个字节-1.798E308~1.798E308 双精度

       字符型

            char 占两个字节 0~65535

      布尔型

            boolean 

     boolean理论上是占八分之一个字节,因为一个开关就可以决定是true和false了,但是java中boolean类型没有明确指定他的大小  

    特别注意:

    float f = 12.3F; //占四个字节

    double d = 33.4; //占八个字节 小数默认的数据类型是double,double类型后面也可以用D或d标识,但是一般不加

    System.out.println(f);

    System.out.println(d);

    因为小数的数据类型默认是double类型的,12.3是double类型,转为float类型会损失精度,所以需要写成float f = 12.3F

    如果超过int的取值范围-21亿~21亿,需要用long类型的话,需要在数值后面加上L,一般是大写,小写的l容易和1混淆。

    5.数据类型转换

    隐式转换

    int x = 3;

    byte b = 4;

    x = x + b;

    System.out.println(x);

    x是int类型,b是byte类型,两者相加后赋值给x是int类型,这叫隐式转换

    强制转换

    int x = 3;

    byte b = 4;

    b = (byte)(x + b);

    System.out.println(b);

    x是int类型,b是byte类型,两者相加后赋值给b是byte类型,需要强制转换

    注意:

    byte b1 = 3;

    byte b2 = 4;

    byte b3 = b1 + b2;

    上面第三行代码是错误的,因为1.byte与byte(或short,char)进行运算的时候会提升为int,两个int类型相加的结果也是int类型2.b1和b2是两个变量,变量存储的值是变化,在编译的时候无法判断里面具体的值,相加有可能会超出byte的取值范围

    byte b4 = 3 + 4;

    这行代码没有问题,因为java编译器有常量优化机制,byte的取值范围为-128~127,没有超过byte的范围

    **进行混合运算的时候,byte,short,char不会相互转换,都会自动类型提升为int类型,其他类型进行混合运算的是小的数据类型提升为大的

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

    6.字符和字符串参与运算

    ASCII码表中,0对应48,A对应65,a对应97

    System.out.println('a' + 1); //98,因为有ASCII码表,a字符对应的是int类型的97

    System.out.println((char)('a' + 1));   输出b

    System.out.println("hello"+'a'+1); //任何数据类型用+与字符串相连接都会产生新的字符串,输出helloa1

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

    System.out.println(" 5 + 5 = " + (5 + 5));   输出5 + 5 = 10,括号具有较高的优先级

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

    7.char字符

    char c = 'a';

    System.out.println(c);

    char c1 = 97; //0 - 65535

    System.out.println(c1);

    都是输出a,char的数值范围为0-65535

    注意:

    Java语言中的字符char可以存储一个中文汉字,因为Java语言采用的是Unicode编码。Unicode编码中的每个字符占用两个字节。中文也是占的两个字节,所以,Java中的字符可以存储一个中文汉字

    8.算术运算符

    (1)运算符的分类

    算术运算符,赋值运算符,比较(关系或条件)运算符,逻辑运算符,位运算符,三目(元)运算符 

    (2)算数运算符有哪些

    +,-,*,/,%,++,-- 

    注意:

    a:+号在java中有三种作用,代表正号,做加法运算,字符串的连接符

    b:整数相除只能得到整数。如果想得到小数,必须把数据变化为浮点数类型

    System.out.println(10 / 3); //整数相除结果只能是整数

    System.out.println(10 / 3.0); //如果想得到小数,把其中一个数变成小数,另一个数在运算的时候会自动类型提升

    第二个提升为double类型

    c:/获取的是除法操作的商,%获取的是除法操作的余数

    %运算符

    当左边的绝对值小于右边绝对值时,结果是左边                      2%5=2

     当左边的绝对值等于右边或是右边的倍数时,结果是0            10%5=0

    当左边的绝对值大于右边绝对值时,结果是余数                       12%5=2

     %运算符结果的符号只和左边有关系,与右边无关                   13%-5=3

    任何一个正整数%2结果不是0就是1可以用来当作切换条件 

    (3)++,--运算符的作用

     自加(++)自减(--)运算

     ++:自加。对原有的数据进行+1

    --:自减。对原有的数据进行-1

    注意:a++和++a单独使用没有区别

    int a = 3;

    int b;

    b = a++; //当++在变量后面的时候,会先将变量中的值取出做赋值操作,然后再自身加1

    System.out.println("a = " + a);

    System.out.println("b = " + b);

    输出:a = 4    b = 3

    b = ++a; //当++在变量前面的时候,会先自身加1,然后在将结果赋值

    注意:

    byte b = 10;

    b++;

     b = b + 1;

    第三句会报错,因为b+1是int类型,而赋值给的b是byte类型的。b++不报错是因为底层会将b+1强转byte类型

    9.赋值运算符

    a:基本的赋值运算符:=

         把=右边的数据赋值给左边

    int a = 3; //把右边的常量值赋值给左边的变量,左边必须是变量

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

         += 把左边和右边做加法,然后赋值给左边。

    a += 4;              ==>                 a = a + 4;                                                                                  

    注意:

    short s=1;s = s+1;

    short s=1;s+=1;

    第一句:当short与int进行运算的时候,会提升为int类型,两个int类型相加的结果也是int类型,会报错

    第二句:s = (short)(s + 1),底层会将s强转为short类型

    10.关系运算符

    关系运算符有哪些(比较运算符,条件运算符)

           ==,!=,>,>=,<,<=

     注意事项:

         无论你的操作是简单还是复杂,结果是boolean类型。

         "=="不能写成"="。

    11.逻辑运算符

    (1)逻辑运算符有哪些

    &,|,^,!         ^(异或)

    &&,|| (短路与,短路或)

    (2)注意:

    逻辑运算符的结果不是true就是false

    逻辑与 & 是并且(and)的意思, 遇false则false

    逻辑或  | 是或(or)的意思, 遇true则true

    逻辑异或 ^ 两边相同为false,两边不同为true

    逻辑非!  ,取反

    (3)&&与&的区别

    a:最终结果一样。

     b:&&具有短路效果。左边是false,右边不执行。

       &是无论左边是false还是true,右边都会执行

    (4)||与|的区别

    a:最终的结果是一样

    b:||具有短路效果,左边为true,右边不执行

    12.位运算符

    &(位与),|(位或),^(位异或),~(位取反) 

    >>(向左移,无符号),>>>(向左移,有符号),<<(向右移)

    (1)& 和 |

    &和| 的用法

    &:有0则0

     |:有1则1

    6的二进制  110                110                               110

    3的二进制  011            &  011                            |  001

    -------------------------------------------------------------------------------

                                             010  (2)                    111(7)

    (2)^ 和 ~

    ^ 和 ~的用法

    ^:相同则0,不同则1

    ~:按位取反

    6的二进制  110                110                             

    3的二进制  011            ^  011   

    --------------------------------------------------------------------

                                             101(为5)

      00000000 00000000 00000000 00000110                 6的原码,反码,补码都是本身

      11111111   11111111   11111111   11111001                  对6取反

    - 00000000 00000000 00000000 00000001                 减1

    --------------------------------------------------------------

       11111111  11111111  11111111   11111000                   反码

       10000000 00000000 00000000 00000111                 原码(-7)

    (3)位异或运算符的特点

    一个数据对另一个数据位异或两次,该数本身不变。

    (4)注意:请自己实现两个整数变量的交换(不需要定义第三方变量)

    第一种

    //有弊端,有可能会超出int的取值范围

    x = x + y; //10 + 5 = 15

    y = x - y; //15 - 5 = 10

    x = x - y; //15 - 10 = 5

    第二种

    //不需要第三方变量,通过^来做

    x = x ^ y; // 10 ^ 5

    y = x ^ y; // 10 ^ 5 ^ 5   y = 10

    x = x ^ y; // 10 ^ 5 ^ 10  x = 5

    (5)>>(向左移,无符号),>>>(向左移,有符号),<<(向右移)

    左移

    //左移,向左移动几位就是乘以2的几次幂

    System.out.println(12 << 1); //24

    System.out.println(12 << 2); //48

    右移

    //右移,向右移动几位就是除以2的几次幂

    System.out.println(12 >> 1);  //6

    System.out.println(12 >> 2);  //3

    (6)最有效率的算出2 * 8的结果

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

    13.三元运算符

    格式:(关系表达式) ? 表达式1 : 表达式2;      

     如果为true就是表达式1的值,如果为false,就是表达式2的值

    示例:获取两个数中的最大值

    int x = 10;

    int y = 5;

    int z;

    z = (x > y) ? x : y;

    示例:比较两个整数是否相同

    boolean b = (x == y);

    示例:获取三个整数中的最大值

    int a = 10;

    int b = 20;

    int c = 30;

    //先比较任意两个数的值,找出这两个数中的最大值

    int temp = (a > b) ? a : b;

    //用前两个数的最大值与第三个数比较,获取最大值

    int max = (temp > c) ? temp : c;

    14.键盘录入学习

    键盘录入两个数据,获取这两个数据中的最大值

    Scanner sc = new Scanner(System.in); //创建键盘录入对象

    System.out.println("请输入第一个整数:");

    int x = sc.nextInt(); //将键盘录入的数据存储在x中

    System.out.println("请输入第二个整数:");

    int y = sc.nextInt(); //将键盘录入的数据存储在y中

    int max = (x > y) ? x : y; //获取x和y中的最大值

    System.out.println("max = " + max);

    15.流程控制语句

    分类

    顺序结构

    选择结构

    循环结构

    16.顺序结构: 从上往下,依次执行

    示例:

    System.out.println("Hello World!11111");

    System.out.println("Hello World!3333");

    System.out.println("Hello World!22222");

    System.out.println("Hello World!44444");

    17.选择结构

    分类:

    if语句

    switch语句

    (1)if语句的格式1

    if(比较表达式) {

                语句体;

            }

    注意:

    比较表达式无论简单还是复杂,结果必须是boolean类型

    (2)if语句的格式2

    if(比较表达式) {

                语句体1;

            }else {

                语句体2;

            }

    注意:

    首先计算比较表达式的值,看其返回值是true还是false。

    如果是true,就执行语句体1;

    如果是false,就执行语句体2;

    (3)if语句的格式2和三元的相互转换

    三元运算符实现的,都可以采用if语句实现。反之不成立。

    什么时候if语句实现不能用三元改进呢?

    当if语句控制的操作是一个输出语句的时候就不能。

    为什么呢?因为三元运算符是一个运算符,运算符操作完毕就应该有一个结果,而不是一个输出。

    (4)if语句的格式3:

    if(比较表达式1) {

                语句体1;

            }else if(比较表达式2) {

                语句体2;

            }else if(比较表达式3) {

                语句体3;

            }

            ...

            else {

                语句体n+1;

            }

    执行流程:

         首先计算比较表达式1看其返回值是true还是false,

        如果是true,就执行语句体1,if语句结束。

        如果是false,接着计算比较表达式2看其返回值是true还是false,

        如果是true,就执行语句体2,if语句结束。

        如果是false,接着计算比较表达式3看其返回值是true还是false,

        如果都是false,就执行语句体n+1。

    注意事项:最后一个else可以省略,但是建议不要省略,可以对范围外的错误值提示

    (5)switch语句的格式

    switch(表达式) {

                  case 值1:

                    语句体1;

                    break;

                    case 值2:

                    语句体2;

                    break;

                    …

                    default:    

                    语句体n+1;

                    break;

            }

    注意:

    switch后面的表达式可以接收基本数据类型:byte,short,char,int,引用数据类型可以接收枚举(JDK1.5),String字符串(JDK1.7)

    示例:

    String name = "rose";

    String gender = "妖";

    switch (gender) {

    case "男士":

    System.out.println(name + "是一位" + gender + "喜欢吃饭睡觉打dota");

    break;

    case "女士":

    System.out.println(name + "是一位" + gender + "喜欢逛街购物美容");

    break;

    default:

    System.out.println(name + "是一位" + gender + "打雌性激素维持美貌容颜");

    break;

    注意:

    case后面只能是常量,不能是变量,而且,多个case后面的值不能出现相同的

    default可以省略吗?

    可以省略,但是不建议,因为它的作用是对不正确的情况给出提示。

    特殊情况:

        case就可以把值固定。

        A,B,C,D

    break可以省略吗?

    最后一个可以省略,其他最好不要省略

    会出现一个现象:case穿透。

    最终我们建议不要省略

    default一定要在最后吗?

    不是,可以在任意位置。但是建议在最后。

    switch语句的结束条件

    a:遇到break就结束了

    b:执行到switch的右大括号就结束了

    (6)示例:

    int x = 2;

    int y = 3;

    switch(x){

    default:

    y++;

    break;

    case 3:

    y++;

    case 4:

    y++;

    }

    System.out.println("y="+y);    ----输出4

    int x = 2;

    int y = 3;

    switch(x){

    default:

    y++;

    case 3:

    y++;

    case 4:

    y++;

    }

    System.out.println("y="+y);    ----输出6

    相关文章

      网友评论

          本文标题:java语言基础

          本文链接:https://www.haomeiwen.com/subject/pftcuctx.html