javaSE阶段
-
- 第一天
-
-
- 1、进制转换
- 2、字节和位
- 3.数据类型分类
- 4、标识符
- 5、整数型
- 6、 字符类型和字符集
- 7.定义基础数据类型变量的注意事项
-
- 第二天
-
-
- 1、类型转换
- 2、常量
- 3.两种常见的输出语句
- 4、运算符
-
- 1.算术运算符
- 2. 号的使用
- 3.自增自减运算符
- 4.赋值运算符
- 5.关系运算符
- 6.逻辑操作符
- 7.短路逻辑操作符
- 八、三元运算符
- 9.位运算符
- 10.移位运算符<<
- 5.原码反码补码
-
- 第三天
-
-
- 1、流程语句与控制语句
-
- 1.流程语句
- 2.控制语句
-
- 1、dowhile语句格式:
- 2、for句子的基本格式:
- 3、if语句格式
- 4、switch句子的基本格式:
- 5、while循环格式:
- 2.运算符优先级的注意事项
-
- 第一天(day04--5.31)
-
-
-
- 1.方法(不调用,不执行)
-
- 1.定义方法
- 2.调用方法
- 3.重载
- 2、递归
- 3、for循环嵌套
- 4、死循环
-
-
- 第二天(day05--6.1)
-
-
-
-
- 1、数组
- 2、java的内存划分
-
-
-
- 第三天(day06--6.2)【6.10】
-
-
-
-
- 1、冒泡排序
- 2、数组反转
- 3.传参方法的特点
- 4、可变参数(jdk5.0)
- 5.数组折半搜索(二分搜索)
- 6.动态扩容、插入、删除数组
- 7、二维数组
-
- *思考:
-
- 第四天(day07--6.6)
-
-
- 什么是面向对象?
- 2、类和对象
-
- 1.类的定义
-
- 1.成员和内容
- 2.对象的定义
- 3.实例(成员)变量与局部变量的区别
- 4、this使用关键字
-
- 1.应用场景
- 2.应用场景
- 5、封装
-
- 1.包装的体现:
- 2.修饰符
- 3.包装步骤
- 6.结构方法(结构器)
- 7、JavaBean标准类
- 8、补充
-
- 1.匿名对象
- 2.私有方法
- 3.构建代码块
-
-
- (day08)(6.7)
-
-
-
- 1、static关键字
-
- 1.类变量(静态变量)
-
- 1)三种变量的区别(静态变量、实例变量、局部变量)
- 2.静态方法
- 3.调用静态方法的注意事项:
- 5.静态原理图解
- 6.静态代码块
- 2.单例设计模式
-
- 1.立即加载(饿汉式)
- 2.延迟加载(懒汉式)
- 三、跨包使用类(import关键字)和API文档
-
- 1.import关键字
- 2.API
- 4、API中的类
-
- 1、Scanner类
- 2、Math类
- 3、Arrays类
- 4、System类
- 5、BigInteger类
- 6、BigDecimal类
-
-
- day09(6.8)
-
-
-
- 1、继承
-
- 1.继承的含义
- 2.继承的格式
- 3.继承的特点
-
-
- **继承图解:walking:(进度)**
-
-
-
- 2、super关键字和this的几种用法
- 3、覆盖重写
-
- 1.注意事项
- 4、object类
-
- 1.toString()方法
- 2.equals()方法
-
-
- day10(6.10)
-
-
-
- 1、权限访问级别
-
- 权限访问级别的补充:
- 2、抽象
-
- 1.抽象方法
- 2.抽象类
- 3.抽象方法和抽象类的使用:
- 4、抽象方法和抽象类的用处
- 5、注意事项
- 3、final关键字
-
- 1.修饰一个类
- 2.修饰一个方法
- 3.修饰一个局部变量
- 4.修饰一个成员变量(实例变量和静态变量)
- 4、接口
-
- 1.概念
- 2.定义格式
- 3、接口成员说明
-
- 1.公共的静态常量
- 2.公共的抽象方法
- 3.默认方法((JDK1.8以上)
- 4.公共的静态方法(JDK1.8以上)
- 5.私有方法(JDK1.9以上)
- 4、接口的实现
-
- 使用接口注意事项:
-
-
- 总结
-
-
-
- 1、在类中有的东西
-
- 1.成员量(成员变量、成员常量)
- 2.成员方法
- 3.成员内部类
- 2、在方法中的东西
- 方法的概念(不调用,不执行)
- 重载
-
- 1.局部变量(方法中或方法声明上)【没有默认值,在栈内存,属于方法,只能被final关键字修饰】
- 2.局部常量:被final修饰,这个变量就不可改变
- 3.局部内部类
- 3、接口中有的东西
-
- 1.静态常量
- 2.抽象方法
- 3.默认方法(JDK1.8)
- 4.静态方法(JDK1.8)
- 5.私有方法(JDK1.9)
- 6.内部接口
- 4、javaBean标准类中有的
-
- 构造器
- 5、关系
- 修饰符
- **面向对象三大特征:封装、继承、多态**
-
- 1、封装
- 2、继承(extends)
- 3、多态
- 4、 几个关键字
-
- static
- final
- this
- super
- abstract
- 5、 引用数据类型:
- 6、枚举类:
-
-
- day11(6.11)
-
-
-
- 1、多态
-
- 1.多态的概述
- 2.程序中的多态:
- 3.多态的前提条件
- 4.多态关系下实例方法的特点:
- 5.多态的好处和弊端
- 6.引用类型转型
- 7.instanceof关键字:??
- 2、内部类(重点:匿名内部类)
-
- 1.内部类的形式
-
- 1)成员内部类
- 2)局部内部类
- (2)匿名的内部类[重点 !*]
- 3、枚举类
-
-
- day12(6.13)
-
-
-
- 1、类的初始化
- 2、包装类
-
- 1.拆箱和装箱:
-
- 1.装箱的方式:
- 2.拆箱的方式:
- 2.基本类型数据和字符串类型数据的转换
-
- 1.基本类型数据转换成字符串类型数据的方式:
- 2.字符串类型数据转换成基本类型数据的方式:
- 3.注意事项:
- 3、包装类的面试题
-
-
- day13(6.14)
-
-
-
- 1、String类(java.lang)
-
- String对象的创建方式:
- 类的方法
- StringBuffer类和StringBuilder类的相同点和不同点:
- StringBuilder类
- StringBuilder类的源码分析:
-
-
- day14(6.15)
-
-
-
- 1、String的面试题
- 32、异常
-
- 1.Throwable类(java.lang)
- 2.异常的分类:
-
- 1.运行时异常:
- 2.编译时异常
- 3.异常处理:
-
- 1.运行时异常的处理方案:
- 2.编译时异常的处理方案:
- 4.关于异常的关键字
-
- 1.throw关键字:
- 2.finally关键字
- 5、自定义异常:
-
- 1.自定义运行时异常:
- 2.自定义编译时异常:
-
-
- day15(6.17)---day16(6.18)
-
-
-
- 1、日期时间类
-
- 1.Date类 (java.util)
-
- 1.格式化:Date对象==>文本(String)
- 2.解析:文本(String)==>Date对象
- 2.DateFormat类 (java.text)
- 3.Calendar类(java.util)
- 4.LocalDateTime类(java.time)
- 5.DateTimeFormatter类(java.time.format)【底层final修饰,不能创建对象以及不能被继承】
-
- 1.LocalDateTime对象的格式化
- 2.LocalDateTime对象的解析
- 2、File (java.io)
- 3、IO流
-
- 1、字节流
-
- 1.FileInputStream类(文件字节输入流)(java.io)
- 2.FileOutputStream类(文件字节输出流)(java.io)
- 2、字符流
-
- 1.FileReader类(文件字符输入流)
- 2.FileWriter类(文件字符输出流)
- 3、缓冲流 (java.io)
-
- 1.BufferedInputStream类(缓冲字节输入流)
- 2.BufferedOutputStream类(缓冲字节输入流)
- 3.BufferedReader类(缓冲字符输入流)
- 4.BufferedWriter类(缓冲字符输出流)
- 4、转换流
-
- 1.InputStreamReader类(转换输入流)
- 2.OutputStreamWriter类(转换输出流)
- 5、对象流(序列化和反序列化)
-
- 1.ObjectOutputStream类(对象输出流,序列化过程)
- 2.Serializable接口(java.io)
- 3.ObjectInputStream类(对象输入流,反序列化)
- 4.对象流的注意事项:
- 5.transient关键字:
- 6、标准流
- 7、IO流的关闭规则:
-
-
- day17(6.20)
-
-
-
- 1、集合(集合都是现在util包下)
- 2、collection接口
-
- 1.collection接口(java.util)
- 2.collection集合的面试题
- 3、迭代器(Iterator)
- 4、泛型(jdk5.0)
-
- 1.泛型的基础应用
-
- 1.含有泛型的接口
- 2、含有泛型的类
- 3、含有泛型的方法
- 2.泛型的高级应用:通配符
- 5、List接口
-
- 1.接口的特点
- 2.接口的方法
- 3.List集合的遍历方式:6种
- 6、ArrayList类
-
- 1.类的特点
- 2.ArrayList集合的源码分析(基于JDK8.0):
-
- 1.ArrayList集合底层数组的初始容量
- 2.无参构造器的扩容原理:
- 3.JDK6.0(包含)以前和JDK7.0(包含)以后的区别:
-
-
- day18(6.21)
-
-
-
- 1、Vector类
- 2.LinkedList类
- 3、set接口
-
- 1、HashSet类
-
- HashSet相关面试题
-
- 1、HashSet集合如何过滤重复元素
- 2、重写hashCode()时重要参数为什么是31?
- 2、LinkedHashSet类
- 3、红黑树数据结构:
- 4、TreeSet类
- Collectons类的方法
-
-
- day19(6.22)-day20(6.23)
-
-
- 1、Map(接口)集合
-
- 1.HashMap类
- 2、HashMap集合元素存储过程的源码分析(基于JDK8.0):
-
- 1.相关名词解释
- 2.涉及成员变量,成员常量和方法的局部变量的备忘录
- 3.底层数组的初始容量和初始加载因子
- 5.如何确认元素在底层数组中的索引位置
- 4.默认的加载因子为什么是0.75?
- 2.LinkedHashMap类
- 3.TreeMap类
- 4.Hashtable类
- 5.HashMap和Hashtable之间的区别:
- 6.Properties类
- 2、多线程
-
- 1、Thread类(java.lang)
-
- 1.线程开启的方式:(4种)
-
- 1.继承Thread类
- 2.实现Runnable接口
- 2.线程安全问题(线程同步问题)
- 3.同步代码块和同步方法
-
- 1.同步代码块
- 2.同步方法
- 4.线程间通信(等待唤醒机制)
- 单例设计模式线程问题:
- 4、多线程面试题
-
- 1.Java中线程的状态分为几种?分别是?
- 2.Java中线程如果进行状态的转化?
-
- day21.网络编程(6.25)
-
-
- 1、Commons-io工具包(IO流扩展)
- 2、Lombok的使用
-
- 1.@Getter和@Setter
- 2.@ToString
- 3.@NoArgsConstructor和@AllArgsConstructor
- 4.@EqualsAndHashCode
- 5.@Data
- 3.网络编程
-
- 1.通信三要素
-
- 1.三次握手:
- 2.四次挥手:
- 2.实现简单客户端和服务端的交互
- 1.编写客户端
- 2.编写服务端
-
- day22(6.26)
-
-
- 1、函数式编程思想和Lambda表达式定义格式
-
- 1、函数式思想
- 2、Lamdba表达式
-
- 1.适用前提:
- 2.lambda表达式的格式:
- 3.Lambda表达式省略规则
- 3.函数式接口
-
- 1.定义格式:
- 2.java提供的几个常用接口
-
- 1.Supplier
- 2.Consumer
- 3.Function
- 4.Predicate
- 4.Stream流
-
- 1.数组和集合的获取:
- 2.方法:
-
- 1.Stream中的forEach方法:void forEach(Consumer<? super T> action);
- 2.Stream中的long count()方法
- 3.Stream中的Stream filter(Predicate<? super T> predicate)方法
- 4.Stream limit(long maxSize):获取Stream流对象中的前n个元素,返回一个新的Stream流对象
- 5.Stream skip(long n): 跳过Stream流对象中的前n个元素,返回一个新的Stream流对象
- 6.static Stream concat(Stream<? extends T> a, Stream<? extends T> b):两个流合成一个流
- 7.将Stream流变成集合
- 5.方法的引用
- 方法引用的介绍
-
- 1.对象名--引用成员方法
- 2.类名--引用静态方法
- 3.类--构造引用
- 4.数组--数组引用
-
- day23(6.28)反射
-
-
- 1、Junit单元测试
-
- 1.介绍
- 2.基本使用
- 3.注意事项
- 4.相关注解
- 5.使用方法
- 2、类的加载时机
- 3、反射
-
- 1.获取class对象的几种方式:
-
- 1)案例《通过反射获取properties文件》
- 2、获取Class对象中的构造方法
-
- 1)获取所有的public构造方法
- 2)获取空参的构造方法
- 3)通过无参快速创建对象的快捷方式
- 4)用反射获取有参构造方法并创建对象(public)
- 3、反射方法
-
- 1)获取所有的成员方法
- 2)获取方法(有参、无参)
- 3)小练习
- 4、注解
-
- 1.介绍
- 2.注解的定义以及属性的定义格式
- 3.注解的使用
- 4.注解注意事项:
- 5、注解解析的方法->AnnotatedElement接口
- 5、元注解
-
- 解析代码(两次)
-
第一天
1、进制转换
**十进制数据转成二进制数据:**使用除以2获取余数的方式
**二进制数据转成十进制数据:**使用8421编码的方式
2、字节和位
**字节(Byte):**是计算机信息技术用于计量存储容量的一种计量单位,通常情况下一字节等于有八
位, 也表示一些计算机编程语言中的数据类型和语言字符。
**位(bit):**是数据存储的最小单位。也就是二进制。二进制数系统中,每个0或1就是一个位,叫
做bit(比特),其中8 bit 就称为一个字节(Byte)。
8 bit = 1 Byte
1024 Byte = 1 KB
1024 KB = 1 MB
1024 MB = 1 GB
1024 GB = 1 TB
盘符切换命令 | 盘符名: |
查看当前文件夹内容 | dir |
进入文件夹命令 | cd 文件夹名 |
退出文件夹命令 | cd … |
退出到磁盘根目录 | cd \ |
清屏 | cls |
退出 | exit |
3、数据类型分类
:包括 整数 、 浮点 、 字符 、 布尔 。
:包括 类 、 数组 、 接口 。
4、标识符
:是指在程序中,我们自己定义内容。比如类的名字、方法的名字和变量的名字等等,都是 标识符。
硬性规定
标识符可以包含 英文字母26个(区分大小写) 、 0-9数字 、 $(美元符号) 和 _(下划线) 等。
标识符不能以数字开头。
标识符不能是关键字。
软性要求
包名规范:
多个英文单词:开头为公司域名的倒序,每个单词之间用 . 进行连接,例如:
com.atguigu.demo01
类名规范:
一个英文单词:单词首字母大写,例如:Dog
多个英文单词:每个单词首字母大写(大驼峰式),例如:HelloWorld
方法名规范:
一个英文单词:单词字母全部小写,例如:main
多个英文单词:第一个单词首字母小写,第二个单词以后(包含)每个单词首字母大写
(小驼峰式);例如:getMax,getSum,getName
变量名规范:
一个英文单词:单词字母全部小写,例如:result
多个英文单词:第一个单词首字母小写,第二个单词以后(包含)每个单词首字母大写
(小驼峰式),例如:maxNum
自定义常量名:
一个英文单词:单词字母全部大写,例如:PI
多个英文单词:单词字母全部大写,每个单词之间用下划线 _ 进行连接,例如:
DEFAULT_CAPACITY
5、整数型
int是最常用的整数类型,因此在通常请下,直接给出一个整数值默认就是int类型。除此之外,有
如下三种情形必须指出。
1)如果直接将一个较小的整数值(在byte或short类型的取值范围内)赋给一个byte或者short类 型的变量,JVM会自动把这个整数值转换成byte或者short类型来处理。
2)如果使用一个巨大的整数值(超出了int类型的取值范围,且在long的取值范围内)时,JVM不会自动把这个整数值当成long类型处理。如果希望JVM把一个整数值当成long类型来处理,应
在这个整数值后增加1或者L作为后缀。通常推荐使用L,因为英文字母l很容易跟数字1搞混。
3)如果把一个较小的整数值(在int类型的取值范围以内)直接赋给一个long类型的变量,这并不是因为JVM会把这个较小的整数值当成long类型来处理,JVM依然把这个整数值当成int类型来处理,只是因为int类型的值会自动类型转换到long类型。(类型转换后面讲解)
十进制
二进制,Java7.0种新增的特性,以0b或0B开头。
八进制,以0开头
十六进制,以0x或者0X开头,其中1015分别以af(此处的a~f不区分大小写)来表示。
6、 字符类型和字符集
字符集:在计算机的内部都是二进制的0、1数据,为了让计算机可以直接识别人类文字,将人类的
文字和一个十进制数进行对应起来组成一张表格。
字符集是各种文字和符号的总称,包括各国家文字、标点符号、图形符号、数字等。字符集
(Character set)是多个字符的集合,常见字符 集名称:ASCII字符集、GB2312字符集、GBK字符集、 GB18030字符集、Unicode字符集等。计算 机要准确的处理各种字符集文字,需要进行字符编码,以便计算机能够识别和存储各种文字。
将所有的英文字母,数字,符号都和十进制进行了对应,因此产生了世界上第一张编码表
Unicode(又称统一码、万国码、单一码)是计算机科学领域里的一项业界标准,包括字符集、编
码方案等。Java语言 内部使用16位的Unicode字符集作为编码方式。
7、基础数据类型变量定义的注意事项
-
初始化值必须在变量的取值范围内,如果超出,编译报错;
-
定义初始化long类型变量,初始化值后面需要添加字母L或者l,推荐使用L;
-
定义初始化float类型变量,初始化值后面需要添加字母F或者f;
-
在方法中定义的变量,在使用前必须进行初始化;
-
在同一作用域内定义的变量不可以同名;
【作用域】:就是变量直接所属的那对大括号;
-
变量的使用不能超出所属的作用域范围,否则编译报错;
-
在定义初始化的变量时,可以先定义后初始化,推荐使用直接定义初始化方式;
-
在定义初始化同一种数据类型多个变量时,可以通过一个数据类型在一行上直接定义多个变量,中 间用 逗号“,” 间隔
第二天
1、类型转换
含义:数据类型之间的转换 分类: 基本类型间的转换 引用类型间的转换(暂不涉及) 基本类型和包装类型间的转换(暂不涉及) 基本类型和字符串类型间的转换(暂不涉及)
含义: 将基本类型的数据进行类型转换 分类: 隐式转换(自动转换) 显式转换(强制转换) 格式: 数据类型A 变量名 = (数据类型A)数据类型B的数据值; 注意: 基本类型转换的格式适用于自动转换,也适用于强制转换,在自动转换时可以省略不写
含义: 将取值范围较小的数据类型转换成取值范围较大的数据类型 格式: 取值范围较大的数据类型 变量名 = (取值范围较大的数据类型)取值范围较小的数据类型的数据值 注意: 1.在自动转换时,可以将类型转换的格式省略不写 2.boolean不可以进行基本类型转换
根据基本类型取值范围大小关系总结如下:
byte < short < int < long < float < double
char < int < long < float < double
面试题:
在内存中每创建一个long类型变量,占8个字节,每创建一个float类型变量,占4个字节,为什么long的取值范围要比float的取值范围小?
1.基本类型转换只和取值范围有关,和占用字节数无关
2.long的取值范围中最大的整数是2^63-1,这个数小于2^63
float的取值范围中最大的整数大于3.4*10^38
3.4*10^38 > 2*10^38 > 2*8^38 = 2*(2^3)^38 = 2*2^114= 2^115
综上所述:long的取值范围比float的取值范围小
含义: 将取值范围较大的数据类型转换为取值范围较小的数据类型 格式: 取值范围较小的数据类型 变量名 = (取值范围较小的数据类型)取值范围较大数据类型的数据值; 注意: 尽量避免强制转换,因为可能会发生精度的损失和数据的溢出
1.基本类型转换的格式适用于自动转换,也适用于强制转换,在自动转换时,格式可以省略不写; 2.基本类型转换是七种数值类型间的转换,与boolean类型无关 3.尽量避免强制转换,因为可能会发生精度的损失和数据的溢出 4.byte,short,char这三种数据类型只要参与数学运算,先将数据越级提升成int类型,再参与运算操作;如果没有参与数学运算,依然遵循取值范围的特点转换
2、常量
常量: 含义:在程序中其值不可以发生改变的量 分类: 字面值常量 自定义常量(暂不涉及,讲解final关键字时讲解)
字面值常量:
含义:单独的一个值,不具备任何意义,需要结合其它语句进行使用
分类:
整数字面值常量
浮点字面值常量
字符字面值常量
布尔字面值常量
字符串字面值常量
空字面值常量
1.给byte,short,char类型变量进行赋值操作时,如果右边的初始化值是字面值常量,且还在该数据类型的取值范围内,JVM的编译器自动在编译时期将其优化为byte类型数据,我们将这一优化称之为"常量优化机制"
2.给变量进行赋值操作时,如果右边的初始化值是一个数学运算式子,且运算的符号两边都是字面值常量和运算后的结果还在该数据类型的取值范围内,JVM的编译器会将这一运算过程由运行时期提前至编译时期,在生成.class文件已运算完毕,我们将这一优化称之为"常量优化机制"
3、两种常见的输出语句
换行输出语句: 格式:System.out.println(输出内容); 特点:在控制台打印内容后,进行"回车换行"处理 直接输出语句: 格式:System.out.print(输出内容); 特点:在控制台打印内容后,不做任何处理 注意事项: 换行输出语句如果里面没有任何内容,直接进行回车换行处理 直接输出语句如果里面没有任何内容,编译报错
回车:将光标移动到该行的行首 换行:将贯标移动到下一行相同的位置
4、运算符
含义:在程序中用来连接变量或常量的符号
表达式: 含义:在程序中用运算符连接起来的式子
常见运算符的分类 算术运算符 赋值运算符 关系运算符 逻辑运算符 三元运算符 位运算符
1.算术运算符
含义: 在程序中针对变量或常量进行运算操作的运算符 分类: 数学运算符
+, - , * , / , %(取余) 自增运算符 ++ 自减运算符 –
数学运算符的注意事项:
/:取的是两个数相除的商
%:取的是两个数相除的余数
public static void main (String[] args) {
//声明并初始化四位整数
int num = 1234;
//获取该四位数各位位上的数字
int ge = num % 10;
int shi = num / 10 % 10;
int bai = num / 100 % 10;
int qian = num / 1000 % 10;
System.out.println("个位上的数字是:" + ge);
System.out.println("十位上的数字是:" + shi);
System.out.println("百位上的数字是:" + bai);
System.out.println("千位上的数字是:" + qian);
}
对于一个数(num)个十百千万的位数求法规律:
个位:num%10
十位:num/10%10
百位:num/100%10
千位:num/1000%10
万位:num/10000%10
…位:num/…%10
2.+号的使用
+号的多种用法: 1.加法运算符 2.字符串连接符
字符串连接符 含义:当+号两边有任何一边出现了字符串时,+号不再起到加法运算操作,而是转换成字符串连接符,将两边的内容进行连接操作,得到新的字符串
3.自增自减运算符
自增自减运算符(++,–) 含义:将变量进行+1操作,再将结果赋值给该变量 格式: 变量名++ ++变量名 特点: 单独使用: 前++和后++的运算结果是一样的,运算过程可以忽略不计 复合使用: 如果++在前,先自增,再使用 如果++在后,先使用,再自增 含义:将变量进行-1操作,再将结果赋值给该变量 格式: 变量名– –变量名 特点: 单独使用: 前–和后–的运算结果是一样的,运算过程可以忽略不计 复合使用: 如果–在前,先自减,再使用 如果–在后,先使用,再自减
4.赋值运算符
含义: 进行赋值操作的运算符 分类: 基础赋值运算符 = 扩展赋值运算符 += , -= , *= , /= , %= , … 含义:将运算符两边的内容进行运算操作,再将运算后的结果赋值给左边变量
注意:
扩展的赋值运算符再将结果赋值给左边的变量之前,会根据左边的变量的数据类型针对结果进行隐式的强制转换
5.关系运算符
含义: 针对变量进行比较的运算符 分类: < , <= , > , >= , == , != 注意: 1.关系表达式的结果一定是boolean值 2.在程序中不要将写成=,也不要将=写成
==的含义: 比较基本类型数据值是否相等
!=的含义: 比较基本类型数据值是否不等
6.逻辑运算符
含义: 用来连接boolean值结果的运算符 分类: 基础逻辑运算符 & , | , ^ , ! 短路逻辑运算符 && , ||
基础逻辑运算符
运算符&:
含义:
与,且
特点:
有false则false
场景:
判断多个条件是否同时满足
运算符|:
含义:
或
特点:
有true则true
场景:
判断多个条件是否至少满足一个
运算符^:(了解)
含义:
异或
特点:
相同为false,不同为true
场景:
判断两个条件结果是否不等
运算符!:
含义:
非
特点:
非false则true,非true则false
场景:
针对boolean值结果进行取反
7.短路逻辑运算符
&& ||
运算符&&:
含义:
双与,短路与
特点:
有false则false
注意:
&和&&的结果是一样的;&&具有短路效果,当运算符前面的表达式结果为false时,运算符后面的表达式不会被执行;如果是&的话,无论运算符前面的表达式结果是true还是false,运算符后面的表达式都会被执行,在实际应用中更推荐是用&&
运算符||:
含义:
双或,短路或
特点:
有true则true
注意:
|和||的结果是一样的;||具有短路效果,当运算符前面的表达式结果为true时,运算符后面的表达式不会被执行;如果是|的话,无论运算符前面的表达式结果是true还是false,运算符后面的表达式都会被执行,在实际应用中更推荐是用||
8.三元运算符
含义:含有三个未知量的运算符 格式: 关系表达式 ? 结果值1 : 结果值2; 流程: 1.先确认关系表达式的结果是true还是false 2.在确认关系表达式结果的同时,统一结果值1和结果值2的数据类型 3.如果是true,执行统一数据类型后的结果值1; 如果是false,执行统一数据类型后的结果值2;
9.位运算符
含义:针对二进制进行操作的运算符 目的: 1.查看源码 2.面试题 分类: 按位运算符 & , | , ^ , ~ 移位运算符: << , >> , >>>
按位运算符&:
含义:
按位与,当两位相同时为1时才返回1
按位运算符|:
含义:
按位或,只要有一位为1即可返回
1
按位运算符^:
含义:
按位异或。当两位相同时返回0,不同时返回1
按位运算符~:
含义:
按位非,将操作数的每个位(包括符号位)全部取反
10.移位运算符<<
含义: 将指定数据的二进制往左移动指定的位数 格式: 指定数据 << 移动位数 特点: 将指定数据的二进制往左移动指定的位数,符号位也随之移动,如果低位出现了空位,需要补0进行占位
移位运算符>>:
含义:
将指定数据的二进制往右移动指定的位数
格式:
指定数据 >> 移动位数
特点:
将指定数据的二进制往右移动指定的位数,符号位也随之移动,如果高位出现了空位,需要补和符号位相同的数字进行占位
移位运算符>>>:
含义:
将指定数据的二进制往右移动指定的位数
格式:
指定数据 >>> 移动位数
特点:
将指定数据的二进制往右移动指定的位数,符号位也随之移动,如果高位出现了空位,需要补0进行占位
5、原码反码补码
相同点: 在程序中都是针对二进制数据进行定点表示法: (1)原反补针对二进制规定了符号位,最高位即符号位,正数为0,负数为1 (2)原反补针对存储占用的字节数进行二进制补全,不足位数,在符号位后面进行补0操作 int类型的1: 二进制1 定点表示法: 00000000 00000000 00000000 00000001 不同点: 原码:是屏幕显式数据的二进制定点表示法 补码:计算机中所有的数据操作都拿原码的补码形式进行计算操作 反码:针对原码和补码进行转换的中间量
数据存储操作过程:
1.显式的数据==>数据的原码
如果数据是正整数,符号位确认为0,并补足位数
如果数据是负整数,符号位确认为1,并补足位数
2.数据的原码==>数据的反码
如果数据是正整数,数据的反码与其原码相同
如果数据是负整数,数据的反码是针对原码进行逐位取反,符号位保持不变
3.数据的反码==>数据的补码
如果数据是正整数,数据的补码与其反码相同
如果数据是负整数,数据的补码在其反码的基础上进行+1运算
4.数据的补码==>结果的补码
数据的存储或操作
5.结果的补码==>结果的反码
如果结果是正整数,结果的反码与其补码相同
如果结果是负整数,结果的反码在其补码的基础上进行-1运算
6.结果的反码==>结果的原码
如果结果是正整数,结果的原码与其反码相同
如果结果是负整数,结果的原码是针对反码进行逐位取反,符号位保持不变
7.结果的原码==>显式的结果
如果结果是正整数,直接转换显式结果
如果结果是负整数,忽略符号位,将其直接转换显式结果并添加负号
将int类型的130强制转换成byte类型
1.显式的数据==>数据的原码
数据的原码:00000000 00000000 00000000 10000010
2.数据的原码==>数据的反码
数据的反码:00000000 00000000 00000000 10000010
3.数据的反码==>数据的补码
数据的补码:00000000 00000000 00000000 10000010
4.数据的补码==>结果的补码
结果的补码:10000010
5.结果的补码==>结果的反码
结果的反码:10000001
6.结果的反码==>结果的原码
结果的原码:11111110
7.结果的原码==>显式的结果
显式的结果:-126
第三天
1、流程语句与控制语句
1.流程语句
顺序结构:代码从上至下依次执行 流程控制作用于顺序结构中
流程控制:
流程控制语句:
分支结构:
if语句
switch语句
循环结构
for语句
while语句
dowhile语句
流程控制代码块:
调用结构:
方法
1.记住流程控制的语法格式 2.记住流程控制的语法流程 3.精通流程控制的实际应用
1.循环语句的执行次数(当循环条件语句为false时,循环体语句至少执行的次数) for语句和while语句当循环条件语句为false时,循环体语句至少执行0次 do…while…语句当循环条件语句为false时,循环体语句至少执行1次 2.实际开发中如何选择 有明显的循环次数或循环范围,选择for语句 没有明显的循环次数或循环范围,选择while语句 在实际开发中不会选择do…while…语句
2.控制语句
含义:操作流程控制的语句 分类: break跳出整个循环,结束 continue跳出当前循环进入到下一个循环 return(暂不涉及)
break关键字
场景
1.switch语句中
2.循环语句中
作用:
1.结束switch语句
2.结束循环语句
continue关键字:
场景:
循环语句中
作用:
跳出本次循环,继续下一次循环
控制语句的注意事项:
在和控制语句相同的作用域内,控制语句的后面不可以编写任何代码,
否则编译报错,因为永远执行不到
流程控制语句的注意事项: if语句,for语句,while语句如果{}中的语句体有且仅有一行时, {}可以省略不写,但是实际开发中推荐写上
1、dowhile语句的格式:
do { 循环体语句 } while (循环条件语句);
执行流程:
1.先执行循环体语句;
2.再确认循环条件语句的结果是true还是false;
3.如果是true,跳回第1步,继续执行;
如果是false,dowhile语句结束;
为了和for循环进行转换,衍生出dowhile语句的扩展格式
初始化语句
do {
循环体语句
迭代语句
} while (循环条件语句);
2、for语句的基本格式:
for (初始化语句;循环条件语句;迭代语句) { 循环体语句 }
初始化语句:声明初始化循环变量的语句
循环条件语句:循环的判断条件
循环体语句:重复执行多次的代码
迭代语句:循环的后续操作
执行流程:
1.先执行初始化语句;
2.确认循环条件语句的结果是true还是false;
3.如果是true,执行循环体语句;
如果是false,for语句结束;
4.执行迭代语句;
5.跳回第2步,继续执行
什么是水仙花数呢?
所谓的水仙花数是指一个三位数,其各位数字的立方和等于该数本身。
举例:153就是一个水仙花数。
153 = 1*1*1 + 5*5*5 + 3*3*3
public class ForDemo05 {
public static void main (String[] args) {
//遍历所有的三位数
for (int i = 100 ; i < 1000 ; i++) {
//获取每个三位数的个位,十位,百位上的数字
int ge = i % 10;
int shi = i / 10 % 10;
int bai = i / 100 % 10;
//进行数据的筛选
if (i == bai*bai*bai + shi*shi*shi + ge*ge*ge) {
System.out.println(i);
}
}
}
}
分析以下需求,并用代码实现: (1)打印出四位数字中个位+百位=十位+千位并且个位数为偶数,千位数为奇数的数字,并打印符合条件的数字的个