Java基础知识

关键字

  • Java标识符

    大小写字母,数字,_和$,不能以数字开头,不能使用关键字,严格区分大小写。
    Java注释:单行注释,多行注释,文档注释;调试程序。

  • 常量与变量

    常量的分类:整数,小数,布尔,字符(单引号),字符串(双引号),null常量

    整数常量:进制。

    三个二进制位为一个八进制,四个二进制位为一个十六进制位。

    负数:正数二进制取反加1,负数二进制最高位是1.

  • 变量

    变量名,数据类型,数据。

    强类型语言。

    基本数据类型

    数值型:整数类型(byte,short,int,long);浮点型(float,double);

    字符型(char)

    布尔型(boolean)

    引用数据类型:类(class);接口(interface);数组([ ])

    整数默认:int 小数默认:double

    类型提升和强制类型转换(丢失精度),

    字符运算:编码表(ASCII)国标码(gb2312)unicode(国际标准编码表)

    隐性转换,显性转换

    +=在底层自动做强制转换。

    b=a++:先把a赋给b,b=a,a=a+1

    b=++a:a先自增,然后赋给b,a=b=a+1

    成员变量和局部变量的区别

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    1.
    成员变量定义在类中,整个类中都可以访问;
    局部变量定义在函数,语句,局部代码块中,只在所属的区域有效。
    2.
    成员变量存在于堆内存的对象中;
    局部变量存在于栈内存的方法中;
    3.
    成员变量随着对象的创建而存在,随着对象的消失而消失;
    局部变量随着所属区域的执行而存在,随着所属区域的结束而释放。
    4.
    成员变量都有默认初始化值;
    局部变量没有默认初始化值。

##运算符

  • 逻辑运算符

    与,&

    或,|

    异或,^ 两边结果不同为真,相同为假

    非,!

    短路,&&左边结果假,右边不计算

    ||左边结果真,右边不计算

  • 位运算符

    转换为二进制计算;

    一个数异或另一个数两次,结果还是这个数〈常用于加解密〉;

    << 左移 左移几位就是原数据乘以2的几次方;

    >> 右移 右移几位就是原数据除以2的几次方,高位出现的空位,原来高位是什么就用什么补这个空位,保证数据正负不变;

    >>> 无符号右移 由移后,无论高位是什么,高位出现的空位都用0来补。

  • 三元运算符
    1
    2
    3
    (条件表达式)?表达式1:表达式2    
    如果条件为true,运算后的结果是表达式1
    如果条件为false,运算后的结果是表达式2.

流程控制

  • 判断结构

    if语句

    (1)

    1
    2
    3
    4
    if(条件表达式)    
    {
    执行语句;
    }

    if语句控制的语句为单条语句时,大括号可以省略;如果if语句后没有大括号,if就控制离它最近的那条语句。

    (2)

    1
    2
    3
    4
    5
    6
    7
    8
    if(条件表达式)
    {
    执行语句;
    }
    else
    {
    执行语句;
    }

    三元运算符就是if else的简写格式;当if else运算符,有一个具体的结果的时候,可以简写为三元运算符。

    (3)
    多条件判断

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    if(条件表达式)
    {
    执行语句;
    }
    else if(条件表达式)
    {
    执行语句;
    }
    else
    {
    执行语句;
    }

    局部代码块可以定义局部变量的生命周期。

    switch语句

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    switch(表达式)//byte,int,short,char
    {
    case 取值1:
    执行语句;
    break;
    case 取值2:
    执行语句;
    break;
    ……
    default:
    执行语句;
    break;
    }

    if和switch的应用场景

    if:

    1
    2
    3
    1.对具体的值进行判断;
    2.对区间判断;
    3.对运算结果是boolean类型的表达式进行判断。

    switch:

    1
    2
    1.对具体的值进行判断;    
    2.值的个数通常是固定的;

    对于几个固定的值判断,建议使用switch语句,因为switch语句会将具体的答案都加载进内存,效率相对高一点。

  • 循环结构

    while

    1
    2
    3
    4
    while(条件表达式)
    {
    执行语句;
    }

    do while

    1
    2
    3
    4
    do
    {
    执行语句;
    }while(条件表达式);

    for

    1
    for(初始化;表达式;条件)执行语句
  • break与contunue

    break:跳出

    1
    2
    break作用的范围:switch语句或者循环语句。    
    break语句单独存在时,下面不要定义其他语句,因为执行不到。

    continue:继续

    1
    2
    continue作用的范围:循环结构。    
    结束本次循环,继续下次循环。

    如果continue单独存在时,下面不要有任何语句,因为执行不到。

##内存的划分

  • 寄存器
  • 本地方法区
  • 方法区
  • 栈内存

    存储的都是局部变量,而且变量所属的作用域一旦结束,该变量自动释放。即栈的生命周期比较短,更新比较快.

  • 堆内存

    存储的是数组和对象(其实数组就是对象),凡是new建立的都在堆中.

    (1)每一个实体都有首地址;

    (2)堆内存中的每一个变量都有默认初始化值,根据类型的不同而不同。整数是0,小数是0.0或0.0f,boolean是false,char是’\u0000’.

##一般函数与构造函数的区别

  • 构造函数

    对象创建时,就会调用与之对应的构造函数,对对象进行初始化;

    只调用一次。

  • 一般函数

    对象创建后,需要函数功能时才调用;

    可以调用多次。