Java入门学习笔记 -- Day2

Java入门学习笔记 – Day2

三. 基础语法

3.8 方法详解

  1. 方法: 特定任务或操作的代码块。

  它是一种用于执行特定任务或操作的代码块,代表一个功能, 它可以接收数据进行处理, 并返回一个处理后的结果。

  1. 方法的完整定义格式
修饰符 返回值类型 方法名{形参列表}{
	方法体代码{需要执行的功能代码}
	return 返回值;
}
public static int max(int a, int b){
	int max = a > b ? a : b;
	return max;
}
  1. 方法如何使用
    • 方法必须被调用才能执行, 调用格式: 方法名称(数据)。
  2. 方法的其他形式
  3. 如果方法不需要返回数据,返回值类型必须声明成void(无返回值声明) 方法内部不可以使用return 返回数据。
package com.pdwei.method;

public class MethodDemo1 {
    public static void main(String[] args) {
        // 目标: 掌握方法定义和调用。
        int sum = getSum(10, 20);
        System.out.println("和是: " + sum);

        System.out.println("-------------------");

        int sum2 = getSum(100, 200);
        System.out.println("和是: " + sum2);

        printHelloWorld();

        System.out.println("-------------------");

        System.out.println("验证码是: " + getVerifyCode(4));
        System.out.println("验证码是: " + getVerifyCode(5));

    }

    // 定义一个方法, 求任意两个整数的和并返回。
    public static int getSum(int a, int b) {
        int sum = a + b;
        return sum;
    }

    // 需求: 打印3行 HelloWorld, 不需要参数,也不需要返回值
    // 注意: 如果方法没有返回的结果,返回值类型必须声明为 void。
    // 无参数,无返回值类型
    public static void printHelloWorld() {
        System.out.println("Hello World!");
        System.out.println("Hello World!");
        System.out.println("Hello World!");
    }

    // 需求3: 获取一个指定位数的验证码返回.
    // 掌握方法的定义格式
    // 需要接收数据,需要接收位数 int len
    // 需要返回数据,需要返回验证码 String
    // 有参数有返回值的方法
    public static String getVerifyCode(int len) {
        String code = "";
        for (int i = 0; i < len; i++) {
            int num = (int) (Math.random() * 10);
            code += num;
        }
        return code;
    }
}

3.9 方法的注意事项

  1. 方法可以重载
    • 一个类中, 出现多个方法的名称相同, 但是他们的形参列表是不同的, 那么这些方法就称为方法重载了。
  2. 无返回值的方法中可以直接通过单独的return; 立即结束当前的方法的执行。
package com.pdwei.method;

public class MethodDemo3 {
    public static void main(String[] args) {
        // 目标: 掌握在无返回值的方法中单独使用 return; 提前结束方法。
        divide(10, 0);
    }

    // 设计一个除法的功能
    public static int divide(int a, int b) {
        if (b == 0) {
            System.out.println("除数不能为0");
            return -1;  // 提前结束方法. 卫语言风格!!
        }
        return a / b;
    }
}

3.10 自动、强制类型转换

  1. 什么是自动类型转换, 为什么要进行自动类型转换?
    • 类型范围小的变量, 可以直接赋值类型范围大的变量。

byte → \to short → \to int → \to long → \to float → \to double
char → \to int

  1. 自动类型转换在计算机中的执行原理

a 00001100 (8位)
a → \to b
b 00000000 00000000 00000000 00001100 (32位)

  1. 什么是强制类型转换, 为什么要进行强制类型转换?
    • 类型范围大的变量, 不可以直接赋值类型范围小的变量, 会报错, 需要强制类型转换过去。
int a = 20;
byte b = (byte) a;
System.out.println(b);  // 20

a 00000000 00000000 00000000 00010100
a → \to b
b 00010100

int i = 1500;
byte j = (byte) i;
System.out.println(j);  // -36

i 00000000 00000000 00000101 11011100 (32位)
j 11011100 (8位)

  1. 注意事项
    • 强制类型转换可能造成数据(丢失)溢出; 浮点型强转成整型, 直接丢掉小数部分, 保留整数部分返回
  2. 为什么要进行类型转换?
    • 存在不同类型的变量赋值给其他类型的变量
package com.pdwei.type;

public class TypeDemo1 {
    public static void main(String[] args) {
        // 目标: 人数自动类型转换,强制类型转换。
        byte a = 12;
        print(a);  // 自动类型转换
        print2(a);  // 自动类型转换

        System.out.println("--------------------------");

        int i = 20;
        // print3(i);  // 类型范围大的变量不能直接赋值给类型范围小的变量, 会报错的!!

        // 强制类型转换, 类型 变量2 = (类型) 变量1
        byte j = (byte) i;
        print3(j);

        System.out.println("--------------------------");
        int m = 1500;
        byte n = (byte) m;
        System.out.println(m);
        System.out.println(n);  // 出现数据溢出!!

        System.out.println("--------------------------");

        double k = 12.56;
        int l = (int) k;
        System.out.println(k);
        System.out.println(l);  // 12.56 -> 12
    }

    public static void print(int a) {
        System.out.println(a);
    }

    public static void print2(double a) {
        System.out.println(a);
    }

    public static void print3(byte a) {
        System.out.println(a);
    }
}

3.11 表达式的自动类型提升

  1. 表达式的自动类型转换
    • 在表达式中, 小范围类型的变量, 会自动转换成表达式中较大范围的类型, 再参与运算。

    byte、short、char → \to int → \to long → \to float → \to double

  2. 注意事项:
    • 表达式的最终结果类型由表达式中的最高类型决定。
    • 在表达式中, byte、short、char直接转换成int类型参与运算的。
package com.pdwei.type;

public class TypeDemo2 {
    public static void main(String[] args) {
        // 目标: 理解表达式的自动类型提升
        int result = calc2((byte)110, (byte)120);
        System.out.println(result);

        System.out.println("--------------------------");
        int result2 = calc3((byte)110, (byte)120);
        System.out.println(result2);
    }

    // 需求: 接收各种类型的数据运算。
    public static double calc(int a, int b, double c, char r) {
        // 表达式的最终结果类型是由最高类型决定的
        return a + b + c + r;
    }

    public static int calc2(byte a, byte b){
        // byte short char 运算时会直接提升成 int 运算。
        return a + b;
    }

    public static byte calc3(byte a, byte b) {
        byte c = (byte) (a + b);
        return c;
    }
}


3.12 输入、输出

  1. 输出: 把程序中的数据展示出来。
System.out.println("Hello World!")
  1. 输入: 程序读取用户键盘输入的数据。

通过Java提供的 Scanner程序来实现

  1. Scanner是Java提供好的API,程序员可以直接调用
  2. API (Application Programming Interface: 应用程序编程接口)
    • Java写好的程序, 咱们程序员可以直接拿来调用。
    • Java为自己写好的程序提供了相应的程序使用说明书(API文档)
package com.pdwei.scanner;
// 1. 导包 告诉我们自己的程序,去JDK哪里找Scanner程序用

import java.util.Scanner;

public class ScannerDemo1 {
    public static void main(String[] args) {
        printUserInfo();
    }

    // 需求: 我是一个零基础小白,请帮我写一个程序,可以让用户键盘输入用户名和年龄,然后打印出来。
    public static void printUserInfo() {
        // 2. 创建一个Scanner对象,  用来接收用户输入的数据
        Scanner sc = new Scanner(System.in);

        // 3.获取用户输入的数据
        System.out.println("请输入用户名:");
        // 让程序在这一行暂停, 等待用户输入一个字符串名称, 直到按了回车键之后, 把名字交给变量name记住,再往下走
        String name = sc.next();
        System.out.println("您叫: " + name);

        System.out.println("请输入年龄:");
        // 让程序在这一行暂停, 等待用户输入一个整数, 直到按了回车键之后, 把名字交给变量age记住,再往下走
        int age = sc.nextInt();
        System.out.println("您今年: " + age + "岁");

    }
}


第四章 运算符

4.1 基本运算符、自增自减运算符

  1. 基本的算术运算符
    加(+)减(-)乘(*)除(/)取余(%)
  2. +符号在Java中的特殊用途
    • “+”符号在有些情况可以做连接符
    • “+”符号与字符串运算的时候是用作连接符的,其结果依然是一个字符串。
  3. 自增自减运算符
    • 自增: ++ 放在某个变量前面或者后面,对变量自身的值加1
    • 自减: – 放在某个变量前面或者后面,对变量自身的值减1

Mark:++、- -只能操作变量,不能操作字面量
++、–如果在变量前后单独使用时没有区别的
++、–如果不是单独使用(如在表达式中、或同时又其他操作),放在变量前后会存在明显区别

  • 在变量的前面,先对变量+1、-1,再拿变量的值运算。
  • 在变量的后面,先拿变量的值运算,再对变量的值+1、-1
package com.pdwei.operator;

public class OperatorDemo2 {
    public static void main(String[] args) {
        // 目标: 理解自增自减运算符
        print(10);
        System.out.println("================");
        print2(10);
        System.out.println("================");
        print3();
    }

    // 设计一个方法,接收一个整数。
    public static void print(int a) {
        // 输出a的值
        System.out.println(a);
        // a自增1
        a++;
        // 输出a的值
        System.out.println(a);
        ++a;
        System.out.println(a);
        // a自减1
        a--;
        // 输出a的值
        System.out.println(a);
    }

    // 设计一个方法,理解自增和自减放在变量前后的区别
    public static void print2(int a) {
        int b = a++;  // a++ 先赋值再自增
        System.out.println(a);  // 11
        System.out.println(b);  // 10

        int c = ++a;  // ++a 先自增再赋值
        System.out.println(a);  // 12
        System.out.println(c);  // 12

        int d = a--;
        System.out.println(a);
        System.out.println(d);

        int e = --a;
        System.out.println(a);
        System.out.println(e);

        int f = a;
        System.out.println(a);
        System.out.println(f);

    }

    public static void print3() {
        int c = 10;
        int d = 5;
        int rs3 = c++ + ++c - --d - ++d + 1 + c--;  // 10 + 12 - 4 - 5 + 1 + 12 = 26
        System.out.println(rs3);
        System.out.println(c);
        System.out.println(d);
    }
}

4.2 赋值运算符、三元运算符

  1. 基本赋值运算符
    • 就是=,从右往左看
int a = 10;  // 先看"="右边,把数据10赋值给左边的变量a存储。
  1. 扩展赋值运算符
    • |+= | 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); |
  2. 关系运算符、三元运算符
    • |>|a>b|判断a是否大于b|成立返回true, 不成立返回false|
    • |>=|a>=b|判断a是否大于或者等于b|成立返回true, 不成立返回false|
    • |<|a
    • |<=|a<=b|判断a是否小于或者等于b|成立返回true, 不成立返回false|
    • |==|a==b|判断a是否等于b|成立返回true, 不成立返回false|
    • |!=|a!=b|判断a是否不等于b|成立返回true, 不成立返回false|
      根据数据是否满足条件,最终会返回一个判断的结果,这个结果是布尔类型的值: true或者false。

Mark: 在java中判断是否相等一定是 “==”, 千万不要把"==“误写成”="。

  1. 三元运算符
  • 格式: 条件表达式? 值1 : 值 2;
  • 执行流程: 首先计算关系表达式的值, 如果值为true,返回值1,如果为false, 返回值2
package com.pdwei.operator;

public class OperatorDemo5 {
    public static void main(String[] args) {
        // 目标: 三元运算符
        print(10, 40);
        print(59);
        System.out.println(getMax(10, 40, 60));
    }
    public static void print(int a, int b) {
        int c = a > b ? a : b;
        System.out.println("较大值: " + c);
    }

    // 需求: 判断成绩是否通过或者挂科
    public static void print(int score) {
        String result = score >= 60 ? "通过" : "挂科";
        System.out.println(result);
    }

    // 需求: 求三个整数的较大值返回
    public static int getMax(int a, int b, int c) {
        // 三元运算符的嵌套
        int max2 = a > b ? a > c ? a : c : b > c ? b : c;
        int max = a > b ? a : b;
        max = max > c ? max : c;
        return max;
    }
}

4.3 逻辑运算符

  1. 逻辑运算符
    • 把多个条件放在一起运算,最终返回布尔类型的值: true、false。
符号 叫法 例子 运算逻辑
& 逻辑与 2>1 & 3>2 ==多个条件必须都是true,结果才是true;==有一个是false, 结果就是false
! 逻辑或 2>1 | 3<5 多个条件中只要有一个是true, 结果就是ture;
! 逻辑非 !(2>1) 就是取反: 你真我假,你假我真。!true=false、!false=true
^ 逻辑异或 2>1 ^ 3>1 前后条件的结果相同,就直接返回false, 前后条件的结果不同, 才返回true
&& 短路与 2>10 && 3 > 2 判断结果与"&"一样,过程不同: 左边为false, 右边则不执行
|| 短路或 2>1|| 3<5 判断结果与"|"一样,过程不同,左边为 true,右边则不执行
package com.pdwei.operator;

public class OperatorDemo6 {
    public static void main(String[] args) {
        // 目标: 掌握逻辑运算符的使用
        System.out.println(isMatch(180, 70, '女'));
        System.out.println(isMatch(180, 70, '男'));
        System.out.println(isMatch2(180, 10000));
        System.out.println(isMatch2(160, 1000000));
        System.out.println(isMatch2(160, 100));
        isMatch3(true);
        System.out.println("================");
        isMatch4(true);
        System.out.println("================");
        test();
    }

    // 需求: 判断某个人的条件是否满足择偶要求,如果满足,返回true,否则返回false
    // 条件: 身高高于170,体重在60~80之间,且性别为女。
    // & 必须前后条件都是 true 结果才是true,只要有一个为false,结果就是false
    public static boolean isMatch(int height, int weight, char sex) {
        return height > 170 & weight >= 60 & weight <= 80 & sex == '女';
    }

    // 需求: 找一个男朋友,要求是要么身高高于180,要么收入高于30w。
    // | 只要有一个为true,结果就是true,必须都是false,结果就是false
    public static boolean isMatch2(int height, int income) {
        return height >= 180 | income > 300000;
    }

    // ! 非,你真我假,你假我真
    public static void isMatch3(boolean flag) {
        System.out.println(!flag);
    }

    // ^  异或, 相同条件结果:false,条件不同结果:true
    public static void isMatch4(boolean flag) {
        System.out.println(flag ^ true);
        System.out.println(flag ^ false);
        System.out.println(true ^ true);
        System.out.println(false ^ false);
        System.out.println(true ^ false);
        System.out.println(false ^ true);
    }

    // 判断 && || 与 & | 的区别
    public static void test() {
        int a = 111;
        int b = 2;
        // System.out.println(a > 1000 && ++b > 1);  // false && 发现左边为false,右边直接不执行
        System.out.println(a > 1000 & ++b > 1);  // false & 发现左边为false,右边也执行了
        System.out.println(b);

        int i = 10;
        int j = 20;
        System.out.println(i++ > 6 || ++j > 1);  // true || 发现左边条件为true,右边直接不执行
        System.out.println(i++ > 6 | ++j > 1);  // true | 发现左边条件为true, 右边也执行了
        System.out.println(i);
        System.out.println(j);


    }
}

综合实战1 身体健康指数计算

  1. 案例: 健康计算器
    • 开发一个简单的健康计算器应用程序,他可以接受用户的输入(如年龄、性别、体重、身高),并计算出用户的BMI(身体质量指数)和基础代谢率(BMR)。
package com.pdwei.demo;

import java.util.Scanner;

public class AllTest {
    public static void main(String[] args) {
        // 目标: 完成健康计算器
        Scanner sc = new Scanner(System.in);
        // 1. 先让用户输入自己的个人信息:身高、体重、性别、年龄
        System.out.println("请输入您的身高: ");
        double height = sc.nextDouble();
        System.out.println("请输入您的体重: ");
        double weight = sc.nextDouble();
        System.out.println("请输入您的性别: ");
        String sex = sc.next();
        System.out.println("请输入您的年龄: ");
        int age = sc.nextInt();

        System.out.println("您的BMI值是: " + getBMI(height, weight));

        // 判断用户的bmi 值的情况......

        double bmr = getBMR(height, weight, age, sex);
        System.out.println("您的基础代谢率是: " + bmr);

        // 判断用户的bmr值的情况......


    }

    // 2. 根据用户的个人信息,计算出BMI值 (把数据交给一个独立的方法来计算并返回这个结果)
    public static double getBMI(double height, double weight) {
        double bmi = weight / (height * height);
        return bmi;
    }

    // 3. 根据用户的个人信息,计算出BMR值 (把数据交给一个独立的方法来计算并返回这个结果)
    public static double getBMR(double height, double weight, int age, String sex) {
        double bmr = 0;
        if ("男".equals(sex)) {
            bmr = 88.362 + (13.397 * weight) + (4.799 * height) - (5.677 * age);
        } else {
            bmr = 447.593 + (9.247 * weight) + (3.098 * height) - (4.330 * age);
        }
        return bmr;
    }
}

D a y   2 C o m p e t e ! ! ! \mathcal{Day~2\quad Compete!!!} Day 2Compete!!!

Java入门学习笔记 -- Day2_第1张图片

"那就祝我们 被鲜花簇拥 看大海漫漫 热烈且自由 赤诚又勇敢。” — —德卡先生的信箱

你可能感兴趣的:(Java学习笔记,java,学习,笔记)