JAVA基础语法

基本数据结构

数字类型包括 4 种整数类型和 2 种浮点数类型,4 种整数类型是 byte、short、int 和 long,2 种浮点数类型是 float 和 double。

字符类型是 char,用于表示单个字符。Java 使用统一码对字符进行编码。

布尔类型是 boolean,包括 true 和 false 两种取值。

数字类型直接量

直接量是在程序中直接出现的常量值。

将整数类型的直接量赋值给整数类型的变量时,只要直接量没有超出变量的取值范围,即可直接赋值,如果直接量
超出了变量的取值范围,则会导致编译错误。

整数类型的直接量默认是 int 类型,如果直接量超出了 int 类型的取值范围,则必须在其后面加上字母 L 或 l,
将直接量显性声明为 long 类型,否则会导致编译错误。

浮点类型的直接量默认是 double 类型,如果要将直接量表示成 float 类型,则必须在其后面加上字母 F 或 f。
将 double 类型的直接量赋值给 float 类型的变量是不允许的,会导致编译错误。

基本数据类型之间的转换

数字类型转换

不同的数字类型对应不同的范围,按照范围从小到大的顺序依次是:byte、short、int、long、float、double。
将小范围类型的变量转换为大范围类型称为拓宽类型,不需要显性声明类型转换。将大范围类型的变量转换为小范围
类型称为缩窄类型,必须显性声明类型转换,否则会导致编译错误。

字符类型与数字类型之间的转换

将数字类型转换成字符类型时,只使用整数的低 16 位(浮点数类型将整数部分转换成字符类型)。

将字符类型转换成数字类型时,字符的统一码转换成指定的数值类型。如果字符的统一码超出了转换成的数值类型的
取值范围,则必须显性声明类型转换。

方法

方法的语法结构

方法包括方法头和方法体,方法头又可以分成修饰符、返回值类型、方法名和参数列表,因此方
法包 括 5 个部分。

修饰符:修饰符是可选的,告诉编译器如何调用该方法。

返回值类型:方法可以返回一个值,此时返回值类型是方法要返回的值的数据类型。方法也可以没有返回值,此时返回值类型是 void。

方法名:方法的实际名称。

参数列表:定义在方法头中的变量称为形式参数或参数,简称形参。当调用方法时,需要给参数传递一个值,称为
实际参数,简称实参。参数列表指明方法中的参数类型、次序和数量。参数是可选的,方法可以不包含参数。

方法体:方法体包含具体的语句集合。

方法名和参数表共同构成方法签名。

参数的值传递

调用方法时,需要提供实参,实参必须与形参的次序相同,称为参数顺序匹配。实参必须与方法签名中的形参在次序上和数量上匹配,在类型上兼容,兼容的意思是不需要显性声明类型转换,即类型相同或者类型转换为拓宽类型。

在调用带参数的方法时,实参的值赋给形参,称为值传递。Java 中只有值传递,无论形参在方法中如何改变,实参不受影响。

当参数类型是基本数据类型时,传递的是实参的值,因此不能对实参进行修改。

当参数类型是对象时,传递的是对象的引用,此时可以对实参引用的对象进行修改,但是不能让实参引用新的对象。

方法的重载

方法的重载是指在同一个类中的多个方法有相同的名称,但是方法签名不同,编译器能够根据方法签名决定调用哪个方法。由于方法签名由方法名和参数表共同构成,因此方法的重载等同于多个方法有相同的名称和不同的参数列表。

方法的重载可以增加程序的可读性,执行相似操作的方法应该有相同的名称。

关于方法的重载,需要注意以下两点。

1.方法签名只由方法名和参数列表共同构成,因此被重载的方法必须具有不同的参数列表,而不能通过不同的修饰
符和返回值类型进行方法的重载。

2.如果一个方法调用有多个可能的匹配,则编译器会调用最合适的匹配方法,如果编译器无法判断哪个方法最匹配,
则称为歧义调用,会导致编译错误。

递归

递归的要点

定义递归方法时,需要定义递归的初始状态、初始状态的处理和递归调用。

初始状态也称为终止条件,即最简单的情况,此时应该直接给出如何处理初始状态。

对于非初始状态,则需要进行递归调用,对子问题进行求解,直到初始状态,然后将结果返回给调用者,直到传回原
始的调用者。

递归必须定义初始状态,且保证所有的递归调用都能到达初始状态,否则会发生无限递归,导致栈溢出。

递归的优点

递归的优点是代码简洁且易于理解。如果问题满足递归的特点,即可以分解成子问题且子问题与原始问题相似,则可
以使用递归给出自然、直接、简单的解法。

递归的缺点

时间和空间的消耗比较大。每一次函数调用都需要在内存栈中分配空间,对栈的操作还需要时间,因此时间复杂度和
空间复杂度都会比较高。

如果子问题之间存在重叠,则在不加记忆化的情况下,递归会产生重复计算,导致时间复杂度过高。

由于栈的空间有限,如果递归调用的次数太多,则可能导致调用栈溢出。

尾递归

当递归调用是方法中最后执行的语句且它的返回值不属于表达式的一部分时,这个递归调用就是尾递归。

尾递归的特点是在返回时直接传回原始的调用者,而不用经过中间的调用者,这个特点很重要,因为大多数现代的编
译器会利用该特点自动生成优化的代码。

使用尾递归代替普通的递归,可以在时间和空间方面都带来显著的提升。

可以通过什么方式解决递归的缺点?

解决递归的缺点有多种做法。尾递归是一种做法,另外还可以通过加记忆化的方式避免重复计算从而提高效率,以及
改用迭代实现。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值