目录
并不是教学,仅供作者本人复习使用。
方法
方法是什么
方法是一种用于执行特定任务或操作的代码块,代表一个功能,它可以接收数据进行处理,并返回一个处理后的结果。
方法的定义
位置
类中方法外
具体格式
修饰符 返回值类型 方法名(参数列表){方法体}
自定义方法注意事项
方法名:见名知意
参数列表:如果需要传入数据,格式(数据类型 变量名),多个之间用逗号隔开。
返回值:如果需要返回数据,返回值类型需与返回的数据类型保持一致。如果方法不需要返回数据,返回值类型必须声明成void(无返回值声明)方法内部可以不使用return返回数据
方法如何使用
位置
当前学习调用位置: 在main方法中调用,因为main程序的入口
调用格式
直接调用(适用于返回值是void类型)
public static void main(String[] args) {
helloWorld();
}
public static void helloWorld() {
for (int i = 0; i < 3; i++){
System.out.println("hello world");
}
}
赋值调用、输出调用(适用于返回值有具体类型)
public static void main(String[] args) {
System.out.println(printVariable(4));
String a=printVariable(6);
System.out.println(a);
}
public static String printVariable(int num) {
String code="";
for (int i = 0; i < num; i++){
int num1= (int) (Math.random()*10);
code+=num1;
}
return code;
}
方法的重载
一个类中,出现多个方法的名称相同,但是它们的形参列表是不同的,那么这些方法就称为方法重载了。
public class Method03 {
public static void main(String[] args) {
int a=1;
int b=2;
int c=3;
System.out.println(add(a,b));
System.out.println(add(a,b,c));
}
public static int add(int a,int b) {
int sum=a+b;
return sum;
}
public static int add(int a,int b,int c) {
int sum=a+b+c;
return sum;
}
}
类型转换
自动类型转换
类型范围小的变量,可以直接赋值给类型范围大的变量。
范围比较
byte---> short ---> int ---> long ---> float ---> double
^
|
char
public static void main(String[] args) {
byte a=11;
short b=a;
int c=a;
long d=a;
}
以上变量a由于范围小,则可以直接赋值给变量b、c、d
强制类型转换
类型范围大的变量, 不可以直接赋值给类型范围小的变量,会报错,需要强制类型转换过去
格式
数据类型 变量1=(数据类型) 变量2
public static void main(String[] args) {
int m=1500;
byte n=(byte)m;
System.out.println(n);
}
此时由于m的范围大于n,所以需要强制转换,但此时出现了数据(丢失)溢出。
注意事项
数据丢失:范围大的的数据字节超过了范围小的可承受的最大范围,就会出现丢失。
表达式的自动类型转换是什么
在表达式中,小范围类型的变量,会自动转换成表达式中较大范围的类型,再参与运算。
byte 、short、char ---> int ---> long ---> float ---> double
public static void main(String[] args) {
byte a=10;
double b=3.14;
double c=a+b;
System.out.println(c);
}
此时可以看到变量a在经过表达式后,类型由byte转为int输出。
表达式的最终结果类型由谁决定
表达式的最终结果类型由表达式中的最高类型决定。
表达式需要注意哪些类型转换
byte short char是直接转换成int类型参与运算的。
public static void main(String[] args) {
char d='a';
char e='b';
// char f=d+e;报错
int f=d+e;
System.out.println(f);
}
键盘录入
键盘录入是什么
将控制台录入的数据,传递给程序去使用。
如何实现键盘录入
(1)导包
告诉程序去JDK的哪个包中找扫描器技术
位置:类的上方
(2)创建对象
代表得到键盘扫描器对象
位置:需要键盘录入的方法中。
(3)调用方法
等待接收用户输入数据
位置:哪里需要哪里调,建议 在调用键盘录入操作之前做个友情提示
主要的三种:nextInt(输入整数)、next(输入字符串)、nextDouble(输入小数)
public static void main(String[] args) {
//2:创建Scanner对象
Scanner sc = new Scanner(System.in);
//在接收键盘录入数据之前 做个友情提示
//键盘录入一个年龄 去接收
System.out.println("请输入您的年龄:");
// sc.nextInt() 等待用户实现键盘录入一个整数 回车一下 才会继续往下
int age = sc.nextInt();//使用int 类型变量 age 去接收 sc调用nextInt()方法获取到的数据
System.out.println("您的年龄是:"+age);
//键盘录入一个姓名去接收
System.out.println("请输入您的姓名:");
// sc.next() 接收用户录入字符串数据
String name = sc.next();
System.out.println("您的姓名是:"+name);
}
运算符
算数运算符
符号 | 作用 | 说明 |
+ | 加 | 参考小学一年级 |
- | 减 | 参考小学一年级 |
* | 乘 | 参考小学二年级,与“×”相同 |
/ | 除 | 与“÷”相同,注意:在Java中两个整数相除结果还是整数。 |
% | 取余 | 获取的是两个数据做除法的余数 |
“+”的特殊运用
“+”符号与字符串运算的时候是用作连接符的,其结果依然是一个字符串。如何识别+符号是做运算,还是做连接,独门秘籍:能算则算,不能算就连接在一起。
public static void main(String[] args) {
int a = 5 ;System.out.println("abc" + a);
System.out.println(a + 5);
System.out.println("abc"+ a + 'a');
System.out.println(a + 'a' + "abc");
}
特别注意最后一个结果,a字符转换为97进行计算。
自增自减运算符
符号 | 作用 | 说明 |
++ | 自增 | 放在某个变量前面或者后面,对变量自身的值加1 |
-- | 自减 | 放在某个变量前面或者后面,对变量自身的值减1 |
单独使用:
++、-- 如果在变量前后单独使用是没有区别的。
public static void main(String[] args) {
int a=5;
a++;
System.out.println(a);
++a;
System.out.println(a);
}
非单独使用:
++ 在变量前 表示 先增后用 ++ 在变量后先用后增
public static void main(String[] args) {
int m = 10;
int x = m++;// ++在变量的后面 先用后增
System.out.println("x的值:"+x);//10 why? 因为 ++在变量的后面,所以先赋值把m初始值10赋值给了x,m再加1
System.out.println("m的值:"+m);//11
int n = 10;
int y = ++n;//++在变量的前面 先增后用
System.out.println("y的值:"+y);//11 why? 因为 ++在变量的前面,所以n先加1再赋值给y y是11 n也是11
System.out.println("n的值:"+n);//11
}
小测试:
public static void main(String[] args) {
int c=10;
int d=5;
int rs3=c++ + ++c - --d - ++d + 1 + c--;
System.out.println("rs3的值:"+rs3);
System.out.println("c的值:"+c);
System.out.println("d的值:"+d);
}
赋值运算符
符号 | 用法 | 作用 | 底层代码形式 |
= | a=b | 赋值 | |
+= | a+=b | 加后赋值 | a = (a的类型)(a + b); |
-= | a-=b | 减后赋值 | a = (a的类型)(a - b); |
*= | a*=b | 乘后赋值 | a = (a的类型)(a * b); |
/= | a/=b | 除后赋值 | a = (a的类型)(a / b); |
%= | a%=b | 取余后赋值 | a = (a的类型)(a % b); |
注意:扩展的赋值运算符隐含了强制类型转换。
public static void main(String[] args) {
//目标 掌握 赋值运算符的使用
// 基本的赋值运算符 =
int a = 10;//将10 赋值给 变量a
int b = 20;
//扩展运算符的结论 其实就是将左右两边数据进行运算,将运算的结果赋值给左边。
a += b;//将a和b进行加法运算 将运算的结果赋值给a
// += 表示将左右两边数据进行加法运算,将结果赋值给左边
System.out.println(a);
System.out.println(b);
//演示一下其他的扩展赋值运算符 a 30 b 20
a -= b;
System.out.println(a);//10
a *= b;
System.out.println(a);//200
a /= b;
System.out.println(a);//10
a %= b;
System.out.println(a);//10
System.out.println("---------深入研究一个原理-----");
byte b1 = 3;
byte b2 = 4;
// b1 = b1+b2;//byte数据参与运算会变成int 所以想要成功需要做强转
// b1 = (byte) (b1+b2);
b1 += b2;//没有报错 说明b1+=b2的底层 有强制转换
}
关系运算符
符号 | 例子 | 作用 | 结果 |
> | a>b | 判断a是否大于b | 成立返回true、不成立返回false |
>= | a>=b | 判断a是否大于或者等于b | 同上 |
< | a<b | 判断a是否小于b | 同上 |
<= | a<=b | 判断a是否小于或者等于b | 同上 |
== | a==b | 判断a是否等于b | 同上 |
!= | a!=b | 判断a是否不等于b | 同上 |
注意:在java中判断是否相等一定是“== ” ,千万不要把 “== ”误写成 “=”。
三元运算符
格式:
条件表达式?值1:值2
执行流程:
首先计算关系表达式的值,如果值为true,返回值1,如果为false,返回值2。
public static void main(String[] args) {
System.out.println(bijiao(5,7));
System.out.println(bijiao(5,7,9));
}
public static int bijiao(int a,int b){
return a>b?a:b;
}
public static int bijiao(int a,int b,int c){
return a>b?(a>c?a:c):(b>c?b:c);
}
逻辑运算符
把多个条件放在一起运算,最终返回布尔类型的值:true、false。
符号 | 叫法 | 例子 | 运算逻辑 |
& | 逻辑与 | 2 > 1 & 3 > 2 | 多个条件必须都是true, 结果才是true; 有一个是false,结果就是false |
| | 逻辑或 | 2 > 1 | 3 < 5 | 多个条件中只要有一个是true, 结果就是true; |
! | 逻辑非 | ! (2 > 1) | 就是取反:你真我假,你假我真。!true == false、!false == true |
^ | 逻辑异 | 2 > 1 ^ 3 > 1 | 前后条件的结果相同,就直接返回false,前后条件的结果不同,才返回true |
&& | 短路与 | 2 > 10 && 3 > 2 | 判断结果与“&”一样,过程不同:左边为 false,右边则不执行。 |
|| | 短路或 | 2 > 1 | | 3 < 5 | 判断结果与“|”一样,过程不同:左边为 true, 右边则不执行。 |
注意:在java中, “&” 、 “|”: 无论左边是 false还是 true,右边都要执行。
注意:实际开发中、常用的逻辑运算符还是:&& 、 || 、 !
综合小案例
BMI与BMR的计算
package com.zb.test;
import java.util.Scanner;
public class Bmi {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.println("请输入身高(米):");
Double height=sc.nextDouble();
System.out.println("请输入体重(kg):");
Double weight=sc.nextDouble();
System.out.println("请输入性别(男/女):");
String sex=sc.next();
System.out.println("请输入年龄:");
int age=sc.nextInt();
System.out.println("您的bmi为:"+bmi(height,weight));
System.out.println("您的bmr为:"+bmr(height,weight,age,sex.charAt(0)));
}
public static Double bmi(Double height,Double weight) {
return weight/(height*height);
}
public static Double bmr(Double height,Double weight,int age,char sex) {
double bmr=0;
if (sex=='男'){
return 88.362+(13.397*weight)+(4.799*height)-(5.677*age);
}else if (sex=='女'){
return 447.593+(9.247*weight)+(3.098*height)-(4.330*age);
}
return bmr;
}
}