JavaSE:SE知识整体总结

1、引言

历时一个多月的学习,已经掌握了JavaSE的知识,这篇博客就来做一下SE知识的总结~

2、数据类型和变量

Java中的数据类型分为基本数据类型和引用数据类型。

2.1 基本数据类型

基本数据类型共有四类八种:

四类:整形、浮点型、布尔类型、字符型

八种:

注意:

1. 不论是在16位系统还是32位系统,int都占用4个字节,long都占8个字节

2. 整形和浮点型都是带有符号的

3. 整型默认为int型,浮点型默认为double

4. . Java虚拟机规范中,并没有明确规定boolean占几个字节

2.2 引用数据类型

字符串、数组、类、接口等都是引用数据类型

2.3 类型转换

2.3.1 自动类型转换(隐式)

自动类型转换即:代码不需要经过任何处理,在代码编译时,编译器会自动进行处理。特点:数据范围小的转为数 据范围大的时会自动进行。

2.3.2 强制类型转换(显式)

强制类型转换:当进行操作时,代码需要经过一定的格式处理,不能自动完成。特点:数据范围大的到数据范围小的。

3、运算符

3.1 算术运算符

1. 基本四则运算符:加减乘除模(+ - * / %)

2. 增量运算符 +=  -=  *=  %=

3. 自增/自减运算符 ++  --

3.2 关系运算符

关系运算符主要有六个: ==  !=  <  >  <=  >=,其计算结果是 true 或者 false 。

3.3 逻辑运算符

逻辑运算符主要有三个: &&(逻辑与)  ||(逻辑或)  !(逻辑非) ,运算结果都是 boolean类型。

注意:&& 和 || 遵守短路求值的规则

3.4 位运算符

位运算符主要有四个:

&(按位与),

|(按位或),

~(按位取反),

^(按位异或) ,

除 ~ 是一元运算符外,其余都是二元运算符

3.4 移位运算符

1. 左移 <<: 最左侧位不要了, 最右侧补 0

2. 右移 >>: 最右侧位不要了, 最左侧补符号位(正数补0, 负数补1)

3. 无符号右移 >>>: 最右侧位不要了, 最左侧补 0

3.5 条件运算符

Java 中唯一的一个 三目运算符, 是条件判断语句的简化写法:

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

3.6 运算符的优先级

注意:运算符之间是有优先级的, 具体的规则我们不必记忆。 在可能存在歧义的代码中加上括号即可。

4、程序逻辑控制

本章详细内容可见:JavaSE:程序逻辑控制-CSDN博客

4.1 顺序结构

顺序结构 即 按照代码书写的顺序一行一行执行。

4.2 分支结构

if 语句(if-else、if-else if、if-else if-else)、switch 语句

4.3 循环结构

while 循环、for 循环、do while 循环

break(打破循环)、continue(跳出本次循环)

4.4 输入输出

4.4.1 输出:

1. println 输出的内容自带 \n,  print 不带 \n

2. printf 的格式化输出方式和 C 语言的 printf 是基本一致的

4.4.2 输入:

使用 Scanner 读取字符串/整数/浮点数

注意事项: 当循环输入多个数据的时候, 使用 ctrl + z 来结束输入 (Windows 上使用 ctrl + z, Linux / Mac 上使用 ctrl + d)

5、方法

方法类似于C语言中的函数。

注意事项:

1. 方法名字:采用小驼峰命名

2. 定义在类中

3. 方法不能嵌套定义

4. Java中,无方法声明一说

5.1 实参和形参的关系

1. 形参只是方法在定义时需要借助的一个变量,用来保存方法在调用时传递过来的值

2. 在Java中,实参的值永远都是拷贝到形参中,形参和实参本质是两个实体

5.2 方法重载

在Java中,如果多个方法的名字相同,参数列表不同,则称该几种方法被重载了。

注意:

1. 方法名必须相同

2. 参数列表必须不同(参数的个数不同、参数的类型不同、类型的次序必须不同)

3. 与返回值类型是否相同无关

6、数组

数组是一个引用数据类型。

6.1 数组的初始化

6.1.1 动态初始化

在创建数组时,直接指定数组中元素的个数

6.1.2 静态态初始化

在创建数组时不直接指定数据元素个数,而直接将具体的数据内容进行指定

注意:

如果没有对数组进行初始化,数组中元素有其默认零值:

6.2 引用类型

基本数据类型创建的变量,称为基本变量,该变量空间中直接存放的是其所对应的值;而引用数据类型创建的变量,一般称为对象的引用,其空间中存储的是对象所在空间的地址

数组是引用类型,其内部保存的内容可以简单理解成是数组在堆空间中的首地址

6.3 null

null 的作用类似于 C 语言中的 NULL (空指针), 都是表示一个无效的内存位置

7、类和对象

本章详细内容可见:JavaSE:类和对象-CSDN博客

Java是一门面向对象的语言,在面向对象的世界里,一切皆为对象。

7.1 类

类是用来对一个实体(对象)来进行描述的。

ps:类名注意采用大驼峰定义

7.2 对象

用类类型创建对象的过程,称为类的实例化,采用new关键字,配合类名来实例化对象。

1. new 关键字用于创建一个对象的实例

2. 使用 . 来访问对象中的属性和方法

3.  同一个类可以创建多个实例对象

7.3 this引用

this引用的是调用成员方法的对象。(即哪个对象调用就是哪个对象的引用类型)

7.4 构造方法

名字必须与类名相同在创建对象时,由编译器自动调用,并且在整个对象的生命周期内只调用一次。

构造方法的作用就是对对象中的成员进行初始化。

注意:

1. 如果用户没有显式定义,编译器会生成一份默认的构造方法,生成的默认构造方法一定是无参的

2. 构造方法中,可以通过this调用其他构造方法(this(...)必须是构造方法中第一条语句

7.5 默认初始化

对象空间被申请好之后,对象中包含的成员已经设置好了初始值(默认零值),

8、封装

面向对象程序三大特性:封装、继承、多态

不管是封装还是继承还是多态,都是一种思想!!!

封装:隐藏对象的属性和实现细节,仅对外公开接口来和对象进行交互。

使用private来对成员进行封装。

8.1 封装扩展之包

为了更好的管理类,把多个类收集在一起成为一组,称为软件包

包是对类、接口等的封装机制的体现,是一种对类或者接口等的很好的组织方式

Java中已经提供了很多现成的类供我们使用,使用 import语句导入包

8.2 static成员

被static修饰的成员,称之为静态成员,也可以称为类成员其不属于某个具体的对象,是属于类的,是所有对象所共享的。

本部分详细内容可见:JavaSE:static成员-CSDN博客

注意:

1. 不能在静态方法中访问任何非静态成员变量

2. 不属于某个具体的对象,是属于类的,所有对象共享的

3. 静态方法中不能调用任何非静态方法,因为非静态方法有this参数,在静态方法中调用时候无法传递this引用

4. 通过类名. 进行访问

8.3 代码块

分为:普通代码块 实例代码块 静态代码块 同步代码块

 本部分详细内容可见:JavaSE:代码块-CSDN博客

8.3.1 实例代码块

也叫做构造代码块,一般用于初始化实例成员变量。

注意:实例代码块只有在创建对象时才会执行

8.3.2 静态代码块

一般用于初始化静态成员变量。

注意:

1. 静态代码块不管生成多少个对象,其只会执行一次

2. 静态成员变量是类的属性,因此是在JVM加载类时开辟空间并初始化的

3. 如果一个类中包含多个静态代码块,在编译代码时,编译器会按照定义的先后次序依次执行(合并)

8.3.3 执行顺序

静态代码块-》实例代码块-》构造方法(有父类先执行父类的)

8.4 内部类

在 Java 中,可以将一个类定义在另一个类或者一个方法的内部, 前者称为内部类,后者称为外部类。内部类也是封装的一种体现。

本部分详细内容可见:JavaSE:内部类-CSDN博客

我们把内部类可以分为一下四种:

1.实例内部类(非静态内部类 )

实例内部类对象必须在先有外部类对象前提下才能创建

2.静态内部类

不需要再去通过外部类对象的引用来实例化

3.匿名内部类

4.局部内部类

9、继承

本章详细内容可见:JavaSE:继承(通俗细节版)-CSDN博客

面向对象思想中提出了继承的概念,专门用来进行共性抽取,实现代码复用。

继承主要解决的问题是:共性的抽取,实现代码复用。

9.1 extends

Java语法上,子类通过extend来继承父类

子类会将父类中的成员变量或者成员方法继承到子类中

9.2 父类成员的访问

成员访问遵循就近原则,自己有优先自己的,如果没有则向父类中找。

9.2.1 super关键字

出现同名的成员,非要访问父类的,需要super来访问。

Java提供了super关键字,该关键字主要作用:在子类方法中访问父类的成员。

super也可调用父类构造方法。

使用super注意:

1. 只能在非静态方法中使用

2. 在子类方法中,访问父类的成员变量和方法。

3.在子类构造方法中,super(...)调用父类构造时,必须是子类构造函数中第一条语句。

9.3 final关键字

1. 修饰变量或字段,表示常量(即不能修改)

2. 修饰类:表示此类不能被继承

3. 修饰方法:表示该方法不能被重写

9.4 Object类

Java里面除了Object类,所有的类都是存在继承关系的。默认会继承Object父类。即所有类的对象都可以使用Object的引用进行接收。

10、多态

本章详细内容可见:JavaSE:多态(含向上转型、动态绑定、重写)-CSDN博客

多态,就是去完成某个行为,当不同的对象去完成时会产生出不同的状态。

多态是一种思想!!!

多态发生条件:

1. 必须在继承体系下

2. 子类必须要对父类中方法进行重写

3. 通过父类的引用调用重写的方法

10.1 重写

1. 子类在重写父类的方法时,必须与父类方法原型一致: 返回值类型 方法名 (参数列表) 要完全一致

2. 被重写的方法返回值类型可以不同,但是必须是具有父子关系

3. 访问权限不能比父类中被重写的方法的访问权限更低。例如:如果父类方法被public修饰,则子类中重写该方 法就不能声明为 protected

4. 父类被static、private修饰的方法、构造方法都不能被重写。

10.1.1 重写和重载的区别

10.2 向上转型

实际就是创建一个子类对象,将其当成父类对象来使用。

有三种形式来向上转型:

1.直接赋值 2.方法传参 3.返回值接收

10.3 向下转型

将一个子类对象经过向上转型之后当成父类使用,将父类引用再还原为子类对象

Java中为了提高向下转型的安全性,引入 了 instanceof ,如果该表达式为true,则可以安全转换

向下转型不安全,用法很少。

11、抽象类和接口

本章详细内容可见:JavaSE:抽象类和接口-CSDN博客

11.1 抽象类

如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。

抽象类主要用于继承。

注意:

1. 抽象类不能直接实例化对象

2. 抽象方法不能是 private 的

3. 抽象方法不能被final和static修饰,因为抽象方法要被子类重写

4. 抽象类必须被继承,并且继承后子类要重写父类中的抽象方法,否则子类也是抽象类,必须要使用 abstract 修饰

5. 抽象类中不一定包含抽象方法,但是有抽象方法的类一定是抽象类

6. 抽象类中可以有构造方法,供子类创建对象时,初始化父类的成员变

11.2 接口

接口就是公共的行为规范标准,大家在实现时,只要符合规范标准,就可以通用。 在Java中,接口可以看成是:多个类的公共规范,是一种引用数据类型。

类与接口之间是 implements 实现关系。

注意:

1. 接口类型是一种引用类型,但是不能直接new接口的对象

2. 接口中每一个方法都是public的抽象方法, 即接口中的方法会被隐式的指定为 public abstract(只能是public abstract,其他修饰符都会报错)

3. 接口中的方法是不能在接口中实现的,只能由实现接口的类来实现

5. 接口中可以含有变量,但是接口中的变量会被隐式的指定为 public static final 变量

6. 接口中不能有静态代码块和构造方法

7.即Java中不支持多继承,但是一个类可以实现多个接口

11.2.1 接口间的继承

接口可以继承一个接口, 达到复用的效果. 使用 extends 关键字

接口间的继承相当于把多个接口合并在一起。

11.2.2 Clonable接口、浅拷贝与深拷贝

详见:JavaSE:Clonable接口、浅拷贝与深拷贝-CSDN博客

11.2.3 Comparable与Comparator接口

详见:JavaSE:Comparable与Comparator接口-CSDN博客

11.3 抽象类和接口的区别

核心区别: 抽象类中可以包含普通方法和普通字段, 这样的普通方法和字段可以被子类直接使用(不必重写), 而接口中不能包含普通方法, 子类必须重写所有的抽象方法。

12、String类

本章详细内容可见:JavaSE:String类常用方法(巨详细)-CSDN博客


本章详细内容可见:JavaSE:String类常用方法(巨详细)-CSDN博客

JavaSE:StringBuilder和StringBuffer类-CSDN博客

String类是引用数据类型。

12.1 字符串的构造

1.通过双引号直接定义

2.通过new对象来定义

3.通过字符数组来定义

12.2 字符串的不可变性

value数组被private修饰封装,没有提供任何的get和set方法,无法获取到字符串,当然也不可能被修改。

12.3 String类的常用方法

JavaSE:String类常用方法(巨详细)-CSDN博客

12.4 字符串的修改

因为String类是不能修改的,所有的修改都会创建新对象,效率非常低下。

如果要修改建议尽量 使用StringBuffer或者StringBuilder。

JavaSE:StringBuilder和StringBuffer类-CSDN博客

13、异常

在程序执行过程中,发生的一些不正常行为,就叫做异常。

13.1 异常的分类

13.2 运行时异常(非受查异常)

数组越界异常、空指针异常、算数异常、类型转换异常等都是非受查异常。

13.3 编译时异常(受查异常)

在程序编译期间发生的异常,称为编译时异常,也称为受检查异常。

13.4 处理异常

异常处理主要用到5个关键字:throws、try、catch、throw、finally

13.4.1 throw

借助throw关键字,抛出一个指定的异常对象,将错误信息告知给调用者。

注意:

需要注意:

1. throw必须写在方法体内部

2. 抛出的对象必须是Exception 或者 Exception 的子类对象(不能抛出自定义类的对象)

3. 如果抛出的是 RunTimeException 或者 RunTimeException 的子类(运行时异常),则可以不用处理,直接交给JVM来处理(但程序会立即终止)

4. 如果抛出的是编译时异常,用户必须处理,否则无法通过编译

5. 异常一旦抛出,其后的代码就不会执行

13.4.2 throws

当方法中抛出编译时异常,用户不想处理该异常,此时就可以借助throws将异常抛给方法的调用者来处理。即当前方法不处理异常,提醒方法的调用者处理异常。

13.4.3 try-catch

try-catch知识点总结:

1. try块内抛出异常位置之后的代码将不会被执行

2. 如果抛出异常类型与catch时异常类型不匹配,即异常不会被成功捕获,也就不会被处理,继续往外抛,直到 JVM收到后中断程序----异常是按照类型来捕获的

3. try中可能会抛出多个不同的异常对象,则必须用多个catch来捕获----即多种异常,多次捕获

4.如果异常之间具有父子关系,一定是子类异常在前catch,父类异常在后catch,否则语法错误

5.由于 Exception 类是所有异常类的父类,因此可以用这个类型表示捕捉所有异常(可以放到最后用来兜底,但是极不推荐只使用Exception来捕获异常 )

13.4.4 finally

不管有没有抛出异常,是否被捕获,finally中的代码一定会执行的,一般在finally中进行一些资源清理的扫尾工作。

13.5 自定义异常

Java当中虽说有着丰富的异常类,但是我们在开发过程中难免会遇见一些不能表示的异常,这时,我们就可以自定义异常。

仿照源码,创建自定义类,使之继承于Exception 或者 RuntimeException类,给出无参和带参的构造方法。

创建自定义异常类需要注意以下几点:

1. 自定义异常通常会继承自 Exception 或者 RuntimeException

2. 继承自 Exception 的异常默认是受查异常(必须捕获处理掉异常)

3. 继承自 RuntimeException 的异常默认是非受查异常

END

JavaSE语法部分的学习结束了,希望你能一直坚持下去,越来越强!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/666878.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

​​​​​​​Beyond Compare 3密钥被撤销的解决办法

首先&#xff0c;BCompare3的链接如下 链接&#xff1a;https://pan.baidu.com/s/1vuSxY0cVQCt0-8CpFzUhvg 提取码&#xff1a;8888 --来自百度网盘超级会员V7的分享 1.问题现象 激活之后在使用过程中有时候会出现密钥被撤销的警告&#xff0c;而且该工具无法使用&#xff…

渡众机器人自动驾驶小车运行Autoware 实现港口物流运输

Autoware 是一个开源的自动驾驶软件堆栈&#xff0c;提供了丰富的功能和模块&#xff0c;用于实现自动驾驶车辆的感知、定位、规划和控制等功能。北京渡众机器人公司将多款自动驾驶小车在多场景运行Autoware &#xff0c;它可以实现以下功能&#xff1a; 1. 感知&#xff1a;利…

小数第n位【蓝桥杯】

小数第n位 模拟 思路&#xff1a;arr数组用来记录已经出现过的a&#xff0c;在循环时及时退出。易知题目的3位即a%a后的第n-1,n,n1位。该代码非常巧妙&#xff0c;num记录3位的输出状况。 #include<iostream> #include<map> using namespace std; typedef long l…

制造企业如何通过PLM系统实现BOM管理的飞跃

摘要 在当今快速变化的制造行业中&#xff0c;产品生命周期管理&#xff08;PLM&#xff09;系统的应用已成为企业提升效率、降低成本和增强竞争力的关键。本文将探讨PLM系统如何通过其先进的BOM&#xff08;物料清单&#xff09;管理功能&#xff0c;帮助制造企业在整个产品生…

uniApp子组件监听数据的变化的方法之一

props:{//用来接收外界传递过来的数据swiperList:{type:Array,default:[]}}, swiperList&#xff1a;是父组件传递过来的值 通过 watch 监听&#xff08;在父组件中也同样可以使用&#xff0c;跟VUE的监听数据变化同理&#xff09; watch:{//监听组件中的数据变化swiperList(ol…

(深度学习记录)第TR3周:Transformer 算法详解

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 | 接辅导、项目定制 文本的输入处理中&#xff0c;transformer会将输入文本序列的每个词转化为一个词向量&#xff0c;我们通常会选择一个合适的长度作为输入…

C. Turtle and an Incomplete Sequence

思路&#xff1a;首先如果都是-1的话&#xff0c;我们可以输出1 2循环&#xff0c;否则。 首先处理首尾的连续-1串&#xff0c;这个也很好处理&#xff0c;最后我们处理两个非-1之间的-1串。 对于左边的数a[l]和右边的数a[r]&#xff1a; 如果a[l] > a[r]&#xff0c;那么…

CompassArena 司南大模型测评--代码编写

测试角度 要说测试模型&#xff0c;对咱们程序员来说&#xff0c;那自然是写代码的能力强不强比较重要了。那么下面我们以 leetcode 中的一道表面上是困难题的题目来考考各家大模型&#xff0c;看看哪个才应该是咱们日常写程序的帮手。 部分模型回答 问题部分如下截图&#…

ArcGIS教程(05):计算服务区和创建 OD 成本矩阵

准备视图 启动【ArcMap】->双击打开【Exercise05.mxd】->启用【Network Analyst 扩展模块】。前面的文章已经讲过&#xff0c;这里不再赘述。 创建服务区分析图层 1、在 Network Analyst 工具栏上&#xff0c;单击 【Network Analyst】&#xff0c;然后单击【新建服务…

CAC2.0全生命周期防护,助力企业构建安全闭环

5月29日&#xff0c;CACTER邮件安全团队凭借多年的邮件安全防护经验&#xff0c;在“防御邮件威胁-企业如何筑起最后防线”直播分享会上展示了构建安全闭环的重要性&#xff0c;并深入介绍了全新CAC 2.0中的“威胁邮件提示”功能。 下滑查看更多直播精彩内容 构建安全闭环的必要…

Solidity学习-投票合约示例

以下的合约有一些复杂&#xff0c;但展示了很多Solidity的语言特性。它实现了一个投票合约。 当然&#xff0c;电子投票的主要问题是如何将投票权分配给正确的人员以及如何防止被操纵。 我们不会在这里解决所有的问题&#xff0c;但至少我们会展示如何进行委托投票&#xff0c;…

显示器与电脑如何分屏显示?

1.点击电脑屏幕右键--显示设置 2、然后找到屏幕---找到多显示器---选择扩展显示器

亚马逊云科技峰会盛大举行 | 光环新网携光环云数据以高性能智算服务助力企业创新发展

2024年5月29日&#xff0c;云计算行业的年度盛典”2024亚马逊云科技中国峰会”在上海世博中心再次盛大启幕。作为全球领先的云计算服务提供商&#xff0c;亚马逊云科技峰会聚焦前沿科技&#xff0c;与来自不同行业、不同科技领域的优秀企业和用户共同探索AI时代的云端创新发展。…

游戏逆向工具分析及解决方案

游戏逆向&#xff0c;是指通过各类工具对游戏进行反编译及源码分析&#xff0c;尝试分析游戏的实现逻辑的过程。这个过程需要使用解密、反编译、解压缩等技术&#xff0c;目的是还原或分析出游戏的代码逻辑及资源。 游戏逆向工具可以按照不同功能进行划分&#xff0c;如&#…

分布式任务队列系统 celery 原理及入门

基本 Celery 是一个简单、灵活且可靠的分布式任务队列系统&#xff0c;用于在后台执行异步任务处理大量消息。支持任务调度、任务分发和结果存储&#xff0c;并且可以与消息代理&#xff08;如 RabbitMQ、Redis 等&#xff09;一起工作&#xff0c;以实现任务的队列管理和执行…

对于vsc中的vue命令 vue.json

打开vsc 然后在左下角有一个设置 2.点击用户代码片段 3.输入 vue.json回车 将此代码粘贴 &#xff08;我的不一定都适合&#xff09; { "vue2 template": { "prefix": "v2", "body": [ "<template>", " <…

更新详情 | Flutter 3.22 与 Dart 3.4

作者 / Michael Thomsen 过去几个月&#xff0c;Dart & Flutter 部门可谓忙碌非凡&#xff0c;但我们很高兴地宣布&#xff0c;Flutter 3.22 和 Dart 3.4 已经在今年的 Google I/O 大会上精彩亮相&#xff01; Google I/Ohttps://io.google/2024/intl/zh/ 我们始终致力于提…

【调试笔记-20240530-Linux-在 OpenWRT-23.05 上为 nginx 配置 HTTPS 网站】

调试笔记-系列文章目录 调试笔记-20240530-Linux-在 OpenWRT-23.05 上为 nginx 配置 HTTPS 网站 文章目录 调试笔记-系列文章目录调试笔记-20240530-Linux-在 OpenWRT-23.05 上为 nginx 配置 HTTPS 网站 前言一、调试环境操作系统&#xff1a;OpenWrt 23.05.3调试环境调试目标…

CS61C | lecture2

# CS61C | lecture2 C 语言是一种编译语言。C 编译器将 C 程序映射到特定与体系结构的机器代码(实际上是一串 0 和 1)。 而 Java 会通过 JVM(Java 虚拟机) 将代码转换为独立于架构的字节码。 Python 则会直接解释代码。C 不会直接解释代码&#xff0c;而是将其编译成机器代码之…

计算机基础学习路线

计算机基础学习路线 整理自学计算机基础的过程&#xff0c;虽学习内容众多&#xff0c;然始终相信世上无难事&#xff0c;只怕有心人&#xff0c;期间也遇到许多志同道合的同学&#xff0c;现在也分享自己的学习过程来帮助有需要的。 一、数据结构与算法 视频方面我看的是青…