美文网首页
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