特别声明:此文章仅作为作者本人的学习笔记使用,由于作者本人还处在学习阶段,文章中难免有用词不当的地方,或者知识点讲解不清晰的地方,如若读者发现,欢迎评论区留言。如果这篇文章对您有所帮助,希望您能点个赞
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语句下面,不能编写代码,因为永远执行不到,属于无效的代码
方法的重载
-
在
同一个类中,定义了多个同名的方法,但每个方法具有不同的参数类型或参数个数,这些同名的方法,就构成了重载关系 -
简单记:同一个类中,方法名相同,参数不同的方法
参数不同:个数不同、类型不同、顺序不同
注意:识别方法之间是否是重载关系,只看方法名和参数,跟返回值无关