一、计算机基础知识
1.计算机
计算机是一个能够高速处理海量数据智能电子设备.
由两部分组成:
软件和硬件.
没有安装任何软件的计算机,裸机!
2.计算机用途
科学计算,利用计算机完成数据的运算
数据存储,完成一些文件的读和写,或者对一些数组内容排序...
计算机辅助设计:CAD工程制图
人工智能:利用计算机模拟人工思维!
媒体应用:动画,视频...
计算机网络:网络也很重要,一个台计算机没有网络,类似于电话没有电话线一个道理!
3.计算机硬件
概念:由电子,机械和光电元件组成的物理装置的总称!
组成:由CPU、主板、内存、电源、主机箱、硬盘、显卡、键盘、鼠标,显示器等等!
4.计算机软件
两种:
系统软件
dos系统,windows系统,Linux系统,MAC系统 移动端:Android系统,ios系统
应用软件:
计算机上的安装的客户端软件,QQ,办公软件wps,wegame软件,....
5.人机交互的方式
方式1:图形界面化(快速)
简单,直观,容易上手!(用鼠标操作即可,快速去创建文件/文件夹/删除等操作)
方式2:命令行方式(掌握指令)
现在是在windows系统上,
Java工程师 最起码以后企业里面,
可能是半个运维(Linux相关的指令起码20-40个指令),可能是半个测试,半个前端
进入dos命令行窗口(dos控制台)
方式1: (推荐)
windows键+r键组合键------>输入cmd----->进入dos窗口
6.常用的dos窗口指令
1)盘符号的切换
盘符号不区分大小写: 回车即可
C:\Users\Administrator>D: 盘符后面的这个冒号是英文符号
D:\>
2)进入指定单个文件夹(目录) cd 目录名称
D:\>cd EE_2211
D:\EE_2211>
3)进入多级目录 cd 多级目录的路径
cd 将多级路径的名称复制过来(win10系统/win11系统 在dos窗口直接鼠标右键就粘贴了 )
D:\>cd D:\EE_2211\10_24_am_code_resource\code
D:\EE_2211\10_24_am_code_resource\code>
4)回退上一级目录 cd.. 或者cd ..
5)如果现在处在多级目录路径上,想回退盘符根目录 cd \或者cd\
6)查看(罗列)这个盘符或者目录某个目录的详细信息 dir指令
7)清除屏幕指令 cls(clear scrren)
当你dos窗口上面有很多信息,将上面的信息不用了,删了,使用这个
8) 要在指定的目录里面创建文件夹(目录)
md (make directory)文件夹名称(目录名称)
9)创建文件
copy con 文件名称带上后缀名 ----按回车键---进入编辑模式,书写文件内容,书写完成成之后,按---ctrl+z,编辑完成----回车即可!
rd (remove deirectory)
11) 删除文件 del 指定文件名称 也可以批量删除所有同名的后缀的文件
举例:del *.txt 删除所有带有.txt的文件
12) rd的扩展指令
在windows系统上,想删除带内容的目录(里面有文件或者子文件夹)
rd /s 文件夹名称(目录) :询问删除删除带内容的目录? y/n 选择y就是删除,n不删除
rd /s /q 文件名称(目录) :不询问删除带内容的目录 (属于暴力删除 这个指令慎用!)
rm -rf 目录名称 :在linux系统 递归删除所有的文件夹以及里面子文件
7.Java的发展历史
Java之父 詹姆斯高斯林 1995年正式推出
Java图标 热气腾腾咖啡图标
8.Java平台版本(重点)
JavaSE(Standard Edition): 针对桌面应用程序的解决方案
JavaME( Micro Edition) :针对嵌入式设备提供的一套解决方案
移动端:Anroid基于JavaSE,还需要anroid相关的广播,订阅,服务,,,
Ios系统基于C语言
JavaEE( Enterprise Edition) :针对企业级开发解决方案(以后就是搞这个的!)
学习JavaEE核心技术13种:
Servlet
Jsp
Spring
Springmvc
Mybatis
Springboot
9.关于Java语言特点以及jdk,Jre,jvm的介绍
Java简单性,健壮性,分布式, (良好的移植性,开源)
JVM:Java Virtual Machine Java虚拟机
假象计算机,自己的网络,自己的内存区域等等;
Jre:Java Runtime Environment Java运行环境,所有的Java应用程序要运行,计算机上必须有Java环境的支持,没有这个东西,运行不了,而Jre里面包含了Jvm以及Java程序运行时所有需要的核心类库
Jdk:Java Development Kit :Java开发工具包,里面有很多的开发工具 tools.jar包,里面有工具类(Arrays:数组工具类,Collections:集合工具类...),还包括了jre
三者的关系:Jdk > Jre > Jvm (整个介绍:其实只需要安装jdk即可!)
10.编写HelloWorld入门案例,编码的步骤—>编译—>执行的过程:描述
//1)在jdk的bin里面下去创建HelloWorld.txt文件 (自己的jdk安装d盘里面的)
//2)编码
//定义一个类:固定写法 class开头 后面跟上类名,类名,见名知意(建议和文件名称一致),多个单词不能有空格
class HelloWorld{
//jvm能够识别的主程序的入口,主方法 ,也是固定写法
public static void main(String[] args){
//jvm进行解析的时候,需要展示数据--java中有固定的的输出语句的语句
System.out.println("helloworld") ;
}
}
//3)将.txt文件--更名为.java文件
//4)windows+r键---输入cmd--->进入dos窗口
// 盘符切换d:-->切换之后 cd jdk安装目录的bin目录
//5)使用javac 进行编译 javac java源文件
javac HelloWorld.java --->回车,如果代码没有问题,就正常出现类名.class文件,如果有问题,会报错,jvm里面打印日志,告诉我们哪一行成问题了
//6)运行这个类 java 字节码文件的前缀名称就是类名
java HelloWorld
二、Java环境变量的配置
1.Java环境变量的配置path(重点)
不可能写的所有java文件都放在jdk的bin目录,这里面都是执行性.exe文件,都是在dos窗口用的
不小心删除.java文件(自己的文件),可能误删一些.exe文件,这个 时候jdk就出问题了,
需要配置全局的环境变量path,让我们的java文件可以在任何目录下都能够使用javac编译和java运行指令!
主要的配置的是Path(重点)
path:配置好之后,肯定需要现在进入到指令java文件所在目录里面,然后才去使用javac和java
path有两种方式配置:都分别说一下,说下优劣!
classpath(了解一下即可,以前很早使用 临时环境变量,现在使用非常少)
可以系统环境变量配置,classpath 指定为xx.class文件(字节码文件)地址
classpath配置的地址是D盘根目录的 HelloWorld.class
2.Path环境变量的配置方式1
1)将jdk的bin目录的路径复制
win10/win11--->此电脑--->右键----属性----->高级系统上设置---->环境变量
---->系统变量,不要在用户变量找path,在系统变量找path (用户变量,一个计算机可以有多个用户)
path不要删除别的东西,别的东西都是系统配置,谨慎不要随意删除!
将1)里面jdk的bin目录的路径复制过来放在path里面,
D:\develop_software\Java\jdk1.8.0_162\bin
配置完成之后,打开dos窗口,在任何路径下都可以使用javac和java(c盘系统盘,有的文件夹没有权限)
输入javac
java
java -version 都是有提示信息,说明可以用了
2.Path环境变量的配置方式2(推荐第二种方式)
配置方式1的弊端:
1)就是当我们jdk版本升级了,需要手动更改系统变量的里面path,可能改动过程中不小心将别的环境变量误删了,为了避免这个问题我们不能改动path了,使用方式2配置! (主要原因)
2)二阶段学习tomcat服务器,服务器是使用Java编写的,它在启动的时候,必须要在系统变量里面JAVA_HOME,这也是为什么我们需要使用方式2的配置;如果系统变量没有JAVA_HOME,那么tomcat的web服务器就会启动失败(闪屏) (在二阶段讲到tomcat服务器去说)
配置方式步骤
1)赋值jdk安装目录的路径,不是bin目录 D:\develop_software\Java\jdk1.8.0_162
2)此电脑---->右键---->选择属性---->高级系统设置---->环境变量---->系统变量
系统变量----->新建一个变量名: JAVA_HOME
变量值:就是1)的路径
3)在path里面 引入JAVA_HOME对应的变量值的路径
path环境变量里面的最前面 %JAVA_HOME%\bin ,如果win10/win11 点击path,隔段形式,后面不用分号
如果是在一行上bin后面带上分号;
好处:以后jdk版本升级,需要改动path? 不需要,只需要改动JAVA_HOME变量值里面的路径
三、常量
常量的定义:常量在程序过程中,其值不发生改变的量!
字面值常量
1)字符串常量:使用英文的符号"" 双引号括起来的任何内容都是字符串
举例
"helloworld"
"我爱高圆圆"
"今天天气不好,心情是绿色的!"
2)字符常量:使用英文的'' 单引号阔括起来的单个字符内容
'a' :字符小a
'A' : 字符大A
'0' : 字符0
不能'ab'---jvm在解析的时候,认为这个字符串,不是单个内容,解析错误!
如果字符不参与运算,就是字符本身!
如果字符参与运算的时候,此时 字符(键盘上的每一个按键都是字符)
它就会去找ANSI码表里面的字符对应的值,进行运算;
'a' --- 97
'A' --- 65
'0' --- 48
3)整数常量
100,97
4)小数常量
3.14
12.34
5)布尔常量: true/false
6)空常量: 一般不能直接输出null
在引用数据类型(后面讲数组的说),默认值是null
自定义常量 :跟一个关键字 final(面向对象去讲!状态修饰符)
四、关键字
Java的关键字:
被Java语言赋予特定含义的单词,叫关键字!
在高级记事本notepad++以及editplus记事本以及开发工具idea(以后用的这个)/eclipse等等
针对关键字有一种颜色标记
package:包名(文件夹/目录结构) :以后在开发中代码分包,分层的 (真实的意义:在面向对象部分讲解)
class:定义类的格式,Java中最基本单元就是类 固定格式 class 类名{}
public:权限修饰符 (公共的/公开的,任何人都可以访问的),访问权限足够大
还有其他权限修饰符private,protected ,具体的讲解在面向对象部分去讲
static:静态修饰符 (面向对象部分讲解,本身的含义被"共享,共用")
变量里面的基本数据类型都是关键字
注意事项:
goto/const这两个字 作为"保留字"去使用!
五、标识符
标识符:(起名字,"见名知意")
对包名,类名,接口名,变量名,方法名,常量名起名字的一个字符序列!
组成规则:
1)有0-9到数字组成
2)字母字符(26个字母)
3)$符号
$)_下划线
对包名(目录结构package) 起名字规范 (面向对象部分讲解 包的含义)
单级包:(字母都是小写) com包名
xx.java
多级包:包名和包名使用.隔开
com.qf
com下面会有一个qf文件夹
xx.java文件
对类名和接口名起名字是同样的:(遵循阿里规范:大驼峰命名法)
定义类的时候:如果类名是单个单词,首字母大写,其余小写
举例
class Hello{}
class Demo{}
如果类名它是多个单词组成,每个单词首字母大写,其余小写
举例:
class HelloWorld{}
class MakeNameDemo{}
class StartGame{}
对变量名和方法名起名字是相同 规范: (遵循小驼峰命名法)
如果变量名是一个单词,那么 单词的字母全部小写
举例: 定义价格
int price = 5;
如果变量名是多个单词,那么第一个单词字母小写,
从第二个单词开始,每个单词首字母大写 ,其余小写!
举例:
定义苹果价格
int applePrice = 7;
对常量起名字(以后看到java的源码里面常量的格式:使用的多个单词写的)
如果常量名,单个单词 ,字母全部大写
举例 HELLO
如果是多个单词,字母全部大写,单词和单词之间用下划线隔开!
jdk提供的Thread类 :线程
定义线程优先级三个常量:只看格式 (最小优先级,默认优先级,最大优先级)
public final static int MIN_PRIORITY = 1;
public final static int NORM_PRIORITY = 5;
public final static int MAX_PRIORITY = 10;
六、变量
变量的定义:在程序过程中,其值发生改变的量
1.变量的三要素
1)数据类型
2)变量名
3)初始值
2.定义变量的方式
1)先定义,然后在赋初始化值
数据类型 变量名;
变量名 = 值; (在使用这个变量之前,必须赋值,否则编译报错!)
2)要么直接定义时候赋初始化值
数据类型 变量名 = 初始化值;
3.数据类型有哪些(识记)
分为两大类
基本数据类型:
四类八种
1)整数类型: 有四种,默认int (讲课过程,没有明确类型都是int)
byte:字节类型 占1个字节 范围:-128~127(必须记住)
short:短整型 占2个字节
int(默认) 占4个字节
long:长整型 占8个字节
在定义long 的时候,规定,在初始化值加上L或者l
2)浮点类型:默认double
单精度类型float ,在定义float类型后面规定, 占4个字节
需要标记,在初始化值的后面加上F或者f
双精度类型duoble: 占8个字节
3)字符类型:
char: 里面的内容'字符' 占2个字节
4)布尔类型:开发中,逻辑判断的true还是false的结果
boolean 一般boolean不参与运算,只是表示true或者false 占1个字节
基本类型里面整数类型开发中:
用最多的int,其次long
(long类型定义时间毫秒值,后期通过常用类的功能,将系统时间得到时间毫秒值)
基本类型里面的浮点类型:使用最多的double(市场价格/商场价格...)
引用数据类型:(后面 面向对象说 讲数组里面去说)
数组,类,接口
类(具体类/抽象类)
4.变量的隐式转换
byte、short、char三者之间不会互相转换,一旦参与运算,会优先提升为
int类型--->long--->float--->double
3.变量的显示转换(强制转换)
强制类型转换的引入
显示转换:强制类型转换:就是将大的数据类型转换成小的数据类型格式
目标数据类型 变量名 = (目标数据类型)(初始化值或者表达式)
不仅仅适用于基本数据类型,也适用于引用数据类型
开发中,如果没有明确要求,避免使用强制类型转换,导致数据精度损失
class DataTypeDemo{
public static viod main(String[] args){
int a=4;
byte b=3;
byte result=(byte)(a+b);
System.out.println("结果是:"+result);
}
}
4.变量的面试题
考的隐式/显式转换
byte类型的范围
有符号位的数据表示法(原码,反码,补码)
面试题:
定义三个变量
byte b1=3,b2=4,b;
b=b1+b2;//错误 b=b1+b2; b1先提升int b2提升int 结是int类型 但是接受类型是byte,接收不了
b=3+4;
上面代码那一处会编译失败?为什么?
考点:Java隐式转换和显式转换、变量和常量相加区别:
变量相加,需要考虑类型转换(Java中隐式类型转换)
byte,short,char一旦参与运算,优先提升
class Test{
public static void main(String[] args){
byte b1=3,b2=4,b;
b=(byte)(b1+b2);
//b=3+4;
System.out.println("b的值是:"+b);
}
}
面试题:
byte b=300;
编译时会报错吗?如何计算值呢?请描述结果过程
byte类型的取值范围 -128~127
从int转换到byte可能会有损失,jvm校验语法,发现300的值已经超过接受类型范围,整数默认int
最终结果int类型
解决方案:强制类型转换
byte b=(byte)300;
解析过程:
300已经超过了byte类型范围,使用int接收
4个字节,先计算300的数据原码
最高符号位 数值位
0 00000000 00000000 00000001 00101100
整数的源码,反码,补码都相同
将4个字节的int强转为1个字节的byte,使用补码截取
00101100=0+0+32+0+8+4+0+0=44
七、运算符
1.Java中的运算符
1.基本的算数运算符:+,-,*,/,%
注意事项:/ 默认取整
扩展的算数运算符:--或者++,应用场景--->统计场景(统计用户登录次数,猜数字游戏)
流程控制语句循环结构语句
使用方式:
1)不参与运算,单独使用
++或--在数据前面
++或--在数据后面
结论,无论在数据前还是后都是让数据自增1或者自减1.
2)参与运算
++或--在数据前面:对数据先进行自增1或者自减1,然后参与运算
++或--在数据后面:先参与运算,然后再自增1或者自减1
基本的赋值运算符: =
举例:
int a=10;将10这个数据赋值给int类型的变量a
将=右边的值赋给=左边的变量
这个“=”不能写成“==”,后者是比较,最终的结果为true或者false
扩展的赋值运算符: +=,-=,*=,/=,%=
举例:
int b =100;
b += 200;
将这个扩展的赋值运算符的左边的变量和右边的数值相加,再赋值给左边的变量
比较(关系)运算符: <,>,<=,>=,==,!=
注意事项:
这些符号无论连接的表达式是简单的还是复杂的,最终结果都是true或者false;
==是比较的,不能写成“=”
逻辑运算符: 开发中常用于逻辑判断!
基本的逻辑运算符:
逻辑单与&:并列关系
有false,则false;多个并列条件必须同时满足才能成立,否则不成立
逻辑单或|:或的关系
有true,则true,多个条件只要有一个成立则满足
逻辑异或^:
逻辑非!:
扩展逻辑运算符:
逻辑双与&&和逻辑双或||
基本位运算符(数据在进行移位):
位与&: 有0则0
位或|: 有1则1
位异或^:相同则为0,不同则为1
特点:
反码~:全部数据按位取反
移位符号: <<左移:将数据补码进行左移,多余的位数丢弃掉,推出原码
结论:使用<<左边的数据乘以2的移动次幂
>>右移:将数据补码进行右移,多余的位丢掉,推出原码
结论:将>>左边的数据除以2的移动次幂
>>>无符号右移:
将数据的补码进行右移,将多余的丢弃掉,无论最高符
号位是1还是0,都补0。
三元运算符:
格式:(表达式)?执行true的结果:执行false的结果;
执行流程:
表达式可以简单可以复杂,如果结果是true成立,则执行成立的结果
否则不成立,则执行false的结果
关于+符号的用法
“字符串内容”+任何东西=“新的字符串”,反之一样
1)此时+就是字符串的拼接符号
“张三”+10=“张三10”
2)+,运算符里的算术运算符的加法运算
2.运算符的面试题
赋值运算符面试题:
short s =1;
1)s=s+1;
2)s+=1;
这两段代码,哪个对,那个错?
答:1错,因为存在Java隐式类型转换,所以s=s+1的时候,s先提升int和1相加,
结果是int类型,而s类型short无法接收int类型
2对,因为扩展赋值运算符,有一个特点,隐藏了强转类型转换
s+=1此时等价于s=(short)(s+1);
扩展逻辑运算符面试题:
逻辑双与和逻辑单与有什么区别?
共同点:无论是单双都是表达并列关系
而且都是有false则false!
不同点:逻辑单与,对多个并列条件再执行的时候,效率比较低,
因为都需要将符号左右两边表达式执行一遍
逻辑双与,如果左边为false,则右边不执行(具有短路效果)
开发中都用扩展的逻辑运算符,执行效率高
3.键盘录入数据—>jdk提供文本扫描器
为了进行数据逻辑判断操作的时候,让我们书写程序的时候更加
灵活----通过键盘录入工具 jdk提供类供我们使用----文本扫描器
Scanner类提供了很多功能方法---->快速键盘录入一些int类型
使用步骤:
1)导包:位置是在class的上面
import java.uti.Scanner;
2) 创建文本扫描器-----java中的关键字 new 创建对象
Scanner 变量名 = new Scanner(System.in);固定格式
3)友情提示:“请输入一个数据”
4)通过文本扫描器录入(整数默认int)
使用第二步的 int 结果变量名= 变量名.nextInt();固定写法
调用文本扫描器的功能,录入int类型
5)使用结果变量名来进行操作
使用步骤
使用步骤:
1)导包 :位置是在class的上面
import java.util.Scanner ; //用谁导谁
2)创建文本扫描器 ----java中的关键字 new 创建对象(具体在面向对象中讲)
Scanenr 变量名(称为"键盘录入对象名") = new Scanner(System.in) ; 固定格式 变量名 ,自己起名字
3)友情提示 "请输入一个数据:"
4)通过文本扫描器录入数据 (整数默认int)
使用2)的
int 结果变量名= 变量名.nextInt() ; //.nextInt() :调用文本扫描器的提供功能,录入int类型
5)使用这个结果变量名来进行操作
*/
//1)导包
import java.util.Scanner ;
class ScannerDemo{
public static void main(String[] args){
//2)创建文本扫描器(创建Scanner类对象) 固定写法,变量名自己起
Scanner sc = new Scanner(System.in) ;
//3)友情提示
System.out.println("请您输入一个数据(int):") ;
//4)录入int类型数据
int result = sc.nextInt() ; //.nextInt() :调用文本扫描器的提供功能 (固定写法)
//5)输出或者使用
//使用这个结果变量完成其他逻辑操作
System.out.println("录入的数据是:"+result);
}
}
4.流程控制语句
顺序结构语句
选择结构语句
if语句
switch语句
循环结构语句
for循环
while循环
do while循环
1)顺序结构语句
/*
流程控制语句
顺序结构语句 :比较简单,所有程序都是通过jvm调用main进行的(入口)
代码右上而下依次加载,除非在加载后面代码之前,jvm退出了!
选择结构语句
if
switch
循环结构语句
for
while
dowhile
*/
class OrderDemo{
public static void main(String[] args){
//代码由上而下依次加载
System.out.println("程序开始了...") ;
System.out.println("helloworld") ;
System.out.println("程序结束了....") ;
//jdk提供了System类有一个功能,exit(0),参数为0,正常终止jvm
System.exit(0) ;//固定格式先记住:可以终止jvm
System.out.println("over") ;
}
}
2)选择语句之if语句
/*
选择结构语句之if
格式1:
if(表达式){
语句;
}
场景:针对单个情况进行判断
格式2:
if(表达式){
语句1;
}else{
语句2;
}
场景:针对两种情况进行判断
格式3:
if(表达式1){
语句1;
}else if(表达式2){
语句2;
...
...
...
}else{
语句n;
}
场景:针对多情况进行判断
上面格式1的流程:
//格式1:{}里面单条语句,可以省略,但是前期不建议
if(表达式){
语句;
}
表达式是否成立,成立,则执行语句;
否则,不执行
*/
//导包
import java.util.Scanner ;
class IfDemo{
public static void main(String[] args){
//创建键盘录入对象
Scanner sc = new Scanner(System.in) ;
//提示
System.out.println("请输入一个数据x的值:") ;
int x = sc.nextInt() ;
//格式1
if(x>=10){
System.out.println("x的值是:"+x);
}
System.out.println("over") ;
}
}
登录/注册场景
/*
if格式2:
if(表达式){
语句1;
}else{
语句2;
}
场景:针对两种情况进行判断 (开发中使用最多的格式)
完成"登录"/"注册"
执行流程:
表达式成立,则执行语句1;
否则,执行语句2;
注意事项:
无论if格式哪一种,不能再if后面来一个;
记住:有{大括号的地方,不能有分号,有分号地方不能有左{
使用格式2:完成简单模拟"登录"
String:Java中的类,代表字符串 (后面常用类里面说)
字符串进行比较: String类的 字符串值1.equals(字符串值2) ,是比较字符串内容是否相同
*/
class IfDemo2{
public static void main(String[] args){
//定义变量
int x = 10 ;
//if(x>=10); //没有意义
//{} 称为"代码块"
//{
//System.out.println("x大于等于10") ;
//}
if(x>=10){
System.out.println("x大于等于10") ;
}else{
System.out.println("x小于10") ;
}
}
}
3)多种情况进行判断
/*
if语句格式3
格式3:
if(表达式1){
语句1;
}else if(表达式2){
语句2;
...
...
...
}else{
语句n;
}
场景:针对多情况进行判断
执行流程:
首先,判断表达式1是否成立,成立,则执行语句1;
否则,不成立,继续判断表达式2是否成立,成立,执行语句2;
否则,不错成立...依次判断
....
....
如果上面都没有匹配的结果, 执行else中的语句n;
没有提示数据类型,都是int
需求
键盘录入学生成绩(满分100分),判断该学生成绩的等级的划分
90-100 "优秀"
80-90 "较优"
70-80 "良好"
60-70 "及格"
60以下 "不及格"
*/
//导包
import java.util.Scanner;
class IfDemo3{
public static void main(String[] args){
//创建键盘录入对象
Scanner sc = new Scanner(System.in) ;
//提示并录入数据
System.out.println("请您输入的学生的成绩: ") ;
int socre = sc.nextInt() ;
/*
if(表达式1){
语句1;
}else if(表达式2){
语句2;
...
...
...
}else{
语句n;
}
*/
/*
if(socre>=90 && socre<=100){
System.out.println("优秀") ;
}else if(socre>=80 && socre<90){
System.out.println("较优") ;
}else if(socre>=70 && socre<80){
System.out.println("良好") ;
}else if(socre>=60 && socre<70){
System.out.println("及格") ;
}else{
System.out.println("不及格") ;
}
*/
//测试程序:
//测试正确数据:正常范围内的数据
//测试边界数据:边界数据的是否在我们指定范围内
//测试错误数据:超了范围,不满足,应该也要包含进去
if(socre<0 || socre>100){
System.out.println("您输入的数据有误!") ;
}else if(socre>=90 && socre<=100){
System.out.println("优秀") ;
}else if(socre>=80 && socre<90){
System.out.println("较优") ;
}else if(socre>=70 && socre<80){
System.out.println("良好") ;
}else if(socre>=60 && socre<70){
System.out.println("及格") ;
}else{
System.out.println("不及格") ;
}
}
}