特别声明:此文章仅作为作者本人的学习笔记使用,由于作者本人还处在学习阶段,文章中难免有用词不当的地方,或者知识点讲解不清晰的地方,如若读者发现,欢迎评论区留言。如果这篇文章对您有所帮助,希望您能点个赞😜😜😜😜
Scanner键盘录入的总结
(1)找到Scanner所在的位置
// 导入Scanner
import java.util.Scanner;
(2)创建对象
Scanner sc = new Scanner(System.in);
(3)调用 sc 对象身上的方法
int age = sc.nextInt(); // 键盘录入整数
String name = sc.next(); // 键盘录入字符串
类型转换
隐式转换
把一个取值范围小
的数值或者变量,赋值给取值范围大
的变量,可以直接赋值
案例:
byte b = 100;
int i = b;//可以成功赋值
解释:
因为byte的取值范围是小的,int的取值范围是大的,在底层进行了隐式转换
,不需要我们额外写代码单独实现,是可以直接赋值。
强制类型转换
把一个取值范围大
的数值或者变量,赋值给取值范围小
的数值或者变量
注意:强制类型转换不允许直接赋值,需要加入强制类型转换
转换格式:
目标数据类型 变量名 = (目标数据类型) 被强制转换的数据;
public class TypeCast{
public staic void main(String[] args) {
double a = 12.3;
int b = (int) a;
System.out.println(b); // 12
}
}
我们可以发现原来的 12.3 经过强制类型转换后为 12 ,丢失了小数点后的数字,所以
强制类型转换有可能会造成数据精度的丢失。
扩展赋值运算符
类别
+=、-=、*=、/=、%=
案例:
public class Demo {
public staic void main(String[] args) {
int a = 10;
int b = 20;
a += b; // 相当于 a = a + b;
System.out.println(a); // 30
System.out.println(b); // 20
}
}
注意:扩展的赋值运算符中隐层还包含了一个强制类型转换
以 ‘ += ’ 为例:
a += b; ===> a = (byte)(a + b);
案例:
public class Demo {
public staic void main (System[] args) {
byte a = 10;
byte b = 20;
// a += b;
a = (byte)(a + b);
System.out.println(a); // 30
}
}
短路逻辑运算符
&&
运算结果与 &
一样(全真即真),但是有短路效果
短路效果: 左边 && 右边 ===>(1)如果 左边 为 true 则继续进行右边的判断
(2)如果 左边 为 false 则不进行右边的判断
||
运算结果与 |
一样(全假即假),但是又有短路效果
短路效果: 左边 || 右边 ===> (1)如果 左边 为 true 则不进行右边的判断
(2)如果 左边 为 false 则进行右边的判断
运算符优先级
方法(函数)
介绍:
一段具有独立功能的代码块,不调用就不执行。
好处:
(1)可以将原来臃肿的代码按照功能进行分类管理,提高代码的可阅读性
(2)提高了代码复用性
定义格式:
public static void 方法名() {
方法体(逻辑代码)
}
方法的调用格式:
方法名()
注意事项:
(1)方法与方法之间是平级关系,不允许嵌套定义
(2)方法不调用不执行
(3)方法的执行顺序与定义顺序无关,而与调用顺序有关
public class Demo {
public static void sayHello() {
System.out.println("Hello");
}
public static void main (String[] args) {
farmer();
cook();
sayHello();
// 再次声名:方法的执行顺序与定义顺序无关,而与调用顺序有关。
}
public static void cook() {
System.out.println("买菜");
System.out.println("洗菜");
System.out.println("做菜");
}
public static void farmer() {
System.out.println("买菜");
System.out.println("洗菜");
System.out.println("做菜");
}
}
方法调用内存图解
就以上述代码进行方法调用内存图解的分析
首先我们应该知道,我们的Java代码经过编译后会生成一个
.class
的字节码文件,在内存当中存在一个区域,称之为方法区
,我们编译生成后的字节码文件便会放在我们的方法区里
- 方法
没有被调用
的时候,方法存放在方法区
的字节码文件中
- 方法
被调用
的时候,需要进入到栈内存
中运行
在这里出现了栈
所以我们现来大概了解一下什么是栈
栈
栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。
我们把允许插入和删除的一端称之为栈顶,另一端称之为栈底,不含 任何元素的栈称之为空栈。栈
又称之为后进先出
的线性表。
正如弹夹一般,现先押入的子弹后打出,后压入的子弹先打出。
方法与栈内存的关系
步骤:
首先,字节码文件加载进入方法区,字节码文件中拥有我们所写的方法,在Java当中 main 方法
是程序的出入口,所以mian 方法
先进栈,在 mian 方法
中我们调用了许多方法,根据我们方法的调用顺序,其次是 farmer 方法
进栈执行,执行完后 farmer 方法
弹出栈内存,紧接着又调用了 cook 方法
,cook 方法
进栈执行,执行完后 cook 方法
弹出栈,随后是 sayHello 方法
进栈执行,执行完后弹出,由于此时 mian 方法
中已经没有任何的代码,所以最后 main 方法
也弹出栈,至此程序执行完毕。
带参数的方法
定义格式:
public static void 方法名(数据类型 变量名1,数据类型 变量名2... ) {
// 方法体
}
// 例如
public static void add (int a, int b) {
...
}
调用格式:
方法名(参数1, 参数2);
add(10,20);
带参数方法内存图解
带返回值的方法
public static 返回值类型 方法名( 参数 ) {
方法体;
return 数据 ;
// return 下面的代码属于无效代码
}
注意:return语句下面,不能编写代码,因为永远执行不到,属于无效的代码
方法的重载
-
在
同一个类
中,定义了多个同名的方法
,但每个方法具有不同的参数类型
或参数个数
,这些同名的方法,就构成了重载关系 -
简单记:同一个类中,方法名相同,参数不同的方法
参数不同:个数不同、类型不同、顺序不同
注意:识别方法之间是否是重载关系,只看方法名和参数,跟返回值无关