Java基本语法

  • Post author:
  • Post category:java


Java入门基础知识二



一、关键字与标识符


关键字(keyword)

:被Java语言赋予特殊含义,关键字全部小写。

  • 定义数据类型:class、interface、enum、byte、short、int 、long、float、double、char、boolean、void
  • 定义流程控制:if、else、switch、case、default、while、do、for、break、continue、return
  • 定义访问权限修饰符:private、protected、public
  • 定义类,函数,变量修饰符:abstract、final、static、synchronized
  • 定义类与类之间关系:extends、implements
  • 定义建立实例,引用实例,判断实例:new、this、super、instanceof
  • 异常处理:try、catch、finally、throw、throws

    包:package、import
  • 其他修饰符:native、strictfp、transient、volatile、assert
  • 数据类型值的字面值:true、false、null
  • 保留字(reserver word):被Java保留尚未使用。goto、const


标识符(identifier)

:Java对各种变量、方法、类等的命名。凡是自己可以起名字的地方都叫标识符。

  • 英文字母大小写,数字,下划线,$。
  • 数字不可以开头。
  • 不可使用关键字。
  • 严格区分大小写。
  • 标识符不能含空格。
  • 规范:(1)

    包名

    全部小写xxxyyzz。(2)

    类名



    接口名

    首字母大写XxxYyZz。(3)

    变量名



    方法名

    小驼峰除第一个单词小写其他首字母大写xxxYyZz。(4)

    常量名

    所有字母大写,加下划线。



二、变量



1.基本内容

概念:内存中的一个存储区域。该区域数据可以在同一类型范围变化。变量是程序中最基本存储单元,包含变量类型、变量名和存储的值。

作用:在内存中保存数据。

注意:Java中每个变量名必须先声明,再赋值,再使用。使用变量名访问这块区域的数据。作用域是其定义所在的括号{}中。同一作用域不能重名。



2.整数类型:byte、short、int、long

Java各整数类型有固定的表示数范围和字段长度,不受OS影响,以保障Java可移植性。

整型常量默认为int类型,声明long型常量末尾加”l”或”L”。

byte:1字节=8bit位(-128~127);short:2字节;int:4字节;long:8字节



3.浮点类型:float、double

float单精度浮点数,尾数精确7位有效数字。4字节

double双精度浮点类型,精度是float两倍。8字节



4.字符类型:char

char型数据表示通常意义上的“字符”。单引号括起来的单个字符,允许使用转义字符’’,直接使用Unicode值表示字符型常量。并且可以参与运算。



5.布尔类型:boolean

boolean类型只允许取值true和false。



6.基本数据类型转换

byte、char、short –> int –> long –> float –> double

byte、char、short不会相互转换,计算时首先转换为int类型。boolean类型不能参与数据类型运算。任何数据类型值与字符串String进行连接运算(+)时,基本数据类型自动转化为字符串类型。



7.变量字符串类型:String

String不是基本数据类型,属于引用数据类型。使用方式和基本数据类型一致,String str=“abc”;

一个字符串可以串接另一个字符串,也可以直接串接其他类型数据。



三、进制

所有数字在计算机底层都以二进制的形式存在。

  • 二进制(binary):0,1以0b开头、
  • 十进制(decimal)、
  • 八进制(octal):以数字0开头、
  • 十六进制(hex):以0x开头。

二进制的整数类型有三种形式:


原码

,最高位是符号位。


负数的反码

,对原码除符号位外按位取反。


负数的补码

,反码+1。

计算机以二进制补码的形式保存所有的整数。正数的原码补码反码都相同。负数补码是反码+1。



四、运算符

运算符是一种特殊的符号,用以表示数据的运算、赋值和比较。


算术运算符、赋值运算符、比较运算符(关系运算符)、逻辑运算符、位运算符、三元运算符



1. 算术运算符

正号(+)、负号(-)、加减乘除(+ – * /)、取模(%)、自增(++)、自减(–)、字符串连接(+)。

注意:负数取模,模数负号忽略,依照被模数。取模运算结果不一定总是整数。



2.赋值运算符

(=)支持连续赋值,赋值两侧数据类型不一致,则转换。

扩展赋值运算符:+=、-=、*=、/=、%=。不会改变数据类型。



3. 比较运算符

==相等、!=不等于、<小于、>大于、<=小于等于、>=大于等于。

int n = 10;
n += (n++) + (++n);
System.out.println(n);  //结果为32



4. 逻辑运算符

&–逻辑与、&&–短路与、|–逻辑或、||–短路或、!–逻辑非、^–逻辑异或

逻辑运算符用于连接

布尔类型表达式



“&”和“&&”的区别,逻辑与,左边无论真假右边都进行运算;短路与,如果左边为假则右边不参与运算。

“|”和“||”的区别,逻辑或,左右两边都参与运算;短路或,左边为真则右边不参与计算。

“^”异或与“|”的区别,左右都为true时,结果为false。



5. 位运算符

<<左移、>>右移、>>>无符号右移、&与运算、|或运算、^异或运算、~取反运算。

位运算用于

整数的二进制

进行的运算。

  • <<左移:空位补0,被移除的高位丢弃
  • ‘>>’右移:被移除最高位是0,右移补0;最高位是1,空缺补1。
  • ‘>>>’无符号右移:空缺补0,低位丢弃。
  • &与运算:二进制进行&运算,只有1&1结果为1,否则为0。
  • |或运算:二进制进行|运算,只有0|0结果为0,否则为1。
  • ^ 异或运算:相同二进制位进行^运算,结果是0,不同结果为1。
  • ~取反运算:正数取反,各二进制按补码各位取反;负数取反,各二进制码按补码各位取反。



6. 三元运算符

(条件表达式)?表达式1:表达式2;

运算符优先级:只有单目运算符、三元运算符、赋值运算符,是从右往左运算的



五、程序流程控制

流程控制语句是用来控制程序中干各语句执行顺序的语句,可以把语句组合成能完成一定功能的小逻辑模块。顺序结构、分支结构、循环结构。


输入语句

:标准格式

import java.util.Scanner;
Scanner sacan = new Scanner(System.in);
int num=scan.nextInt();



1.分支结构

if-else、switch-case


(1)if-else


条件表达式必须是

布尔表达式

(关系表达式或逻辑表达式)、布尔变量。多个条件互斥时,各个语句顺序随意;多个条件有包含关系时,子上父下。


(2)switch-case


switch(表达式)中

表达式的值

必须是:byte、short、char、int、枚举类型、String类型。

case子句中的值必须是常量,不能是变量名或不确定的表达式;

break语句用来在执行完一个case分支后跳出,如果没有break则程序顺序执行到末尾。

default子句是可任选的,当没有匹配的case时执行default.


(3)对比


如果判断的具体数值不多,且符合byte、short、char、int、String、枚举类型,switch语句效率更高。

对区间判断,结果类型为boolean类型判断用if。



2.循环结构

for循环、while循环、do-while循环

初始化部分、循环条件部分、循环体部分、迭代部分。


(1)for循环

for(1初始化部分;2循环条件部分;4迭代部分){
3循环体部分}

执行顺序:1-2-3-4-2-3-4-2-3-4-…-2。

循环条件部分为boolean类型表达式。


(2)while循环

1初始化部分;
while(2循环条件部分){
3循环体部分;
4迭代部分;}

执行顺序:1-2-3-4-2-3-4-2-3-4-…-2。

循环次数不确定时常用while循环


(3)do-while循环

1初始化部分;
do{
3循环体部分
4迭代部分
}while(2循环条件部分);

执行顺序:1-3-4-2-3-4-2-…-2。

do-while至少执行一次循环



3.特殊流程控制语句


(1)break语句


break语句用来终止某个语句块的执行,break语句出现在多层嵌套的语句块中,可以通过标签指明需要终止的是哪一层语句块。


(2)continue语句


continue只能使用在循环结构中,用于跳过其所在循环语句块的一次执行,继续下一次循环。多层嵌套循环语句中,可以通过标签指明跳过哪一层。


(3)说明


break只用于switch语句和循环语句中,continue只用于循环语句中。continue终止本次循环,break终止本层循环。



六、数组

数组(Array)是多个相同类型数据按照一定顺序排列的集合,并什用一个名字命名,通过下标进行管理。


数组常见概念

:数组名、下标、元素、数组长度。

  • 数组本身是引用数据类型,数组中的元素可以是任何数据类型,包括基本数据类型和引用数据类型。
  • 创建数组对象会在内存中开辟一整块连续的空间,而数组名中引用的是这块连续空间的首地址。
  • 数组长度一旦确定,无法修改。



1.一维数组声明方式


type var[];



type[] var;

声明数组时不能指定其长度。

  • 静态初始化:在定义数组的同时就为数组元素分配空间并赋值。
  • 动态初始化:数组声明且分配空间与赋值操作分开进行。


数组元素引用

:定义并用运算符new为之分配空间后才可以通过下标访问元素。每个数组都有一个属性length指明长度。


数组元素类型和元素默认初始值

:byte:0、short:0、int:0、long:0L、float:0.0F、double:0.0、char:0或写为’\u0000’、boolean:false、引用类型:null。



2.一维数组的内存解析

栈(stack):局部变量。存放地址

堆(heap):new出来的结构,对象、数组。具体内存位置

方法区:常量池,静态域。



3.二维数组[][]:数组中的数组

静态初始化:

int[][] arr=new int[][]{

{3,8,2},{2,7},{9,0,1,6}};


动态初始化1:

int[][] arr=new int[3][2];


动态初始化2:

int[][] arr=new int[3][];


每个一维数组都是默认初始化值null。

Java中多维数组不必都是规则的矩阵形式。


int[] x,y[];x是一维数组,y是二维数组。


int[][] arr=new int[][3];//非法



4.数组中常见算法

1.数组元素的赋值(杨辉三角、回形数)

2.求数值型数组中元素的最大值、最小值、平均数、总和

3.数组的复制、反转、查找(线性查找、二分法查找)

4.数组元素的排序算法:

选择排序:直接选择排序、堆排序

交换排序:冒泡排序、快速排序

插入排序:直接插入排序、折半插入排序、希尔排序

归并排序

桶排序

基数排序



5.Arrays工具类的使用

java.util.Arrays类即为操作数组的工具类。

boolean equals(int[] a,int[] b); 判断两个数组是否相等
String toString(int[] a); 输出数组信息
void fill(int[] a,int val); 将指定值填充到数组中
void sort(int[] a); 对数组进行排序
int binarySearch(int[] a,int key); 对排序后的数组进行二分法检索



6.数组使用中常见异常

1.数组角标越界异常(ArrayIndexOutOfBoundsException)

访问到了数组中不存在的角标

2.空指针异常(NullPointerException)

arr引用没有指向实体,却在操作实体中的元素

int[] arr=null;
System.out.println(arr[0]);



版权声明:本文为ak201605050122原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。