java基础

1、Java程序执行过程
  • 在这里插入图片描述

    编写好的java源文件(也就是图中的.java文件)首先被javac.exe编译成为字节码文件(.class文件),再由java.exe对字节码文件进行运行。

  • 编译型语言:Java、C、C++等

  • 解释型语言:Python、JS等

  • java开发中常用的IDE(集成开发环境)有eclipse、IDEA等,其中eclipse本身也是由java写的。在开发的过程中,IDEA随时都在进行编译,不像CodeBlocks在编写C语言代码时,需要等整个编写过程结束之后进行统一集中编译。

2、Java的跨平台性
  • 由于java是运行在JVM(Java Virtual Machine)虚拟机上的,只要在不同的操作系统上安装对应的JVM,我们的java程序便可以做到一次编写,多平台运行。JVM有效的帮我们屏蔽了不同操作系统之间的差异,因而JVM是java跨平台性的保障

在这里插入图片描述

3、JDK、JRE
  • JDK( Java Delelopment Kit)即java开发工具包,JRE( Java Runtime Environment )即java运行时环境,其中JDK中已经包含了JRE,如果只是想单纯的运行java程序,只需要下载JRE就可。两者的关系如图所示:

在这里插入图片描述

4、 标识符:(变量的命名)
  1. 类名使用 大驼峰(UpperCamelCase) 风格,必须遵从驼峰形式。方法名、参数名、成员变量、局部变量都统一使用 小驼峰(lowerCamelCase) 风格,必须遵从驼峰形式。
  2. 代码中的命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结束,也不能以数字开头。
  3. 常量命名全部大写,单词间用下划线隔开,力求语义表达完整清楚,不要嫌名字长。
  4. 抽象类命名使用 Abstract 或 Base 开头;异常类命名使用 Exception 结尾;测试类命名以它要测试的类的名称开始,以 Test 结尾。
  5. 为了达到代码自解释的目标,任何自定义编程元素在命名时,使用尽量完整的单词组合来表达其意。见名知意
5、数据类型
  • Java是强类型语言,对于每一种数据都定义了明确的具体数据类型,在内存中分配了不同大小的内存空间。

在这里插入图片描述

  • 整数默认类型:int 小数默认类型:double

  • 1个字节=8位

  • byte: 1个字节,不考虑负数能表示范围是:0255,考虑正负表示范围:-128127 (其中有0,所以为127)

  • short:2个字节,16位 65536 0~65535

  • int: 4个字节,考虑正负:-21亿~+21亿

  • long:8个字节

  • float: 4个字节

  • double:8个字节

  • char字符型:2个字节,采用的是Unicode编码每个字符在编码表里面都对应一个int整数

  • boolean: 只有true和false两种情况

6、数据类型转换
  1. 从小到大自动类型转换
  2. 从大到小需要强制类型转换,可能会丢失精度装水的杯子大小不一样
  3. 从小到大依次为:byte->short(char)->int->long->float->double
public void test01() {
        char ch = 'a'; // 97
        System.out.println(ch);
        System.out.println(ch + 1); //一个char类型加上一个int类型,类型不一致不能进行相加,因此char类型会自动向上转型为int然后再相加
        System.out.println((char) (ch + 2)); //(ch + 2)ch向上转型之后为整个结果为int型,此时向下转型需要强制转换

        double a = 3.1415926;
        int b = (int) a; // 向下转型会丢失精度
        System.out.println(b);
    }

在这里插入图片描述

7、运算符
1、+、-、*、/、%
  • 其中%为求余操作符,经常用于判断一个数是否能被另一个数整除,如果余数为0则能整除
public void test0() {
        System.out.println(8%2);
        System.out.println(7%3);
        int a = 16;
        //判断16能否被2整除
        if (a % 2 == 0) {
            System.out.println(a + "能被2整除");
        } else {
            System.out.println(a + "不能被2整除");
        }
    }

在这里插入图片描述

2、 ++(自增1) --(自减1)

int i = 0;

i++; // i = i + 1;

i–; // i = i - 1;

++i; // i = i + 1

–i; // i = i - 1

  • 单独使用的时候,++、–在前后是没有差别的

  • 被使用的时候,在前后是有差别的

public void test03() {
        int i = 4;
        i++; // i = i + 1
        System.out.println(i); // 5
        System.out.println(i++); // 5
        System.out.println(i); // 6
        System.out.println(++i); // 7
    }

在这里插入图片描述

3、 比较运算符:> < >= <= !=
  • 比较之后的结果只有两种情况:true、false,所以比较运算的结果是boolean类型
4、 逻辑运算符:&& || ! 运算结果也是boolean类型
  • &&:两边的结果都是true,结果才是true

  • ||:两边只要有一个是true,结果就是true

  • &&、||会存在短路状况

public void test04() {
        int num1 = 3;
        int num2 = 5;
        // &&短路
        System.out.println(num1 < 0 && num1++ < num2); //false, 左边的num1 < 0已经为假了,右边就没必要判断了(直接被短路屏蔽),所以num1++不会被执行
        System.out.println(num1); // 3
        System.out.println(num2); // 5
        // ||短路
        System.out.println(num1 > 0 || num1++ < num2); // true,左边num1 > 0已经为真,整个就为真,右边没必要在进行判断,所以num1++同样不会被执行
        System.out.println(num1); // 3
        System.out.println(num2); // 5
    }

在这里插入图片描述

5、卫操作
public void test05() {
        Scanner scanner = new Scanner(System.in);
        int score = scanner.nextInt();
        // 卫操作,将非法输入与合法输入区分开,非法输入直接在前面拦截
        if (score < 0 || score > 100) {
            System.out.println("输入成绩非法");
            return;
        }

        // 合法输入
        if (score >= 90 && score <= 100) {
            System.out.println("优秀");
        } else if (score >= 80 && score < 90) {
            System.out.println("良好");
        } else if (score >= 70 && score < 80) {
            System.out.println("一般");
        } else if (score >= 60 && score < 70) {
            System.out.println("及格");
        } else {
            System.out.println("不及格");
        }
    }
6、三目运算
  • 语法:boolean ? 数1 : 数2
  • 执行过程:计算boolean的值 —>若为true:则整个结果为数1----> 若为false:则整个结果为数2
7、+号运算符
  • 两边都是数字,则做的就是加法运算
  • 若一边为字符串,则做的是字符串的拼接
8、练习:
  • 1、计算某年是不是闰年
    • 何为闰年? 能被4整除,但是不能被100整除 或者能被400整除
public void test06() {
        int year = 0;
        Scanner scanner = new Scanner(System.in);
        while (true) {
            year = scanner.nextInt();
            if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
                System.out.println(year + "是闰年");
            } else {
                System.out.println(year + "不是闰年");
            }
        }
    }

在这里插入图片描述

  • 2、从控制台输入两个数,然后分别打印这两个数,然后交换这两个数的值
  • 对于交换连个数的值,有两种常见的方案。一种是用一个额外变量做桥梁,如图所示的temp,另一种方式是采用异或运算的操作,相比较而言,位运算的表现更加优秀,因为其所花费的时间更短。

在这里插入图片描述

public void test07() {
        //采用tmp作为桥梁
        int num1 = 3;
        int num2 = 5;
        int tmp = 0;
        tmp = num1;
        num1 = num2;
        num2 = tmp;
        System.out.println("num1=" + num1);
        System.out.println("num2=" + num2);
    }

在这里插入图片描述

public void test07() {
        //采用异或运算
        int num1 = 3;
        int num2 = 5;
        num1 = num1 ^ num2;
        num2 = num1 ^ num2; //此时num2 = num1
        num1 = num1 ^ num2;
        System.out.println("num1=" + num1);
        System.out.println("num2=" + num2);
    }

在这里插入图片描述

  • 3、 (1) 编写一个收银台收款程序,if (2) 定义输入----单价、数量、用户输入金额 (3)定义输出----应收金额、找零 (4)使用double类型变量 scanner.nextDouble(); (5)当总价>=500时候打八折 (6)考虑程序出现异常的情况,如:收款金额小于应收金额 若收款金额大于等于应收金额,则计算找零后输出 若收款金额小于应收金额,输出错误信息。
public void test08() {
        double price = 0.0;
        double num = 0.0;
        double inputPrice = 0.0;
        double getPrice = 0.0;
        double outputPrice = 0.0;
        Scanner scanner = new Scanner(System.in);
        for (int i = 0; ; i++){
            price = scanner.nextDouble();
            num = scanner.nextDouble();
            inputPrice = scanner.nextDouble();
            getPrice = price * num;
            if (getPrice >= 500) {
                getPrice *= 0.8;
            }
            // 卫操作,拦截非法输入
            if (inputPrice < getPrice || inputPrice <= 0) {
                System.out.println("输入金额非法!");
                continue;
            }
            outputPrice = inputPrice - getPrice;
            System.out.println("应收金额:" + getPrice);
            System.out.println("找零:" + outputPrice);
        }
    }

在这里插入图片描述

8、whlie、for循环
  • 任何复杂的程序逻辑都可以通过“顺序”、“分支”、“循环”这三种基本结构来实现。 -

  • 循环的三要素: 1、循环条件的初始化 2、循环条件的控制 3、循环条件的改变

在这里插入图片描述

  • while、for循环主要是两类题目:

  • 1、累加思想(1+2+3+… + 100)

public void test09() {
        int sum = 0;
        for (int i = 1; i <= 100; i++) {
            sum += i;
        }
        System.out.println(sum);
    }

在这里插入图片描述

  • 2、 统计思想,数一下符合条件的有多少个(计算1-100以内7的倍数的个数)
public void test09() {
        int sum = 0;
        for (int i = 1; i <= 100; i++) {
            if (i % 7 == 0) {
                sum++;
                System.out.print(i + " ");
            }
        }
        System.out.println();
        System.out.println(sum);
    }

在这里插入图片描述

1、continue、break
  • continue:跳出本次循环,继续下一次循环
public void test10() {
        for (int i = 1; i <= 10; i++) {
            if (i == 5) {
                continue;  //跳出i = 5 这次循环,集训从 i = 6开始
            }
            System.out.print(i + " ");
        }
    }

在这里插入图片描述

  • break:跳出离他最近的整个那层循环
public void test11() {
        for (int i = 1; i <= 10; i++) {
            if (i == 5) {
                break; // i=5的时候跳出整个循环,后面从i=6开始的循环不再执行
            }
            System.out.print(i + " ");
        }
    }
public void test12() {
        for (int i = 1; i <= 10; i++) {
            for (int j = 1; j <= 10; j++) {
                if (j == 5) {
                    break; //跳出离它最近的那整层循环,也就是里面j的这一层循环
                }
                System.out.print(j + " ");
            }
            System.out.print(i + " ");
        }
    }

在这里插入图片描述

在这里插入图片描述

例题:
  • 随机生成一个整数1-1000 , 用户输入一个整数,程序给出与存储的数字是“大”或者“小”,知道用户猜到这个数字位置。 如果中途用户希望程序退出,输入0可以退出。
public void test01() {
        int random = (int) (1000 * Math.random() + 1);
        Scanner scanner = new Scanner(System.in);
        while (true) {
            System.out.print("请输入你猜的数:");
            int num = scanner.nextInt();
            if (num == 0) {
                break;
            }

            if (random == num) {
                System.out.println("恭喜你,猜对了");
            } else if (random < num) {
                System.out.println("太大了,继续猜吧");
            } else {
                System.out.println("太小了,继续猜吧");
            }
        }
    }

在这里插入图片描述

9、 switch: 可以接受的值(int byte 整数类型,char,String)

switch(2) {

case 1:

break;

case 2:

break;

default:

… break;

}

  • 输入月份、年份判断天数: 1、3、5、7、8、10、12 -------- 31天 4、6 、9、11--------------------30天 2----------------------------------28/29天
public void test02() {
        int year = 0;
        int month = 0;
        Scanner scanner = new Scanner(System.in);
        while (true) {
            System.out.print("请输入年份、月份:");
            year = scanner.nextInt();
            month = scanner.nextInt();
            if (month < 1 || month > 12) {
                System.out.println("输入不合法,请重新输入!");
            }
            switch (month) {
                case 1:
                case 3:
                case 5:
                case 7:
                case 8:
                case 10:
                case 12:
                    System.out.println("31天");
                    break;
                case 4:
                case 6:
                case 9:
                case 11:
                    System.out.println("30天");
                    break;
                case 2:
                    if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
                        System.out.println("29天");
                    } else {
                        System.out.println("28天");
                    }
                    break;
                default:
                    break;
            }
        }
    }

在这里插入图片描述

public void test03() {
        Scanner scanner = new Scanner(System.in);
        System.out.print("请输入成绩:");
        while (true) {
            int score = scanner.nextInt();
            if (score < 0 || score > 100) {
                System.out.println("输入成绩非法");
                return;
            }
            switch (score / 10) {
                case 9:
                    System.out.println("优秀");
                    break;
                case 8:
                    System.out.println("良好");
                    break;
                case 7:
                    System.out.println("一般");
                    break;
                case 6:
                    System.out.println("及格");
                    break;
                default:
                    System.out.println("不及格");
                    break;
            }
        }
    }

在这里插入图片描述

  • 在这里插入图片描述
public void test04() {
        for (int i = 0; i < 3; i++) {
            for (int j = 0; j < 4; j++) {
                System.out.print("*");
            }
            System.out.println();
        }
    }

在这里插入图片描述

-在这里插入图片描述

public void test05() {
        for (int i = 1; i <= 5; i++) {
            for (int j = 1; j <= i; j++) {
                System.out.print("*");
            }
            System.out.println();
        }
    }

在这里插入图片描述

  • 在这里插入图片描述
public void test05() {
        for (int i = 1; i <= 9; i++) {
            for (int j = 1; j <= i; j++) {
                System.out.print(j + "x" + i + "=" + (i * j));
                System.out.print(" ");
            }
            System.out.println();
        }
    }

在这里插入图片描述

双重for循环:外层循环控制行数,数一下有几行就能确定外层循环

内层循环控制列数,这一行打印多少个,到底要打印多少个要找出和当前行之间的一个关系

  • 1、输出以下结构: 在这里插入图片描述
public void test06() {
        for (int i = 1; i <= 5; i++) {
            for (int j = 1; j <= i; j++) {
                System.out.print(j);
            }
            System.out.println();
        }
    }

在这里插入图片描述

  • 2、 打印正三角形和倒三角形 :

在这里插入图片描述

public void test07() {
        int n = 6;
        for (int i = 1; i <= n; i++) {
            for (int j = 1; j <= n - i; j++) {
                System.out.print(" ");
            }
            for (int j = 1; j <= 2 * i - 1; j++) {
                System.out.print("*");
            }
            System.out.println();
        }
    }

在这里插入图片描述

public void test08() {
        int n = 6;
        for (int i = n; i >= 0; i--)
        {
            for (int j = 0; j < n - i; j++)
            {
                System.out.print(" ");
            }
            for (int j = 2 * i - 1; j > 0; j--)
            {
                System.out.print("*");
            }
            System.out.println();
        }
    }

在这里插入图片描述

  • 3、 计算1-100以内所有奇数的和以及所有偶数的和,分别打印出来。
public void test09() {
        int sum1 = 0;
        int sum2 = 0;
        for (int i = 1; i <= 100; i++) {
            if (i % 2 == 0) {
                sum1 += i;
            } else {
                sum2 += i;
            }
        }
        System.out.println("奇数和为:" + sum2);
        System.out.println("偶数和为:" + sum1);
    }

在这里插入图片描述

  • 4、 用for循环输出1—1000之间能被5整除的数,且每行输出3个
public void test10() {
        int sum = 0;
        for (int i = 1; i <= 1000; i++) {
            if (i % 5 ==0) {
                System.out.print(i + " ");
                sum++;
                if (sum % 3 == 0) {
                    System.out.println();
                }
            }
        }
    }

在这里插入图片描述

  • 5、 计算9的阶乘
public void test11() {
        int sum = 1;
        for (int i = 1; i <= 9; i++) {
            sum *= i;
        }
        System.out.println("9的阶乘为:" + sum);
    }

在这里插入图片描述

  • 6、 使用循环打印100-200之间所有的素数(只能被1和自己整除的数叫素数)

    • 方式一:
    public void test12() {
            for (int i = 100; i <= 200; i++) {
                boolean flag = true;
                for (int j = 2; j <= i - 1; j++) {
                    if (i % j == 0) {
                        flag = false;
                        break;
                    }
                }
                if (flag) {
                    System.out.print(i + " ");
                }
            }
        }
    

    在这里插入图片描述

    • 方式二:
    public void test12() {
            for (int i = 100; i <= 200; i++) {
                boolean flag = true;
                for (int j = 2; j <= Math.sqrt(i); j++) {
                    if (i % j == 0) {
                        flag = false;
                        break;
                    }
                }
                if (flag) {
                    System.out.print(i + " ");
                }
            }
        }
    

    在这里插入图片描述

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值