JAVA第二周笔记

10/24笔记

1.计算机的基础知识(应用/硬件/软件)

1).计算机

计算机是一个能够高速处理海量数据智能电子设备.
由两部分组成: 软件和硬件. 没有安装任何软件的计算机,裸机!

2).计算机用途

**科学计算,**利用计算机完成数据的运算
数据存储,完成一些文件的读和写,或者对一些数组内容排序…
计算机辅助设计:CAD工程制图
**人工智能:**利用计算机模拟人工思维! 媒体应用:动画,视频…
**计算机网络:**网络也很重要,一个台计算机没有网络,类似于电话没有电话线一个道理!

3).计算机硬件

概念:由电子,机械和光电元件组成的物理装置的总称!
组成:由CPU、主板、内存、电源、主机箱、硬盘、显卡、键盘、鼠标,显示器等等!

4).计算机软件

系统软件
dos系统,windows系统,Linux系统,MAC系统 移动端:Android系统,ios系统
应用软件:
计算机上的安装的客户端软件,QQ,办公软件wps,wegame软件,…

5).软件的划分

C/S结构 :Client-Server 客户端和服务器端交互
特点:客户端软件必须升级才能使用服务器端的高版本功能 典型的应用:QQ客户端,yy语音…
QQ客户端要想去发红包,如果当前版本比较低,必须升级才能使用高版本功能!
B/S结构(架构):Browser-Server 浏览器端和服务器端交互(我们以后B/S结构)
特点:只要保证你计算机上有浏览器,无论高版本还低版本都能够访问服务器!
典型的网站: 访问网易新闻等等网站(只要你有浏览器)
B/S 结构 后期需要掌握 浏览器(解析前端的页面的时候和服务器交互)
前端学习:Javascript
后端学习:JavaEE核心技术(servlet,服务连接器) jsp:模板引擎 jdbc:java数据库连接
三阶段: 框架ssm springboot

2.什么是软件开发

产品经理—规划
项目经理—人员配备,人员调度,指定需求,管理项目进度,把控项目质量 (技术选型)
组长(主程序员)—分配任务到其他程序员
程序员—按照模块开发, 从头开始干—根据需求分析—完成数据库表的设计 ---->按照模块编码 前端 /后端/测试/运维
软件:就是使用计算机的数据和指令的集合!
数据:组成软件的核心代码(计算机能够识别的代码)
指令:计算机的符号(dos窗口—windows+r键–输入cmd—>进入)
软件开发:使用开发工具制作软件
开发工具:前期第一周:notepadd++高级记事本 后期:第二周开始 :idea开发工具软件 / 前端开发工具HbuilderX

3.人机交互

人和人之间交流和沟通,使用人类语言 那么,人和计算机进行交流和交流,需要人输入的指令是计算机能够识别的符号! 比如:在指定磁盘上创建一个文件夹

人机交互的两种方式

方式1:图形界面化(快速)

简单,直观,容易上手!(用鼠标操作即可,快速去创建文件/文件夹/删除等操作)

方式2:命令行方式(掌握指令)

进入dos命令行窗口(dos控制台) 方式1: (推荐) windows键+r键组合键------>输入cmd----->进入dos窗口

常用的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 …
D:\EE_2211\10_24_am_code_resource\code>cd… D:\EE_2211\10_24_am_code_resource>
5)如果现在处在多级目录路径上,想回退盘符根目录 cd \或者cd
D:\EE_2211\10_24_am_code_resource\code>cd
D:>
6)查看(罗列)这个盘符或者目录某个目录的详细信息 dir指令 D:>dir 022/05/22 07:57

360驱动大师目录 2022/10/23 11:50 BaiduNetdiskDownload 2022/07/05 11:15 bootstrap模板 2022/06/25 00:11 9,804 bug.jpg
2021/07/28 20:44 ChromeCoreDownloads
2022/08/27 17:51 develop_software 2022/08/30 17:28 deveop_tool 2022/09/29 17:38 doc_api
2022/08/19 22:17 EE_2113 2022/10/21 01:30 EE_2204 2022/10/24 09:18 EE_2208 2022/10/24 11:21 EE_2211
7)清除屏幕指令 cls(clear scrren) :当你dos窗口上面有很多信息,将上面的信息不用了,删了,使用这个
8) 要在指定的目录里面创建文件夹(目录)
md (make directory)文件夹名称(目录名称) D:\EE_2211\10_24_am_code_resource\code>md aaa D:\EE_2211\10_24_am_code_resource\code>md bbb
D:\EE_2211\10_24_am_code_resource\code>md ccc
D:\EE_2211\10_24_am_code_resource\code>
9)创建文件
copy con 文件名称带上后缀名 ----按回车键—进入编辑模式,书写文件内容,书写完成成之后,按—ctrl+z,编辑完成----回车即可! D:\EE_2211\10_24_am_code_resource\code\aaa>copy con a.txt hello,Java 开始了^Z
已复制 1 个文件。 D:\EE_2211\10_24_am_code_resource\code\aaa>copy con hello.txt 正在学习常用的dos指令^Z
已复制 1 个文件。 D:\EE_2211\10_24_am_code_resource\code\aaa>
10)删除指定的文件夹(目录) 注意事项:rd 文件夹名称(目录名称) 只能删除空目录 D:\EE_2211\10_24_am_code_resource\code>rd aaa 目录不是空的。 先通过下面del指令将文件删除了,然后再去使用rd 文件夹名称(目录名称) 删除这个文件夹 D:\EE_2211\10_24_am_code_resource\code\aaa>cd …
D:\EE_2211\10_24_am_code_resource\code>rd aaa 11) 删除文件 del 指定文件名称 也可以批量删除所有同名的后缀的文件 举例:del *.txt 删除所有带有.txt的文件 D:\EE_2211\10_24_am_code_resource\code\aaa>del *.txt D:\EE_2211\10_24_am_code_resource\code\aaa> D:\EE_2211\10_24_am_code_resource\code\aaa>del hello.java D:\EE_2211\10_24_am_code_resource\code\aaa>
12) rd的扩展指令 在windows系统上,想删除带内容的目录(里面有文件或者子文件夹) rd /s 文件夹名称(目录) :询问删除删除带内容的目录? y/n 选择y就是删除,n不删除 D:\EE_2211\10_24_am_code_resource\code>rd /s bbb
bbb, 是否确认(Y/N)? rd /s /q 文件名称(目录) :不询问删除带内容的目录 (属于暴力删除 这个指令慎用!) D:\EE_2211\10_24_am_code_resource\code>rd /s /q ccc
D:\EE_2211\10_24_am_code_resource\code>
rm -rf :在linux系统 递归删除所有的文件夹以及里面子文件
系统指令 查看ip地址 ipconfig g
ping ip地址或者域名:查看自己本机是否通信
ping指令(类似于 二战的时候:驱逐舰找潜艇,利用声呐系统) D:\EE_2211\10_24_am_code_resource\code>ping www.baidu.com 正在 Ping www.a.shifen.com [36.152.44.95] 具有 32 字节的数据: 来自 36.152.44.95 的回复: 字节=32 时间=35ms TTL=54 来自 36.152.44.95 的回复: 字节=32 时间=34ms TTL=54 来自 36.152.44.95 的回复: 字节=32 时间=34ms TTL=54 来自 36.152.44.95 的回复: 字节=32 时间=34ms TTL=54 36.152.44.95 的 Ping 统计信息: 数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失), 往返行程的估计时间(以毫秒为单位): 最短 = 34ms,最长 = 35ms,平均 = 34ms
D:\EE_2211\10_24_am_code_resource\code>

4.java语言历史以及平台版本

语言历史

1995年Sun公司发布Java1.0版本
1997年发布Java1.1版本
1998年发布Java1.2版本
2000年发布Java1.3版本
2002年发布Java1.4版本
2004年发布Java1.5版本
2006年发布Java1.6版本
2009年Oracle甲骨文公司收购Sun公司,并于2011发布Java1.7版本
2014年发布Java1.8版本
2017年发布Java9.0版本

平台版本

1. J2SE(Java 2 Platform Standard Edition)标准版
是为开发普通桌面和商务应用程序提供的解决方案
该技术体系是其他两者的基础,可以完成一些桌面应用程序的开发
2. J2ME(Java 2 Platform Micro Edition)小型版
是为开发电子消费产品和嵌入式设备提供的解决方案
3. J2EE(Java 2 Platform Enterprise Edition)企业版
是为开发企业环境下的应用程序提供的一套解决方案
该技术体系中包含的技术如 Servlet、Jsp等,主要针对于Web应用程序开发
Java5.0版本后,更名为 JAVAEE JAVASE JAVAME

5.Jdk,Jre,Jvm的介绍以及作用

5.1Java虚拟机–jvm

JVM(Java Virtual Machine): Java虚拟机,简称JVM,是运行所有Java程序的假想计算机,是Java程序的运行环境,是Java最具吸引力的特性之一。我们编写的Java代码,都运行在JVM上。
跨平台:任何软件的运行,都必须要运行在操作系统之上,而我们用Java编写的软件可以运行在任
何的操作系
统上,这个特性称为Java语言的跨平台特性。该特性是由JVM实现的,我们编写的程序运行在JVM
上,而JVM 运行在操作系统上。

5.2JRE 和 JDK

JRE(Java Runtime Environment):是Java程序的运行时环境,包含JVM和运行时所需要的核心类库。
JDK(Java Development Kit):是Java程序开发工具包,包含JRE和开发人员使用的工具。
我们想要运行一个已有的Java程序,那么只需安装JRE即可。
我们想要开发一个全新的Java程序,那么必须安装JDK
三者关系:JDK > JRE > JVM

6.编写一个HelloWorld案例(重点)

  1. 在指定目录下新建文本文件,完整的文件名修改为HelloWorld.java,其中文件名为HelloWorld,后
    缀名必须为.java.
  2. 用记事本打开
  3. 在文件中键入文本并保存,代码如下:
  class HelloWorld{
  	public static void main(string[]arge) {
		system.out.println("Hello World!") ;
}
  	}

文件名必须是 HelloWorld ,保证文件名和类的名字是一致的,注意大小写。
每个字母和符号必须与示例代码一模一样。

10/25笔记

1.path环境变量和classpath临时环境变量

1.path环境变量的配置方式

将jdk的bin目录的路径复制到win10/win11—>此电脑—>右键----属性----->高级系统上设置---->环境变量---->系统变量 不要在用户变量找path,用户变量,一个计算机可以有多个用户
弊端:1)就是当我们jdk版本升级了,需要手动更改系统变量的里面path,可能改动过程中不小心将别的环境变量误删了,为了避免 这个问题我们不能改动path了.
2) (主要原因)二阶段学习tomcat服务器,服务器是使用Java编写的,它在启动的时候,必须要在系统变量里面JAVA_HOME,这也是为什么 我们需要使用方式2的配置;如果系统变量没有JAVA_HOME,那么tomcat的web服务器就会启动失败(闪屏)

2.path环境变量的配置方式(推荐)

1)复制jdk安装目录的路径,
2)此电脑---->右键---->选择属性---->高级系统设置---->环境变量---->系统变量 系统变量----->新建一个变量名: JAVA_HOME 变量值:就是1)的路径
3)在path里面 引入JAVA_HOME对应的变量值的路径,path环境变量里面的最前面 %JAVA_HOME%\bin
好处:以后jdk版本升级,不需要改动path,只需要改动JAVA_HOME变量值里面的路径

3.Path环境变量的执行流程

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

4 .classpath(找你的字节码文件):临时环境变量(了解)

配置方式:
此电脑—>右键属性—>高级系统设置—>环境变量---->系统变量,新建一个变量名:classpath 变量值:就是指定字节码文件的路径 d:/
执行流程:
现在系统变量的classpath去找,指定路径下是否有字节码文件,如果有,就直接通过java 字节码文件前缀 直接运行; 如果没有,找不到任何字节码文件,它直接提示"错误: 找不到或无法加载主类 HelloWorld"

2.注释

Java中的注释的分类:

1.单行注释

//书写内容

2. 多行注释

/* 书写内容 */
前面两个普通注释:主要就是来标记代码,提高代码阅读性

3.文档注释

/** 书写内容 */
特殊注释,可以被解析的

3.关键字

Java的关键字:
被Java语言赋予特定含义的单词,叫关键字!
goto/const作为保留字使用

package:包名(文件夹/目录结构) :以后在开发中代码分包,分层的 (真实的意义:在面向对象部分讲解)
class:定义类的格式,Java中最基本单元就是类 固定格式 class 类名{}
public:权限修饰符 (公共的/公开的,任何人都可以访问的),访问权限足够大
static:静态修饰符 (面向对象部分讲解,本身的含义被"共享,共用")

4.标识符

标识符:
对包名,类名,接口名,变量名,方法名,常量名起名字的一个字符序列!
组成规则:
1)有0-9到数字组成
2)字母字符(26个字母)
3)$符号
4)_下划线

①.对包名(目录结构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的源码里面常量的格式:使用的多个单词写的)

1.如果常量名,单个单词 ,字母全部大写
举例
HELLO
2.如果是多个单词,字母全部大写,单词和单词之间用下划线隔开!
举例

HELLO_WORLD

jdk提供的Thread类 :线程 定义线程优先级三个常量:只看格式 (最小优先级,默认优先级,最大优先级)

public final static int MIN_PRIORITY = 1;
public final static int NORM_PRIORITY = 5;
public final static int MAX_PRIORITY = 10;

组成规则:
1)有0-9到数字组成
2)字母字符(26个字母)
3)$符号
4)_下划线

8.常量

常量在程序过程中,其值不发生改变的量!
字面值常量:

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 

7)自定义常量

跟一个关键字 final(面向对象去讲!状态修饰符)

10/26笔记

1.进制也属于常量范畴(不做重点)

进制的由来
进制的由来

进制的转换
在这里插入图片描述

**任意进制转换十进制
十进制转成任意进制**

在这里插入图片描述
8421码快速转换
在这里插入图片描述

2.变量(重点)

2.1什么是变量

在程序过程中,其值发生改变的量;
定义变量
变量的三要素
1)数据类型
2)变量名
3)初始化值

2.2.定义变量的方式

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

2.3.变量中的数据类型

分为两大类 基本数据类型: 四类八种

1)整数类型: 有四种,默认int

int(默认) 占4个字节
byte:字节类型 占1个字节 范围:-128~127(必须记住)
short:短整型 占2个字节
long:长整型 占8个字节 在定义long 的时候,规定,在初始化值加上L或者l
字节是内存的表示单位,一个字节是8位(bit),一个bit就是相当于一个电信号,不过只可以表示数据0,1.因为电脑储存都是二进制的,所以他的最校单位就是bit,而一个字节等于8位(bit)

2)浮点类型:默认double

单精度类型float ,在定义float类型后面规定, 占4个字节 需要标记,在初始化值的后面加上F或者f
双精度类型duoble: 占8个字节

3)字符类型

char: 里面的内容’字符’ 占2个字节

4)布尔类型

开发中,逻辑判断的true还是false的结果
boolean 一般boolean不参与运算,只是表示true或者false 占1个字节
基本类型里面整数类型开发中: 用最多的int,其次long (long类型定义时间毫秒值,后期通过常用类的功能,将系统时间得到时间毫秒值)
基本类型里面的浮点类型:使用最多的double(市场价格/商场价格…)
引用数据类型:(后面 面向对象说 讲数组里面去说) 数组,类,接口 类(具体类/抽象类)

2.4.变量中的隐式转换(面试题)

变量的运算注意----->变量的数据类型一致,才能运算!

Java中隐式类型提升(隐式转换)(基本数据类型非常重要语法)
boolean不参与任何运算(不能转换)

byte,short,char三者之间不会相互转换,一旦参与运算,会优先提升
int(考点)---->long--->float---->double

在这里插入图片描述
+ 可以是运算符也可以是拼接符号,+号左右有字符串时,+为拼接符号

10/27笔记

数据结构和算法(程序员功底)

1.变量的显示转换(强制类型转换,–>强转)

//显示转换:强转类型转换:就是将大的数据类型---转换成小的数据格式 //目标数据类型 变量名 = (目标数据类型)初始化值;
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) ; } }

== 1.1面试题==

/*经典面试题 定义三个变量
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—>ũ oat—>double 常量相加:先相加,然后看计算的结果是否在接收类型范围内,在直接用,否则,需要处理! 2)Java隐式转换和显示转换(刚才说的这些格式概念)

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

== 1.2面试题==

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 ;中午自己操作一下(这周考试题就是byte取值范围的考点)

2.扩展的算术运算符的特点

扩展的算术运算符
++或者–
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) ;
} 
}

3.赋值运算符的面试题

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

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

逻辑双与&&和逻辑单与&有什么区别?
共同点: 无论是逻辑单与&还是逻辑双与&&都是表达并列关系, 而且都是有fasle则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) ;
 }
 }

5.三元运算符

三元运算符(三目运算符)
格式:
(表达式)?执行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) ; 
}
 }

6.正反补码

在这里插入图片描述

10/28笔记

1.位运算符

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

位异或特点

一个数据被另一个数据位异或两次,其值是它本身

/*编程题:
将两个变量的数据进行交换(运算符的时候讲一下,先写) 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) ;
  }
   }
	

2.键盘录入数据—>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); } }

3.流程控制语句

顺序结构语句
选择结构语句
if语句(三种格式if/if…else/if …else if…else)
switch语句(考点)
循环结构语句
for循环:开发中常用的
while循环:
do-while循环: java源码里面使用多一些 (工程上使用的比较少)

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

3.2if语句格式2

/*
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.3if语句格式2的应用

/*
使用格式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 = "123456" ; 
//创建键盘录入对象
 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语句格式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("不及格") ; 
    } 
    }
    }
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值