华清远见重庆中心—JAVA基础阶段技术总结

 Java概述 

Java发展

Java之父:詹姆斯·高斯林(James Gosling)

Java语言是美国Sun公司在1995年推出的计算机语言,Java的前身是Oak语言。

  • 1995年,Java正式诞生,推出了Java1.0以及开发工具包JDK1.0

  • 2004年,Java推出了Java5,此后都已JavaXL命名

  • 2009年,Sun公司被甲骨文(Oracle)公司收购,之后都由Oracle进行更新维护

  • 2014年,推出了Java8,是当前最流行稳定的版本,也是长期维护版LTS

  • 当前长期维护版为Java8,Java11和Java17

Java的分类和优点

分类

  • JavaEE:JavaME称为Java微型版,用于开发移动应用,早期的塞班系统中会使用,如今基本已经淘汰。
  • JavaSE:JavaSE称为Java标准版,是Java的核心和基础,也是JavaME和JavaEE的核心。可以用于开发桌面端程序。
  • JavaEE:JavaeEE称为Java企业版,用于开发WEB应用,Java的流行得益于JavaEE 

优点

  • 跨平台/可移植性:Java的核心优势之一, Java的运行是通过JVM来实现的,只需要在操作系统上安装对应的虚找机即可运行,节省代码重复编写时间。
  • 面向对象:Java是完全的面向对象语言,非常适合大型软件的设计和开发。
  • 多线程:Java多线程简单易用,使其成为了最主流的服务器端开发语言。
  • 简单:Java去掉了头指针,指针,结构等内容,更加简单易学。
  • 安全:一是严格遵循面向对象的规范,即封装了数据细节,只提供接口给用户,增加了数据级的安全性;二是无指针运算,增加了内存级的运算;三是数组边界检查,有效防止了缓存溢出等安全漏洞;四是强制类型转换,使非同类型的对象之间不能进行转换;五是语言对线程安全的支持;六是通过编译器、检验器、类装载器自动建立安全策略。
  • 开源

运算符

算术运算符

符号+-*/%
作用求余

注意:算术运算需要两个操作数,如果有浮点数参与运算,结果为浮点数;如果两个操作数都是数值型的数据,+用于计算。如果两个操作数有一端是字符串,+用于拼接字符串;如果同时多个符号一起使用,遵循数学中的四则运算规则,先乘除后加减;运算时最终结果的数据类型,以所有参与的操作数中所占字节最大的为准。

关系运算符

符号><>=<=!===
作用大于小于大于等于小于等于不等于等于

注意:关系运算需要两个操作是参与,计算结果为布尔型boolean;==用于判断相等,=用于赋值;==用于比较两个原始类型的值或引用类型的内存地址;关系运算结果为true/false

逻辑运算符

符号作用说明
&&and与符号两端需要聊个表达式,判断如果都为true,整体结果则为true,如果有一端结果为false,整体结果为false
||or或符号两端需要两个表达式,判断如果都为false,整体结果为false,如果有一端结果为true,整体结果为true
not非是一个单目运算符,只有一个表达式参与运算,“!表达式”表示对原表达式的结果取相反值

注意:&&和||也称为短路运算,如果能通过第一个表达式决定最终的结果,则不用判断第二个表达式;通常情况下,使用&&和||提高代码执行效率

条件运算符

三目运算符,有三个操作数参与。是一个简化版的双分支条件语句。

表达式1 ? 表达式2 : 表达式3

首先运算表达式1,如果结果为true,执行问号后的表达式2;如果结果为false,执行冒号后面的表达式3;整个表达式的最终结果为表达式2或者表达式3;

public class Runnian {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        int year=sc.nextInt();
        String str=(year%4==0&&year%100!=0)||(year%400==0)?"是闰年":"不是闰年";
        System.out.println(year+str);
    }
}

if语句

单分支if语句:如果一件事满足则执行,不满足则不执行。

if(判断条件){
    条件满足时执行的代码
}

public class IFTest {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        int n=3;
        if(n<=3){
            System.out.println("hello word");
        }
    }
}

双分支if语句:如果一件事有两种情况,满足执行某些内容,不满足则执行另一些类容

if(判断条件){

        条件满足时执行的代码

}else{

        不满足条件时执行的代码

}

public class Max {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        int a=sc.nextInt();
        int b=sc.nextInt();
        int max;
        if(a>b){
            max=a;
        }else {
            max=b;
        }
        System.out.println(max);
    }
}

switch

开关语句,如果一个变量的值能过列举出时,使用switch语句更加简洁

switch(表达式){

        case 常量表达式1: 语句1;

        break;

        case 常量表达式2: 语句2;

        break;

        ……

        case 常量表达式n: 语句n;

        break;

        default: 语句n+1;

}

public class Test1 {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        System.out.println("请选择功能:");
        System.out.println("1:注册");
        System.out.println("2:登录");
        System.out.println("3:退出");
        int n=sc.nextInt();
        switch (n){
            case 1:
                System.out.println("进入注册功能");
                break;
            case 2:
                System.out.println("进入登录功能");
                break;
            default:
                System.out.println("退出功能");
        }
    }
}

使用注意事项

  • Switch小括号中的变量只能是非long的整型,字符型char,字符串String和枚举类型

  • 小括号中的类型要和case后的值的类型相匹配

  • 如果有某个case后的内容和变量值相匹配,执行case后的代码,如果没有任何case匹配,执行default后的代码

  • break和default可以省略不写,如果不写break,在某个case匹配时,执行完相应的代码后继续执行后续case的代码,直到遇到break或没有代码为止

  • 如果多个case执行后的内容一致,可以省略break,将统一要做的代码放在最后的case后

if语句与switch语句的选择

  • 如果条件能够一一列举出来时,使用switch语句更加简洁

  • 如果条件是一个范围时,只能使用if语句

  • switch语句可以改成成if语句,if语句不一定能够改为switch语句

循环

如果要重复执行某些代码时,使用循环语句。

while

while(循环条件){  

         满足循环条件时重复执行

}

public class WhileTest {
    public static void main(String[] args) {
        int n=1;
        while (n<=3){
            System.out.println("Hello World");
            n++;
        }
    }
}

do-while

do{
    满足循环条件时执行的代码
}while(循环条件);

public class WhileTest {
    public static void main(String[] args) {
        int n=1;
        do{
            System.out.println("Hello World");
            n++;
        }while (n<=3);
    }
}
public class DoWhile {

    public static void main(String[] args) {
        int str = 123123;
        Scanner sc = new Scanner(System.in);
        int str1;
        int cout = 0;
        int money = 100;
        int n;
        boolean flag = true;
        do {
            System.out.println("请输入密码!");
            str1 = sc.nextInt();
            if (str == str1) {
                System.out.println("请选择功能");
                System.out.println("1:查询余额");
                System.out.println("2:存款");
                System.out.println("3:取款");
                System.out.println("4:退出");
                do {
                    n = sc.nextInt();
                    switch (n) {
                        case 1:
                            System.out.println("余额为" + money);
                            break;
                        case 2:
                            money+=50;
                            System.out.println("存款" + 50 + "元,余额为" + money );
                            break;
                        case 3:
                            money-=50;
                            System.out.println("取款" + 50 + "元,余额为" + money);
                            break;
                        case 4:
                            System.out.println("退出");
                            flag = false;
                            break;
                        default:
                            System.out.println("无效输入!,请重新输入");
                            break;
                    }
                } while (flag);
            } else {
                cout++;
                if (cout == 3) {
                    System.out.println("你不输入了,最多只能输入3次");
                    break;
                }
            }
        } while (str != str1);
    }

}

while和do-while的区别

while循环可能一次都不执行,do-while循环至少会执行一次

for循环

for(初始化;布尔表达式;更新){

​ //代码语句

}

//n的阶乘和n的阶乘和
public class ForTest {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n=sc.nextInt();
        int sum=0;
        int k=1;
        for(int i=1;i<=n;i++){
            k=k*i;
            sum+=k;
        }
        System.out.println(n+"的阶乘是"+k+",阶乘和是"+sum);
    }
}

循环总结

  • 如果一直循环次数,推荐使用for循环。如遍历数组、集合等。

  • 如果未知循环次数,推荐使用while循环。

  • while循环和for循环可以相互转换

  • do-while循环至少执行一次,for循环和while循环有可能一次都不执行

循环嵌套

如果一个重复的过程还需要将其整体重复执行时,可以使用循环嵌套。

//打印菱形
public class MyTest3 {
    public static void main(String[] args) {
        int h=7;
        for(int i=1;i<=h/2+1;i++){
            for(int j=1;j<=h/2+1-i;j++){
                System.out.print(" ");
            }
            for(int k=1;k<=2*i-1;k++){
                System.out.print("*");
            }
            System.out.println();
        }
        for(int i=h/2;i>=1;i--){
            for(int j=1;j<=h/2+1-i;j++){
                System.out.print(" ");
            }
            for (int k=1;k<=2*i-1;k++){
                System.out.print("*");
            }
            System.out.println();
        }
    }
}

数组(一维数组)

概念

一组类型相同的数据的有序集合

关于数组

实际在内存中是一块连续的空间。是保存数据的区域。

数组定义是需要确定大小和数据类型,不可改变。

数组中保存的数据称为元素,每个元素有个一个唯一的位置,称为索引(下标),这个索引从0开始计数。

可以通过数组的索引给数组赋值或读取数据中某个索引上的值。

定义数组

语法:数据类型[] 数组名或数据类型 数组名[];//建议使用前者。(约定俗成)

//定义数组后,如果不进行初始化数组,数组无法使用。

数组初始化

语法:数据类型[] 数组名=new 数据类型[数组大小]

double [] arr= new int[10];

数组赋值

动态赋值

通过数组名[索引]给数组中某个位置赋值

int arr=new int[10];
arr[0]=124;
arr[5]=2;

静态赋值

在定义数组的同时赋值

数据类型[] 数组名=new 数据类型[]{元素1,元素2,元素3……}

数据类型[] 数组名={元素1,元素2……}

String[] nameList1 =new String[]{"张三","李四","王二"};

String[] nameList2={"张三","李四","王二"};//也可以这样赋值

注意

  • 数组一旦初始化后,数组大小不能改变,其中的元素类型要统一。

  • 数组的索引范围是[0,数组大小-1],使用时不能抄书范围。在编译时无法识别是否超出数组索引,但运行时会抛出“数组索引”异常

  • 数组一旦初始化后,如果没有赋值,默认有初始值

数组数据类型默认值
整型0
浮点型0.0
引用类型(如string等)null
布尔型false
字符型空白字符

arrays是jdk提供的用于处理数组的工具类。包含了如排序、复制、填充等方法,这些方法都是静态方法,可以通过Arrays调用。

常用方法作用
sort(数组)将数组中的元素生序排序。
sort(数组,起始位置,结束位置)对数组中[起始位置,结束位置)区间的元素进行排序。
fill(数组,值)使用指定值对数组中的所有元素进行填充
fill(数组,起始位置,结束位置,值)使用指定值对数组中[起始位置,结束位置)区间的数进行填充。
copyOf(数组,新数组长度)复制数组并指定复制后的数组的长度。得到复制后的新数组。
asList(一组数据)将一组数据转为List集合。
equals(数组1,数组2)

判断两个数组是否相同,得到判断的布尔值。只有两个数组一模一样时得到true。

知识汇总

模拟买彩票及开奖过程

import java.util.Arrays;
import java.util.Random;
import java.util.Scanner;
public class ArrayHomeWork4 {
    public static void main(String[] args) throws InterruptedException {
        Scanner sc = new Scanner(System.in);
        Random rd = new Random();
        int[] userRed = new int[6];
        int[] comRed = new int[6];
        int userBlue, comBlue = rd.nextInt(16) + 1;
        System.out.print("请输入红色球号码");
        for (int i = 0; i < 6; i++) {
            int inp = sc.nextInt();
            if (inp < 1 || inp > 33) {
                System.out.println("输入有误");
                i--;
                continue;
            }
            userRed[i] = inp;
            for (int j = 0; j < i; j++) {
                if (userRed[i] == userRed[j]) {
                    System.out.println("该号码已存在");
                    i--;
                }
            }
        }
        while (true) {
            System.out.println("请输入蓝色球号码");
            int inpBlue = sc.nextInt();
            if (inpBlue < 1 || inpBlue > 16) {
                System.out.println("蓝色球号码输入有误");
            } else {
                userBlue = inpBlue;
                break;
            }
        }
        System.out.println("您选择的蓝色球号码为");
        System.out.println(userBlue);
        for (int i = 0; i < 6; i++) {
            comRed[i] = rd.nextInt(33) + 1;
            for (int j = 0; j < i; j++) {
                if (comRed[i] == comRed[j]) {
                    i--;
                }
            }
        }
        Arrays.sort(comRed);
        System.out.println("===============");
        //打印开奖结果
        System.out.println("开奖结果红色球号码为");
        for (int i : comRed) {
            Thread.sleep(1000);
            System.out.print(i + "\t");
        }
        System.out.println();
        System.out.println("开奖结果蓝色球号码为");
        System.out.println(comBlue);
        boolean flag = userBlue == comBlue;
        int count = 0;
        for (int i = 0; i < 6; i++) {
            for (int j = 0; j < 6; j++) {
                if (userRed[i] == comRed[j]) {
                    count++;
                }
            }
        }
        if (!flag) {
            System.out.println("很遗憾未中奖");
        }
        switch (count) {
            case 0:
            case 1:
            case 2:
                if (flag) {
                    System.out.println("六等奖,奖金5元");
                }
                break;
            case 3:
                if (flag) {
                    System.out.println("五等奖,奖金10元");
                }
                break;
            case 4:
                if (flag) {
                    System.out.println("四等奖,奖金200元");
                } else {
                    System.out.println("五等奖,奖金10元");
                }
                break;
            case 5:
                if (flag) {
                    System.out.println("三等奖,奖金3000元");
                } else {
                    System.out.println("四等奖,奖金200元");
                }
                break;
            case 6:
                if (flag) {
                    System.out.println("一等奖");
                } else {
                    System.out.println("二等奖");
                }
                break;
        }
    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值