学习java之路之第二周

目录

常用的dos窗口命令

盘符号的切换

盘符号不区分大小写: 回车即可
C:\Users\Administrator>D:
D:>

进入指定单个文件夹(目录) cd 目录名称

E:\>cd java
E:\java>

在这里插入图片描述

进入多级目录 cd 多级目录的路径

cd 将多级路径的名称复制过来(win10系统/win11系统 在dos窗口直接鼠标右键就粘贴了 )
E:\java\bbb

在这里插入图片描述

回退上一级目录 cd… 或者cd …

E:\java\bbb>cd..
E:\java>cd

在这里插入图片描述

如果现在处在多级目录路径上,想回退盘符根目录 cd \或者cd\

E:\java\bbb>cd\
E:\>

在这里插入图片描述

查看(罗列)这个盘符或者目录某个目录的详细信息 dir指令

E:\java>dir
 驱动器 E 中的卷是 新加卷
 卷的序列号是 1463-7C78

 E:\java 的目录

2022/10/28  18:06    <DIR>          .
2022/10/28  18:06    <DIR>          ..
2022/10/17  17:01    <DIR>          10-17
2022/10/24  18:30    <DIR>          10-18
2022/10/24  18:30    <DIR>          10-19
2022/10/24  18:30    <DIR>          10-20
2022/10/24  18:31    <DIR>          10-21
2022/10/24  18:38    <DIR>          10-24
2022/10/25  10:46    <DIR>          10-25
2022/10/26  15:28    <DIR>          10-26
2022/10/27  18:24    <DIR>          10-27
2022/10/28  19:06    <DIR>          10-28
2022/10/21  12:09       187,944,935 10_21_avi.zip
2022/10/28  17:43    <DIR>          bbb
2022/10/24  11:36                24 bbb.txt
2022/09/25  00:43    <DIR>          Windows 10 22H2
2022/10/25  15:15    <DIR>          新建文件夹
2022/10/17  14:34    <DIR>          网视频
               2 个文件    187,944,959 字节
              16 个目录 508,899,762,176 可用字节

在这里插入图片描述

清除屏幕指令 cls(clear scrren)

当你dos窗口上面有很多信息,将上面的信息不用了,删了,使用这个

E:\>cls

在指定的目录里面创建文件夹(目录)

md (make directory)文件夹名称(目录名称)

在这里插入图片描述

在指定的目录里创建文件

copy con 文件名称带上后缀名 ----按回车键—进入编辑模式,书写文件内容,书写完成成之后,按—ctrl+z,编辑完成----回车即可!

E:\java\bbb\aaa>copy con 111.txt
这里是内容
^Z
已复制         1 个文件。
E:\java\bbb\aaa>

在这里插入图片描述

删除指定的文件夹(目录)

1)方法一:

注意事项:rd 文件夹名称(目录名称) 只能删除空目录
先通过 del 指令将文件删除了,然后再去使用rd 文件夹名称(目录名称) 删除这个文件夹
删除文件 del 指定文件名称 也可以批量删除所有同名的后缀的文件
举例:del *.txt 删除所有带有.txt的文件
在这里插入图片描述
在这里插入图片描述

2)方法二:

rd的扩展指令在windows系统上,想删除带内容的目录(里面有文件或者子文件夹)

<1>   rd /s 文件夹名称(目录) :询问删除删除带内容的目录? y/n 选择y就是删除,n不删除
E:\java\bbb>rd /s aaa
aaa, 是否确认(Y/N)?
<2>   rd /s /q 文件名称(目录) :不询问删除带内容的目录 (属于暴力删除 这个指令慎用!)

在这里插入图片描述

在这里插入图片描述

系统指令

查看IP地址—— ip config
ping指令

Java

Java发展历史

Java之父 詹姆斯高斯林 1995年正式推出
Java图标 热气腾腾咖啡图标
sun公司都被oracle公司收购了,安装jdk—下载? 官网 www.oracle.com
Java的jdk(软件工具包)—>每半年更新一个版本
在这里插入图片描述

Java平台版本

JavaSE:(Standard Edition): 针对桌面应用程序的解决方案
JavaME:( Micro Edition) :针对嵌入式设备提供的一套解决方案
移动端:Anroid基于JavaSE,还需要anroid相关的广播,订阅,服务,
Ios系统基于C语言
JavaEE:( Enterprise Edition) :针对企业级开发解决方案
学习JavaEE核心技术13种:
Servlet
Jsp
Spring
Springmvc
Mybatis
Springboot

关于Java语言特点

Java语言特点:简单性,健壮性,分布式, (良好的移植性,开源)

jdk,Jre,jvm的介绍

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即可!)
在这里插入图片描述

使用记事本编写Java程序

编写Java程序前的准备

jdk的安装目录有bin目录---->
javac.exe — 编译的执行性文件
java.exe — 运行的执行文件
都需在dos窗口里面用到

编写Java代码

将java代码编写在这个jdk安装目录的bin里面,因为这里面有javac和java这两个指令!
在jdk的bin里面新建.txt文件—>一定要显示后缀名(电脑上win10 查看—隐藏的后缀名勾上)
HelloWorld.txt

//Java的最基本单元是类:
class 类名{ 类名:建议是和文件名称一致!
//main方法,程序的入口,能够被安装jdk-->jre--->jvm jvm能够识别这个main方法,解析Java程序
//固定写法
public static void main(String[] args){
//输出在控制台上一句话:"helloworld"
//固定格式:输出语句
System.out.println("helloworld") ; //"",在控制台上就可以将双引号的内容输出展示!
}
}
//举例
class HelloWorld{
	public static void main(String[] args){
	System.out.println("helloworld") ;
	}
}

将.txt后缀名改为.java文件

进入jdk安装路径的bin目录里面

windows+r键—>输入cmd—>dos窗口进入
在这里插入图片描述

在里面输入编译指令 javac 跟上java源文件名称xxx.java

如果代码没有问题,正常就会产生一个类名.class文件 ---- 字节码文件 .class的前缀的名称是类名

运行类名.class (字节码文件) java 字节码文件的前缀就是类名

jvm运行的.class文件
java 类名—回车即可

注意事项:
1)系统上一定将隐藏文件扩展名显示,否则成了.java.txt 其实还是.txt文件
2)写class 类名{} 前面class 写成了Class 错误的,Java严格区分大小写,定义类class定义
3)写public static void main(String[] args){}固定写法 时候,将p大写,void写成了viod都不行!
4)System.out.println(“helloworld”) ; 将第一个S小写了,不行,第一个S是大写(固定写法)
5)如果输出语句是中文,那么注意:计算机上的文件保存的格式 "utf-8"编码(一个中文对应三个字节)
而dos黑窗口里面的默认编码是GBK,所以需要将本地上文件—写设置为ASCII码表(支持gbk格式)
要将本地上文件—写设置为ASCII码表(支持gbk格式)!
打开java文件,以记事本方式打开,选择另存为—>编码格式 ASCII

Java环境变量的配置

不可能写的所有java文件都放在jdk的bin目录,这里面都是执行性.exe文件,都是在dos窗口用的
不小心删除.java文件(自己的文件),可能误删一些.exe文件,这个 时候jdk就出问题了,需要配置全局的环境变量path,让我们的java文件可以在任何目录下都能够使用javac编译和java运行指令!

Path环境变量的配置

  • 方式1
    将jdk的bin目录的路径复制
    win10/win11—>此电脑—>右键----属性----->高级系统上设置---->环境变量
    ---->系统变量,不要在用户变量找path,在系统变量找path (用户变量,一个计算机可以有多个用户)
    path不要删除别的东西,别的东西都是系统配置,谨慎不要随意删除!
    将上面jdk的bin目录的路径复制过来放在path里面,
    D:\develop_software\java\jdk8\bin
    配置完成之后,打开dos窗口,在任何路径下都可以使用javac和java(c盘系统盘,有的文件夹没有权限)
    输入javac \ java \ java -version 都是有提示信息,说明可以用了
    在这里插入图片描述

  • 方式2(推荐)
    1.赋值jdk安装目录的路径,不是bin目录 D:\develop_software\java\jdk8
    2.此电脑---->右键---->选择属性---->高级系统设置---->环境变量---->系统变量
    系统变量----->新建一个变量名: JAVA_HOME
    变量值:就是1)的路径
    3.在path里面 引入JAVA_HOME对应的变量值的路径
    path环境变量里面的最前面 %JAVA_HOME%\bin ,如果win10/win11 点击path,隔段形式,后面不用分号,如果是在一行上bin后面带上分号;
    在这里插入图片描述
    在这里插入图片描述

方式一的弊端和方式二的好处

  • 方式一的弊端
    1)就是当我们jdk版本升级了,需要手动更改系统变量的里面path,可能改动过程中不小心将别的环境变量误删了,为了避免这个问题我们不能改动path了,使用方式2配置! (主要原因)
    2)二阶段学习tomcat服务器,服务器是使用Java编写的,它在启动的时候,必须要在系统变量里面JAVA_HOME,这也是为什么我们需要使用方式2的配置;如果系统变量没有JAVA_HOME,那么tomcat的web服务器就会启动失败(闪屏)
  • 方式二的好处
    以后jdk版本升级,需要改动path? 不需要,只需要改动JAVA_HOME变量值里面的路径

Path环境变量的执行流程

无论使用第一种方式是还是第二种方式,在配置之前,如果你已经打开了dos窗口,那么配置完成之后,要生效的话,必须将当前dos窗口关闭,重新进入dos窗口 (windows+r—>输入cmd,在进去)

1)首先肯定需要在指定目录中找对应的.java文件,
举例:如果.java文件是在D盘根目录下,肯定需要现在这个D盘里面 javac xx.java——进行编译和运行,如果当前指定目录有这个java文件,直接编译和运行!
2)如果在当前这个指定目录找不到,它就会去系统变量path环境变量里面找 :
jdk安装目录的bin里面去找,如果这里面也没有,最终,提示----“找不到文件!”

临时环境变量(了解,不作为重点)

classpath(找字节码文件)

早期使用的,目的就是为了单纯执行指定的字节码文件!
java 字节码文件的前缀 类名---->jvm在运行这个类,解析这个类—从程序入口main方法进入(固定格式public static voidmain(String[] args)…)

配置方式:
此电脑—>右键属性—>高级系统设置—>环境变量---->系统变量
新建一个变量名:classpath
变量值:就是指定字节码文件的路径 d:/

执行流程:
现在系统变量的classpath去找,指定路径下是否有字节码文件,如果有,就直接通过java 字节码文件前缀直接运行;
如果没有,找不到任何字节码文件,它直接提示"错误: 找不到或无法加载主类 HelloWorld"

我们自己用,不要配置这个玩意,一配置,可能就出现这个错误了!

注释

注释:在计算机编程语言为了提高代码阅读性,给某些代码进行标记文字提示,让程序阅读性更高一些。
作为中国人,肯定加入中文字符,但是一般习惯写注释,因为代码给人看的(人:程序员),接手别人的项目,它代码没有注释,很难受!
注释:一行代码—标记了很多行注释,阅读性比较差!(简单标记)

Java中的注释的分类:
单行注释://书写内容
多行注释:/* 书写内容 /
前面两个普通注释:主要就是来标记代码,提高代码阅读性
文档注释: /
* 书写内容 */ :特殊注释,可以被解析的

关键字

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  nal static int MIN_PRIORITY = 1;
 public  nal static int NORM_PRIORITY = 5;
 public  nal static int MAX_PRIORITY = 10;

注意事项:
1)起名字,可以数字,但是不能以数字开头
2)Java严格区分大小写,一定要起名字见名知意
3)标识符不能是Java中的关键字

常量

概念:常量在程序过程中,其值不发生改变的量!
进制也属于常量的范畴

  • 字面值常量

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中,如何定义变量?

变量的三要素:
1)数据类型
2)变量名
3)初始化值

定义变量的方式

  1. 先定义,然后在赋初始化值
    数据类型 变量名;
    变量名 = 值; (在使用这个变量之前,必须赋值,否则编译报错!)
  2. 要么直接定义时候赋初始化值
    数据类型 变量名 = 初始化值;

变量的数据类型有哪分类?

分为两大类

  1. 基本数据类型:

四类八种

Ⅰ整数类型: 有四种,默认int (讲课过程,没有明确类型都是int)
byte:字节类型 占1个字节 范围:-128~127(必须记住)
short:短整型 占2个字节
int(默认) 占4个字节
long:长整型 占8个字节在定义long 的时候,规定,在初始化值加上L或者l
Ⅱ浮点类型:默认double
单精度类型􀅩oat ,在定义􀅩oat类型后面规定, 占4个字节
需要标记,在初始化值的后面加上F或者f
双精度类型duoble: 占8个字节
Ⅲ字符类型:
char: 里面的内容’字符’ 占2个字节
Ⅳ布尔类型:开发中,逻辑判断的true还是false的结果
boolean 一般boolean不参与运算,只是表示true或者false 占1个字节

基本类型里面整数类型开发中:用最多的int,其次long
(long类型定义时间毫秒值,后期通过常用类的功能,将系统时间得到时间毫秒值)
基本类型里面的浮点类型:使用最多的double(市场价格/商场价格…)

  • 引用数据类型(后面 面向对象说 讲数组里面去说)
    数组,类,接口
    类(具体类/抽象类)

变量中的隐式转换/显示转换(强制类型转换)

  • 隐式转换
    byte,short,char三者之间不会相互转换,一旦参与运算,将优先转换为:
    int——long——float——double(默认类型提升)
  • 显示转换(强转类型转换)
    就是将大的数据类型—转换成小的数据格式
    目标数据类型 变量名 = (目标数据类型)初始化值;
class DataTypeDemo{
public static void main(String[] args){
//定义两个变量
int a = 4 ;
byte b = 3 ;
//现在使用的接收类型是byte类型
//byte result = a + b ;//不兼容的类型: 从int转换到byte可能会有损失
//(byte,short,char三者之间不转换,一旦参与运算,优先提升int)
// =右边:int类型+byte类型的b,先要将byte类型提升int,结果int类型,
//=左边:byte类型, 无法存储int类型的结果
//目标数据类型 变量名 = (目标数据类型)(初始值在或者表达式);
byte result = (byte)(a+b) ;
System.out.println("结果是:"+result) ;
}
}

变量中面试题(考的隐式转换/显示转换)

面试题一:

经典面试题
定义三个变量
byte b1 =3,b2 =4 ,b;
1)b = b1 + b2; //错误
b = b1 + b2; b1先提升int b2提升int 结果就是int类型的7,
但是b变量类型byte接收不了int类型结果,解决方案:使用强转类型转换
2)b = 3 + 4 ;正确 7—>在byte范围内
上面代码哪一处会编译失败?为什么,怎么改进?

考点:
1)变量和常量相加区别:
变量相加,需要考虑类型转换,(Java中隐式类型转换)
byte,short,char三者不转换,一旦参与运算,优先提升int,—>long—>

class DataTypeTest{
public static void main(String[] args){
//定义三个变量
byte b1 =3,b2 =4,b;
//b = b1 + b2;// 从int转换到byte可能会有损失
/*
b = b1 + b2; b1先提升int b2提升int 结果就是int类型的7,
但是b变量类型byte接收不了int类型结果,解决方案:使用强转类型转换
*/
//强转
//目标类型 变量名 = (目标类型)(初始化值或者表达式);
//b = (byte)(b1+b2) ;
//System.out.println("b的值是:"+b) ;
b = 3+4 ;//先相加,然后看计算的结果是否在接收类型范围内,
//在直接用,否则,需要处理!
System.out.println(b) ;
}
}
面试题二

byte b = 300 ; 编译会报错吗?为什么,如何解决?请描述解析过程
byte类型的取值范围 -128~127

class DataTypeTest2{
public static void main(String[] args){
//定义变量
//byte b = 300 ;// 从int转换到byte可能会有损失
//jvm校验语法,发现300的值已经超过接收类型 范围,整数默认int
//最终结果int类型
//解决方案:强转类型转换
byte b = (byte)300;
System.out.println("b:"+b) ;//b:44
}
}

解析过程:
300—已经超过了byte类型范围,使用int接收
4个字节,先计算300的数据原码
最高符号位 数值位
0 0000000 00000000 00000001 00101100
整数的原码,反码,补码都相同
(0 0000000 00000000 00000001) 00101100 ----> byte b = (byte)300;
//将4个字节的int强转为一个字节byte,使用补码 截取
补码—>最高位是0,正数,—反码,原码都相同
00101100
= 0+0+32+0+8+4+0+0
= 44
byte b = 129 ;

扩展的算术运算符的特点

 +:可以是运算符也可以是字符串拼接符号(看程序,写结果)

++或者–
1)场景—>统计场景(统计用户的登录次数,猜数字游戏,统计用户多少次猜中了)
2)流程控制语句循环结构语句中—++或者–

使用方式
1)不参与运算,单独使用
a)在数据的前面
b)在数据的后面
结论:
无论++或者–在数据的前面还是后面,都是对当前数据进行自增1或者自减1
2)参与运算
a)在数据的前面
结论:
++或者–在数据的前面,先进行增1或者自减1,然后参与运算!
b)在数据的后面
++或者–在数据的后面,先运算,然后进行自增1或者自减1 !

class OperatorDemo2{
public static void main(String[] args){
//定义两个变量
int a = 4 ;
int b = 3 ;
System.out.println("原数据是:") ;
System.out.println("a:"+a+",b:"+b) ;
System.out.println("--------------++或者--在数据的前面或者后面------------------") ;
//++a ;
//--b ;
a++;
b-- ;
System.out.println("a:"+a+",b:"+b) ;
System.out.println("------------------------------------------------" ) ;
//定义两个变量
int x = 3 ;
int y = 6 ;
System.out.println("x:"+x) ;
System.out.println("y:"+y) ;
//++或者--,参与运算,在数据的前面
//int m = ++x ;
//int n = --y ;
//++或者--,参与运算,在数据的后面
int m = x ++ ;
int n = y -- ;
System.out.println("x:"+x) ;
System.out.println("y:"+y) ;
System.out.println("m:"+m) ;
System.out.println("n:"+n) ;
}
}

赋值运算符的面试题

面试题:
short s = 1 ;
1)s = s + 1 ;
2)s +=1;
这个1),2)两段代码,哪一个会编译失败,哪一个成功,为什么?
1)这个代码会编译报错,因为存在Java隐式类型转换
byte,shor char 三者不转换,一旦参与运算,优先提升为int,所以
s = s + 1 ;s先提升int和1相加,结果是int类型,而s类型short,无法接收int类型结果
2)s +=1 ; 会成功,
因为扩展赋值运算符+=,-=,*=,/=,%=,有一个特点:隐藏了强转类型转换
s +=1 此时等价于s = (short)(s+1) ;

逻辑运算符

(扩展逻辑运算符的面试题)

面试题:
逻辑双与&&和逻辑单与&有什么区别?
共同点:
无论是逻辑单与&还是逻辑双与&&都是表达并列关系,而且都是有false则false!
不同点:
逻辑单与&,对多个并列条件在执行的时候,效率比较低,因为都需要将这个符号左边的表达式和右边的表达式都需要执行一遍!
逻辑双与&& ,
连接的表达式如果左边为false,则右边不执行(具有短路效果)
开发中扩展的逻辑运算符,代替基本的运算符,执行效率高!

扩展的逻辑运算符

/*
扩展的逻辑运算符
逻辑双与&& 和逻辑双或||
逻辑双与&&:
连接的表达式如果左边为false,则右边不执行(具有短路效果)
逻辑双或||:
连接的表达式如果左边为true,则右边不执行(具有短路效果)
*/

class OperatorDemo2{
public static void main(String[] args){
//定义三个变量
int a = 3 ;
int b = 4 ;
int c = 5 ;
//逻辑双与&& 满足基本特点:有false,则false
System.out.println((a>b) && (a>c)) ;//false && false = false ;
System.out.println((a>b) && (a<c)) ;//false && true = false ;
System.out.println((a<b) && (a>c)) ;//true && false = false ;
System.out.println((a<b) && (a<c)) ;//true && true = true ;
System.out.println("-----------------------------------------------------") ;
//定义两个变量
int x = 3 ;
int y = 4 ;
System.out.println("x:"+x) ;
System.out.println("y:"+y) ;
System.out.println("-----------------------------------------------------") ;
//逻辑单与&
//System.out.println(((++x)==3) & ((--y)==4)) ;//false
//System.out.println("x:"+x) ;//4
//System.out.println("y:"+y) ;//3
//逻辑双与&&
System.out.println(((++x)==3) && ((--y)==4)) ;//false
System.out.println("x:"+x) ;
System.out.println("y:"+y) ;
}
}

三元运算符

/*
三元运算符(三目运算符)
格式:
(表达式)?执行true的结果:执行false的结果;
执行流程:
表达式可以简单可以复杂,如果结果是true成立,则执行成立的结果
否则不成立,则执行false的结果
需求:
定义变量,求两个变量最大值(没有提示,都是int类型)
三个数据比较最大值?
*/

class OperatorDemo{
public static void main(String[] args){
//定义两个
int a = 10 ;
int b = 5 ;
//套用格式
//(表达式)?执行true的结果:执行false的结果;
//定义变量max
int max = (a>b)?a:b ;
System.out.println("两个数据中的最大值是:"+max) ;
System.out.println("---------------------------------------") ;
//定义三个变量
int x = 20 ;
int y = 50 ;
int z = 30 ;
//方式1:使用中间变量的方式 (推荐)
//使用中间变量的方式记录一下x和y的最大值
int temp = (x>y)? x:y;
//使用中间变量的结果和z进行比较
int max2 = (temp > z)? temp : z ;
System.out.println("三个数据中的最大值是:"+max2) ;
System.out.println("---------------------------------------") ;
//方式2:不建议(使用括号标记,格式好看,否则没有括号,不好看)三元运算符的嵌套
int max3 = (x>y)?((x>z)?x:z):((y>z)?y:z) ;
//int max3 = x>y?x>z?x:z:y>z?y:z ; //不带括号,阅读性很差
System.out.println("三个数据中的最大值是:"+max3) ;
}
}

位运算符(了解)

位运算符号:-----哈希里面涉及到位运算符号
基本的位运算符号:
位与&
位或|
位异或^
反码~
移位符号:
<< 左移 结论
>> 右移 结论
>>> 无符号右移
位异或运算符

一个数据被另一个数据位异或两次,其值是它本身
/*
编程题:将两个变量的数据进行交换(运算符的时候讲一下,先写)
int a = 10 ;
int b = 20 ;
最终a是20,b是10
*/

class OperatorTest{
public static void main(String[] args){
//方式1:中间变量
int a = 10 ;
int b = 20 ;
System.out.println("a:"+a) ;
System.out.println("b:"+b) ;
System.out.println("-------------------------------------");
//定义中间变量 (开发中,使用中间变量的方式)
/*
int temp = a ;
a = b ;
b = temp ;
*/
//方式2:位异或的特点:一个数据被另一个数据位异或两次,其值是它本身
//左边:a,b,a
//右边:a^b
a = a ^ b ; //在a变量进行 赋值为 a^b
b = a ^ b ; // a ^ b ^b ;
a = a ^ b ; //a ^ b ^a ;
System.out.println("a:"+a) ;
System.out.println("b:"+b) ;
}
}

键盘录入数据

jdk提供文本扫描器java.util.Scanner
让我们书写程序的时候,更加灵活----通过键盘录入数据
Scanner类就提供了很多功能(方法)--->快速键盘录入一些int类型,来进行运算或者写具体	的逻辑!

为了进行数据逻辑判断操作的时候,程序更灵活一些Jdk提供了类供我们使用----->文本扫描器 java.util.Scanner类
在Java中,只要我们用的其他类,只要不是java.lang.xxx类都需要导包
java.lang.String
java.lang.Integer
java.lang.Math

使用步骤:

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);
}
}
键盘录入两个数据,比较是否相等
键盘录入三个数据,比较三个数据最大值
import java.util.Scanner;

class ScannerTest{
	public static void main(String[] args){
		//创建键盘录入对象
		Scanner sc = new Scanner(System.in) ;
		
		//提示
		System.out.println("请输入一个数据:");
		
		//录入,接收
		int num1 = sc.nextInt() ;
		
		System.out.println("请输入第二个数据:") ;
		//录入,接收
		int num2 = sc.nextInt() ;
		
		System.out.println("请输入第三个数据:");
		//录入,接收
		int num3 = sc.nextInt() ;
		

		//录入俩个数据用这俩条
		//booleam flag=(num1==num2) ;
		//System.out.println("flag:"+flag) ; 
		
		int temp = (num1 > num2) ?num1 : num2 ;
		int max = (temp > num3) ? temp:num3 ;
		System.out.println("最大值为"+max);
	}
}

jdk提供的java.util.Scanner类

int nextInt() :录入int类型
String nextLine():录入String   录入 这整行的值(官方用法)


	

String next():也可以录入String(我们自己去写的,录入某个字符串值)


细节: 
		现在录入两个int类型  没有问题
		
		现在录入两个String类型(特殊引用类型)  没有问题
		String nextLine():录入String     
		
		
		先录入String类型,在录入int类型  没有问题
		
		先录入int类型,在录入String类型  有问题  ,使用nextLine()去录入String类型,
		必须敲回车符号,(回车---相当于是一个换空行,被nextLine()字节调用了)
		
		
		某个需求:第一个数据录入int,第二个数据录入String,必须要使用nextLine()
		方式1)使用nextLine()在录入String数据之前,重新创建一个新的键盘录入数据对象Scanner
		方式2:使用next()来录入 (非正式用法)
import java.util.Scanner ;
class Demo{
	
	
	public static void main(String[] args){
		//创建键盘录入对象
		Scanner sc = new Scanner(System.in) ;
		
		//现在录入两个int类型
		//int a = sc.nextInt() ;
		//int b = sc.nextInt() ;
		
		//现在录入的是两个int类型
		//String a = sc.nextLine() ;
		//String b = sc.nextLine() ;
		
		//先录入String类型,在录入int类型
		//String a = sc.nextLine() ;
		//int b  = sc.nextInt() ;
		
		//先录入int类型,在录入String类型
		int a = sc.nextInt() ;
		
		//方式1:使用nextLine()在录入String数据之前,重新创建一个新的键盘录入数据对象Scanner
		//Scanner sc2  = new Scanner(System.in) ;
		
		//String b = sc2.nextLine() ; 
		
		//方式2:使用next()来录入 (非正式用法) 录入指定的某个完整的字符串值
		String b = sc.next() ;
		
		System.out.println("a:"+a) ;
		System.out.println("b:"+b) ;
		
	}
}

流程控制语句

顺序结构语句:
比较简单,所有程序都是通过jvm调用main进行的(入口)
代码右上而下依次加载,除非在加载后面代码之前,jvm退出了!

选择结构语句
if语句(三种格式if/if...else/if ...else if...else)
switch语句(考点)

循环结构语句
for循环:开发中常用的
while循环:
do-while循环: java源码里面使用多一些 (工程上使用的比较少)
顺序结构语句:

比较简单,所有程序都是通过jvm调用main进行的(入口)
代码右上而下依次加载,除非在加载后面代码之前,jvm退出了!

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") ;
}
}
选择结构语句
If语句格式一
格式1:
			if(表达式){
				语句;
			}

场景:针对单个情况进行判断

执行流程:
格式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语句格式二
>if格式2:
if(表达式){
语句1;
}else{
语句2;
}

场景:针对两种情况进行判断 (开发中使用最多的格式):完成"登录"/“注册”

执行流程:
表达式成立,则执行语句1;
否则,执行语句2;

注意事项:
无论if格式哪一种,不能再if后面来一个;
记住:有{大括号的地方,不能有分号,有分号地方不能有左{

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") ;
}
}
}

使用格式2:完成简单模拟"登录"

提示:
String:Java中的类,代表字符串 (后面常用类里面说)
字符串进行比较: String类的 字符串值1.equals(字符串值2) ,
是比较字符串内容是否相同

已知:
String username = "admin" ; 用户名
String password = "123456" ; 密码
键盘录入用户名和密码和已知的用户名和密码都已知,才能提示"登录成功",否则"用户名或者密码错误"
import java.util.Scanner;
class IfTest{
	
	public static void main(String[] args){
		//已知
		//用户名 
		String username = "admin" ; 
		//密码
		String password = "" ;  
		
		//创建键盘录入对象
		Scanner sc = new Scanner(System.in) ;
		
		//提示并录入数据
		System.out.println("请您输入用户名:") ; //用户名录入的字符串 
		//  键盘录入对象名.nextLine()   固定写法
		String inputUserName = sc.nextLine() ;
		
		System.out.println("请您输入密码:") ; //用户名录入的字符串 
		//  键盘录入对象名.nextLine()   固定写法
		String inputPwd = sc.nextLine() ;
		
		
		//if格式2 使用它完成逻辑判断
		/*
		字符串进行比较: String类的   字符串值1.equals(字符串值2) ,
				是比较字符串内容是否相同
		*/
		//录入的用户名和已知的存在的用户名对比,如果一致,并且录入的密码和已知的密码一致,登录成功
		if(inputUserName.equals(username) && inputPwd.equals(password)){
				System.out.println("恭喜您,登录成功") ;
		}else{
			System.out.println("对不起,用户名或者密码输入错误!") ;
		}
	}
}
If语句格式三
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("不及格") ;
}
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱学Java的小宇宙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值