Java 中的基础语法(7千字零基础超全详解)

【有道云笔记】01-基础语法:https://note.youdao.com/s/aSLvxx40

数据类型

定义:Java语言是强类型语言,对于每一种数据都定义了明确的具体的数据类型,在内存中分配了不同大小的内存空 间。

分类 :

Java基本数据类型图

Java语言中整型常量的四种表达形式:

十进制整数:如:99,-100

八进制整数:要求以0开头,如015;

十六进制整数:要求以0x或者0X开头,如0x15;

二进制整数:要求以0b或者0B开头如0x01110011;

浮点类型:

  1. float类型又被称作单精度类型,尾数可以精确到7位有效数字。
  2. double表示这种类型的数值精度为float的两倍,又被乘坐双精度类型,绝大部分的应用程序的采用double类型。
  3. Java浮点类型常量有两种表示形式
    1. 十进制数形式; 例:3.14 314.0 0.314
    2. 科学计数法形式: 例:3.14e0 3.14E2 3.14E-1
  4. 浮点型不精确,不要用于比较
    1. 浮点数存在误差数字不能精确表示,浮点数适合普通的科学和工程计算,精度足够;但是不适合精度要求非常高的商业计算,这时候要用BigDecimal进行运算和比较。
  5. 浮点常量默认类型是double,要改成float可以字后面加F或者f

基本数据类型转换:

取值范围:byte < short < int < long < float < double数字为整数默认类型为:int;数字为小数默认类型为:double自动转换:取值范围从小往大的转,会默认转换强制转换:取值范围从大往小的转,会强制转换 语法结构:目标类型 变量名=(目标类型)(被转换的数据);强制类型转换一般不推荐使用,因为有可能发生精度损失、数据溢出。数据溢出:数据范围大的数据类型转换为数据范围小的数据类型,装不下,数据溢出了。 精度损失:就是把有一部分数据的精度给舍掉了。例如:int num = (int) 3.99;输出结果为3。byte/short/char这三种类型在运算的时候,都会被首先提升为int类型,然后在计算。 boolean类型不能发生数据类型转换

switch 的case类型:在 Java 5 以前,switch(expr)中,expr 只能是 byte、short、char、int。从 Java5 开始,Java 中引入了枚举类型, expr 也可以是 enum 类型,从 Java 7 开始,expr 还可以是字符串(String),但是长整型(long)在目前所有的版本中都是不可以的。

float f=3.4;是否正确 :不正确。3.4 是双精度数,将双精度型(double)赋值给浮点型(float)属于下转型(down-casting,也称为窄化)会造成精度损失,因此需要强制类型转换float f =(float)3.4; 或者写成 float f =3.4F;

short s1 = 1; s1 = s1 + 1;有错吗?对于 short s1 = 1; s1 = s1 + 1;由于 1 是 int 类型,因此 s1+1 运算结果也是 int型,需要强制转换类型才能赋值给 short 型。 而 short s1 = 1; s1 += 1;可以正确编译,因为 s1+= 1;相当于 s1 = (short(s1 + 1);其中有隐含的强制类型转换。

编码

Java语言采用Unicode编码标准,

特点:Unicode(标准码),它为每个字符制订了一个唯一的数值,因此在任何的语言,平台,程序都可以放心的使用。

标识符

含义:给类,接口,方法,变量等取名字时使用的字符序列

标识符的命名规范:英文大小写字母 or 数字字符 or $和_

注意事项:不能以数字开头、不能包含特殊符号除了$和_、不能是Java中的关键字、区分大小写

注释

定义:用于解释说明程序的文字

作用: 在程序中,尤其是复杂的程序中,适当地加入注释可以增加程序的可读性,有利于程序的修改、调试和交流。注释的内容在程序编译的时候会被忽视,不会产生目标代码,注释的部分不会对程序的执行结果产生任何影响。

分类:

  • 单行注释:在程序中注释一行代码;格式: // 注释文字
  • 多行注释:一次性的将程序中多行代码注释掉;格式: /* 注释文字 *
  • 文档注释:注释允许在程序中嵌入关于程序的信息;格式:/** 注释文字 */

访问修饰符

定义:Java中,可以使用访问修饰符来保护对类、变量、方法和构造方法的访问。Java 支持 4 种不同的访问权限。

类型:

  • private : 在同一类内可见。使用对象:变量、方法。 注意:不能修饰类(外部类)
  • default (即缺省,什么也不写,不使用任何关键字): 在同一包内可见,不使用任何修饰符。使用对象:类、接口、变 量、方法。
  • protected : 对同一包内的类和所有子类可见。使用对象:变量、方法。 注意:不能修饰类(外部类)。
  • public : 对所有类可见。使用对象:类、接口、变量、方法

变量和常量

常量:

在Java语言中,主要是利用final关键字来定义常量。当常量被设定后,一般情况下就不允许再进行更改。为了提高代码的共享程度与提高代码的易读性。定义常量的时候一般都用大写字符和下划线,并且常量在定义的时候,就需要对常量进行初始化。

final MAX_SPEED = 120;

变量:

在程序执行的过程中,其值会发生变化,就是用来存储可变化的数据的一个元素。书写格式:数据类型 变量名 = 初始值;(或者数据类型 变量名称; 变量名称 = 数据值;)

变量的作用域:

规定了变量所能使用的范围,只有在作用域范围内变量才能被使用。根据变量声明地点的不同,变量的作用域也不同。

变量的分类:

根据作用域的不同,一般将变量分为不同的类型:类变量、局部变量、方法参数变量及异常处理参数变量。

  • 类变量也称为成员变量,声明在类中,不属于任何一个方法,作用域是整个类。
  • 局部变量是指在方法或者方法代码块中定义的变量,其作用域是其所在的代码块。
  • 作为方法参数声明的变量的作用域是整个方法。
  • 异常处理参数变量的作用域是在异常处理块中,该变量是将异常处理参数传递给异常处理块,与方法参数变量类似。

运算符

比较运算符:

是两个数据之间进行比较的运算,运算结果都是布尔值true和false。

逻辑运算符:

  • 与(并且) && 全都是true才是true,否则是false
  • 或(或者) || 有一个是true就是true;全都是false就是false
  • 非(取反) !本来是true,变成false;本来是false,变成true
  • 逻辑异或 ^ 两方必须不一样才成立

&和&&的区别:

&运算符有两种用法:(1)按位与;(2)逻辑与。 &&运算符是短路与运算。逻辑与跟短路与的差别是非常巨大的,虽然二者都要求运算符左右两端的布尔值都是true 整个表达式的值才是 true。&&之所以称为短路运算,是因为如果&&左边的表达式的值是 false,右边的表达式会被直接短路掉,不会进行运算。 注意:逻辑或运算符(|)和短路或运算符(||)的差别也是如此。

移位操作符:

运算对象是二进制的"位"。移位操作符只可用来处理整数类型。左移位操作符(>)则按照操作符右侧指定的位数将操作符左边的操作数向右移动。"有符号"右移位操作符使用"符号扩展":若符号为正,则在高位插入0;若符号位负,则在高位插入1.

Java中增加了一种"无符号"右移位操作符(>>>),它使用了"零扩展":无论正负,都在高位插入0。这一操作符在C或C++是没有的

算术运算符:

算术运算符用在数学表达式中,其用法和功能与代数学中一样

++i和i++的区别:

单独使用的时候是没有区别的,但是如果当成运算符,就会有区别了!先说a=i++,这个运算的意思是先把i的值赋予a,然后在执行i=i+1;当i初始等于3时,执行a=i++,最终结果a=3,i=4。而a=++i,这个的意思是先执行i=i+1,然后在把i的值赋予a;当i初始等于3时,执行a=++i,最终结果a=4,i=4。

三目运算符/三元运算符:

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

如果条件表达式为true,就输出打印表达式1的内容

如果条件表达式为false,就输出打印表达式2的内容。


选择结构语句

if条件语句结构分类:

  1. if 语句 - 只有当指定条件为 true 时,使用该语句来执行代码
  2. if…else 语句 - 当条件为 true 时执行代码,当条件为 false 时执行其他代码
  3. if…else if…else 语句- 使用该语句来选择多个代码块之一来执行

switch case 语句:

  • switch 语句中的变量类型可以是: byte、short、int 或者 char。从 Java SE 7 开始,switch支持字符串 String 类型了,同时 case 标签必须为字符串常量或字面量。
  • switch 语句可以拥有多个 case 语句。每个 case 后面跟一个要比较的值和冒号。
  • case 语句中的值的数据类型必须与变量的数据类型相同,而且只能是常量或者字面常量。
  • 当变量的值与 case 语句的值相等时,那么 case 语句之后的语句开始执行,直到 break 语句出现才会跳出 switch 语句。
  • 当遇到 break 语句时,switch 语句终止。程序跳转到 switch 语句后面的语句执行。case 语句不必须要包含 break语句。如果没有 break 语句出现,程序会继续执行下一条 case 语句,直到出现 break 语句。
  • switch 语句可以包含一个 default 分支,该分支一般是 switch语句的最后一个分支(可以在任何位置,但建议在最后一个)。default 在没有 case 语句的值和变量值相等的时候执行。default分支不需要 break 语句。

循环结构语句

  • for循环

语法结构:

for(初始化语句;判断条件语句;控制条件语句) {

循环体语句;

}

  • while循环

语法结构:

初始化语句;

while(判断条件语句) {

循环体语句;

控制条件语句;

}

  • do-while循环

语法结构:

初始化语句;

do {

循环体语句;

控制条件语句;

} while((判断条件语句);

三种循环的区别:

  • do…while循环至少会执行一次循环体。
  • for循环和while循环只有在条件成立的时候才会去执行循环体
  • 控制条件语句所控制的那个变量,在for循环结束后,就不能再被访问到了,而while循环结束还可以继续使用,如果你想继续使用,就用while,否则推荐使用for。原因是for循环结束,该变量就从内存中消失,能够提高内存的使用效率。

break ,continue ,return 的区别及作用:

  • break 跳出总上一层循环,不再执行循环(结束当前的循环体)
  • continue 跳出本次循环,继续执行下次循环(结束正在执行的循环进入下一个循环条件)
  • return 程序返回,不再执行下面的代码(结束当前的方法 直接返回

在 Java 中,如何跳出当前的多重嵌套循环 :

在Java中,要想跳出多重循环,可以在外面的循环语句前定义一个标号,然后在里层循环体的代码中使用带有标号的 break 语句,即可跳出外层循环

public static void main(String[] args){ ok; for(int i =0; i <10; i++){ for(int j =0; j <10; j++){ System.out.println("i="+ i +",j="+ j); if(j ==5){ break ok; } } } }

方法

含义:特定功能的代码块

好处:解决了代码的冗余(减少重复性的代码)

方法的分类:

  • 1.无参数无返回值的方法
  • 2.带参数的方法
  • 3.带返回值的方法

方法的重载

含义:方法与方法之间的关系

条件:

1.在同一个类中

2.方法名一致

3.参数列表的个数或者是类型不一致

4.与返回值无关(一个方法有没有返回值,不影响他们之间的重载关系)

好处:系统会根据实参类型自动匹配到对应的方法中

注意:编译时只看方法类型,不看方法名,以下两个方法是重载关系(参数和参数一一对应)

数组

一维数组

含义:一组数据的容器 作用:存储多个数据

数组的声明: 数据类型[] 数组名/变量名;

注意:

  • 数组中的元素可以是基本数据类型,不管数组中存储的元素是基本数据类型还是引用数据类型,数组都是引用数据类型
  • 数组中的数据,称之为元素
  • 每个元素都有编号,称之为下标、索引
  • 下标从0开始
  • 下标的作用:通过下标可以定位到数组中的某个位置
  • 数组一旦初始化成功,长度将不可改变
  • 操作数组: 改 - 通过下标设置元素;查 - 通过下标获取元素 数组的查找 -- 线性查找/顺序查找/二分法查找 查 - 获取元素个数 查 - 遍历数组
  • System.out.println(array);这样是不行的,这样打印是的是数组的首地址。

二维数组

什么是二维数组?

  1. 从定义形式上看: int [][];
  2. 可以这样理解,一个一维数组中的每个元素都是一维数组,这样就构成了二维数组。

int[][] arr = { {0, 0, 0, 0, 0, 0}, {1, 1, 1, 1, 1, 1}, {2, 2, 2, 2, 2, 2}, {3, 3, 3, 3, 3, 3} };

关于二维数组的关键概念:

  1. 二维数组的元素个数 = 二维数组中一维数组的个数 =arr.length;
  2. 二维数组的每个元素是一维数组,所以如果需要得到每个一维数组中的元素,还需要再遍历一维数组;
  3. arr[i][j]表示::二维数组的第 i+1 个一维数组的第 j+1 个元素;(记住数组的下标都是从0开始的)arr[0][0]表示:二维数组 arr 中的第1个一维数组中的第1个元素。

二维数组使用细节和注意事项:

  1. 一维数组的声明方式有: int[] x 或者 int x[]。
  2. 二维数组的声明方式有: int[][] arr 或者 int[] arr[] 或者 int arr[][]。
  3. 二维数组实际上是由多个一维数组构成的,它的各个一维数组的内存大小可以相同,也可以不相同。比如: map[][]是 一个二维数组, int[][] map = {{1, 2}, {3, 4, 5}};其中,map[0] 是一个含有2个元素的一维数组 ,map[1] 是一个含有3个元素的一维数组,因此, map[][]也称为 “列数不等的二维数组”。

二维数组的内存存在形式

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

其内存示意图如下:

示意图说明:

  1. 首先在栈内存中声明了一个int类型的二维数组的 arr[2][3],于是JVM在堆内存中为arr开辟了一个大小为 2 的地址空间,这两个空间里面分别存储着一维数组 arr[0]、arr[1]的地址;
  2. 同时在堆内存中另外开辟了两个新的大小为 3 的内存空间,这两个空间的地址就是 arr[0]、arr[1] 的内存地址,空间里面存储着一维数组中的元素。

数组的输出的三种方式

(1)传统的for循环方式 (2)for each循环 for(String element : names){//依次将元素赋值给element System.out.println(element);} (3)利用Array类中的toString方法 System.out.println(Arrays.toString(array));

数组的初始化:

  • 静态初始化:数据由程序员给定,长度由系统分配
  • 动态初始化:长度由程序员给定,数据由系统分配默认值
  • 14
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李仙桎

你的鼓励是我创作最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值