java基础语法

java基础语法

计算机存储单元:

  • 字节是计算机中最小存储单元
  • 8个bit(二进制位<0或1>)表示为一个字节,(写成1 Byte或1 B)
    • 1 Byte = 8 bit
    • 1 KB = 1024 Byte
    • 1 MB = 1024 KB
    • 1 GB = 1024 MB 
    • 1 TB = 1024 GB
    • 1 PB = 1024 TB
    • 1 EB = 1024 PB
    • 1 ZB = 1024 EB

JDK、JRE与JVM:

  • JVM:java虚拟机,是运行java程序的假想计算机,是java程序的运行环境。编写的java代码都运行在JVM之上。
  • JRE(Java Runtime Environment):是java程序的运行时环境,包含JVM和运行时所需要的核心类库。
  • JDK(Java Development Kit):是java程序开发包,包含JRE和开发使用的工具。

关键字&标识符

  关键字的特点:

    • 完全小写的字母
    • 在增强版的记事本当中(例如notepad++),有特殊颜色

 标识符:是指程序中,自己定义内容,比如类的名字、方法的名字和变量的名字等。

    • 命名规则:(硬性要求)
      • 标识符可以包含英文字母26个(区分大小写)、0-9、$(美元符号)、和_(下划线)
      • 标识符不能以数字开头
      •  标识符不能是关键字
    • 命名规范:(软性建议)
      • 类名规范:首字符大写,后面每个单词首字母大写。(大驼峰式)
      • 变量名规范:首字母小写,后面每个单词首字母大写。(小驼峰式)
      • 方法名规范:同变量名

 

常量&变量

  常量:在程序运行期间,固定不变的量。

    • 常量的分类
      • 字符串常量:凡是用双引号引起来的部分,叫做字符串常量。例如:"abc"、"123"。
      • 整数常量:直接写上的数字,没有小数点。例如:100、0、-250。
      • 浮点数常量:直接写上的数字,有小数点。例如:2.5、-3.14、0.0。
      • 字符常量:凡是用单引号引起来的单个字符,叫做字符常量。例如:'A'、'b'、'9'、'中'。
      • 布尔常量:只有两种取值,true、false。
      •  空常量:null。代表没有任何数据。

  数据类型:

    • 基本数据类型:
      • 整数型 byte short int long
      • 浮点型 float double
      • 字符型 char
      • 布尔型 boolean
    • 引用数据类型:
      • 字符串、数组、类、接口、Lambda

  变量:程序运行期间,内容可以发生改变的量。<装数据的容器>

  注意事项:

    • 浮点数当中默认类型是double。如果一定要使用float类型,需要加上一个后缀F。如果是整数,默认为int类型,如果一定要使用long类型,需要加上一个后缀L。推荐使用大写字母后缀。
    • 如果创建多个变量,那么变量之间的名称不可以重复。
    • 没有进行赋值的变量,不能直接使用;一定要赋值之后,才能使用。
    • 变量使用不能超过作用域的范围。【作用域】:从定义变量的一行开始,一直到直接所属的大括号结束为止。

数据类型转换

  自动类型转换(隐式):

    • 特点:代码不需要进行特殊处理,自动完成。
    • 规则:数据范围从小到大。如:byte --> int

  强制类型转换(显式):

    • 特点:代码需要进行特殊的格式处理,不能自动完成。
    • 格式:范围小的类型 范围小的变量名 = (范围小的类型) 原本范围大的数据;如:int --> (byte) byte

  注意事项:

    • 强制类型转换一般【不推荐】使用,因为有可能发生精度损失<浮点数>数据溢出<整数>
    • byte/short/char这三种类型都可以发生数学运算,例如加法“+”.(计算机的底层会用一个数字<二进制>来代表)
    • byte/short/char这三种类型在运算的时候,都会被首先提升成为int类型,然后再计算。
    • 对于byte/short/char三种类型来说,如果右侧赋值的数值没有超过范围,那么javac编译器将会自动隐含地为我们补上一个(byte)(short)(char)。
    • 在给变量进行赋值的时候,如果右侧的表达式当中全都是常量,没有任何变量,那么编译器javac将会直接将若干个常量表达式计算得到结果。
    • boolean类型不能发生数据类型转换。

运算符

注意事项:

  • 一旦运算当中有不同类型的数据,那么结果将会是数据类型范围大的那种。
  • 对于字符char类型来说,在计算之前,char会被提升成为int,然后在计算。
  • 任何数据类型和字符串进行连接的时候,结果都会变成字符串。
  • 与“&&”,或“||”,具有短路效果:如果根据左边已经可以判断得到最终结果,那么右边的代码将不再执行,从而节省一定的性能。

方法

  定义格式:

修饰符 返回值类型 方法名称(参数类型 参数名称, ...) {
    方法体
    return 返回值;
}
    •  返回值类型:也就是方法最终产生的数据结果是什么类型
    • 参数类型:进入方法的数据是什么类型
    • 参数名称:进入方法的数据对应的变量名称
    • 方法体:方法需要做的事情,若干行代码
    • return:两个作用,第一停止当前方法,第二将后面的返回值还给调用处
    • 返回值:也就是方法执行后最终产生的数据结果

注意事项:

  • return后面的“返回值”,必须和方法名称前面的“返回值类型”,保持对应。
  • 方法应该定义在类当中,但是不能在方法当中再定义方法,不能嵌套。
  • 如果方法有返回值,那么必须写上“return 返回值;”,不能没有。
  • 对于一个void没有返回值的方法,不能写return后面的返回值,只能写return自己。
  • 对于方法当中最后一行的return可以省略不写。但是有返回值的必须写。
  • 一个方法当中可以有多个return语句,但是必须保证同时只有一个会被执行到

  方法的重载:多个方法的名称一样,但是参数列表不一样

    • 好处:只要记住唯一一个方法名称,就可以实现类似的多个功能。
    • 方法重载与下列因素【有关】:
    1. 参数个数不同
    2. 参数类型不同
    3. 参数的多类型顺序不同
    • 方法重载与下列因素【无关】:
    1. 与参数的名称无关
    2. 与方法的返回值无关

循环结构

  循环结构的基本组成部分,一般可以分为四部分:

  1. 初始化语句:在循环开始最初执行,而且只做唯一一次。
  2.  条件判断:如果成立,则循环继续;如果不成立,则循环退出。
  3. 循环体:重复要做的事情内容,若干行语句。
  4. 步进语句:每次循环之后都要进行的扫尾工作,每次循环结束之后都要执行一次。

数组:是一种容器,可以同时存放多个数据值。

  数组的特点:

  1. 数组是一种引用数据类型。
  2. 数组当中的多个数据,类型必须统一

  3. 数组的长度在程序运行期间不可改变

  动态初始化数组的格式:

数据类型[] 数组名称 = new 数据类型[数组长度];
    • 左侧数据类型,也就是数组当中保存的数据,全都是统一的什么类型
    • 左侧的中括号:代表我是一个数组
    • 左侧数组名称:给数组取一个名字
    • 右侧的new:代表创建数组的动作
    • 右侧数据类型:必须和左边的数据类型保持一致
    • 右侧中括号内数组长度:也就是数组当中,到底可以保存多个数据,是一个int数字
    • 使用动态初始化数组的时候,其中的元素将会自动拥有一个默认值。规则如下:
      • 如果是整数类型,那么默认为0;
      • 如果是浮点类型,那么默认为0.0;
      • 如果是字符类型,那么默认为'\u0000';
      • 如果是布尔类型,那么默认为false;
      •  如果是引用类型,那么默认为null。

  静态初始化基本格式:

数据类型[] 数组名称 = new 数据类型[] {元素1, 元素2, ...};
数据类型[] 数组名称 = {元素1, 元素2, ...};

  访问数组元素的格式:数组名称[索引值];

    • 索引值:就是一个int数字,代表数组当中元素的编号。
    • 索引值从0开始,一直到“数组的长度-1”为止。

  数组赋值内存图:

  数组引用类型图:

  数组中常见问题:

    • 如果访问数组元素的时候,索引编号并不存在,那么将会发生数组索引越界异常ArrayIndexOutOfBoundsException。
    • 数组必须进行new初始化才能使用其中的元素。如果只是赋值了一个null,没有进行new创建,那么将会发生:空指针异常NullPointerException。

注意事项:

  • 静态初始化其实也有默认值的过程,只不过系统自动马上将默认值替换成为了大括号当中的具体数值。
  • 如果不确定数组当中的具体内容,用动态初始化;否则,已经确定了具体的内容,用静态初始化。

java中的内存划分(5个部分)

  1. 栈(Stack):存放的都是【方法中】的局部变量方法的运行一定要在栈当中运行。
    1.  局部变量:方法的参数,或者是方法{}内部的变量。
    2.    作用域:一旦超出作用域,立刻从堆内存当中消失
  2. 堆(Heap):凡是new出来的东西,都在堆当中。
    1.    堆内存里面的东西都有一个地址值:16进制,堆内存里面的数据都有默认值
    2.    规则:如果是整数,默认为0;如果是浮点数,默认为0.0;如果是字符,默认为'\u0000';如果是布尔,默认为false;如果是引用类型,默认为null。
  3. 方法区(Method Area):存储.class相关信息,包含方法的信息
  4. 本地方法栈(Native Method Stack):与操作系统相关。
  5. 寄存器(PC Register):与CPU相关。
posted @ 2019-06-24 20:00  sunxn77  阅读(251)  评论(3编辑  收藏  举报