Java 语法 (杂七杂八的知识)

面向对象三大特性

封装, 多态, 继承


基本数据类型

在这里插入图片描述
一字节 (Byte) 占八位 (bit)


JDK, JRE, JVM

JDK (Java Development Kit) : Java 开发工具包, 包括了 JRE, 编译器 javac, 和调试工具 Jconsole, jstack 等
JRE (Java Runtime Environment) : Java 运行时环境, 包括了 JVM , Java 基础类库. 是使用 Java 语言编写程序运行的所需环境
JVM : Java 虚拟机, 可在其上运行 Java 代码

在这里插入图片描述


Java 代码, 运行流程

在这里插入图片描述

  1. 先通过 javac.exe 编译器, 对源文件进行编译, 生成 .class 文件
  2. 启动 Java 虚拟机, 运行 .class 文件, Java 虚拟机会将 .class 文件转换成平台能够理解的形式来运行

运算符

位运算符 : & | ~ ^
移位运算符:

  • << 左移, 低位补 0
  • >> 右移, 高位补符号位
  • >>> 无符号右移, 高位补 0

循环

switch(表达式) {case 常量值: {.....[break;]}case 常量值: {.....[break;]}....default: {.....[break;]}}
do {循环语句;
} while(循环条件);

实参和形参

对于基础数据类型来说, 传值调用, 形参为实参内容的拷贝
对于引用数据类型来说, 传址调用, 传的是对象的地址, 那么形参和实参指向同一片地址, 即可以理解为传的就是对象本身了


基本类型变量 & 引用类型变量

基本变量的变量空间中直接存放的是其对应的值
对象的引用, 其空间中存的是对象所在空间的 (起始) 地址

在这里插入图片描述


重载

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

  1. 方法名相同
  2. 参数列表不同 (参数个数, 参数类型, 类型的次序)
  3. 与返回值类型无关
  4. 编译器 (javac) 在编译阶段, 会对实参类型进行推演, 根据推演的结果决定调用哪个方法

这里有个方法签名的概念 : 经过编译器编译修改过后, 方法的最终名字
具体方式 : 方法全路径名 + 参数列表 + 返回值类型, 构成方法完整的名字


数组

动态初始化 : 创建数组时直接指定元素个数

T[] 数组名 = new T[N];

静态初始化 : 创建数组时不直接指定元素个数, 而直接指定具体的数据内容. (编译器会根据 {} 中元素个数来确定数组的长度)

T[] 数组名 = new T[] {data1,data2,data3};
T[] 数组名 = {data1,data2,data3};

null

null 表示一个无效的内存位置, 因此不能对这个内存进行任何读写操作. 一旦尝试读写, 就会抛出 NullPointerException 异常

引用本质上就是存了一个地址, 如果该引用指向无效内存, 肯定不能对其进行操作


OOP

OOP (Object Oriented Program) 面向对象语言
面向对象是解决问题的一种思路, 主要依靠对象之间的交互完成一件事情


this

this 引用指向当前对象 (成员方法运行时, 指代调用该成员方法的对象)
this 是 “成员方法” 的第一个隐藏的参数. 编译器会自动传递. 在成员方法运行时, 编译器会负责将调用成员方法的对象的引用, 传递给该成员方法. this 负责接收


局部变量在使用时必须初始化, 而成员变量可以不用

new 一个对象的时候 :

  1. 检测对象对应的类是否加载了, 如果没有, 则加载该类 (类加载机制)
  2. 为对象分配内存空间
  3. 处理并发安全问题 (JVM 保证, 多线程下同时申请对象, 不同对象分配内存不会出现冲突 )
  4. 初始化所分配的空间 (赋初始值)
  5. 设置对象头信息
  6. 调用构造方法, 给对象中的各个成员赋值

封装

封装 : 将数据和数据操作的方法有机结合, 隐藏对象的属性和实现细节. 仅对外公开接口来和对象进行交互
Java 中通过类和访问权限来实现封装


访问限定符

在这里插入图片描述
protected 主要用于继承中


软件包

为了更好的管理对象, 把多个类收集在一起称为一组, 称为软件包 (类似于目录)
Java 中的包, 是对类, 接口等的封装机制的体现, 是一种对类或者接口等的很好的组织方式


静态方法特性

  1. 不属于某个具体的对象, 是类方法
  2. 可以通过对象调用, 也可以通过 类名.静态方法名( ... ) 来调用
  3. 不能在静态方法中访问任何非静态成员变量
  4. 不能再静态方法中调用任何非静态方法. 因为非静态方法有 this 参数, 在静态方法中调用时无法传递 this 引用
  5. 静态方法无法重写, 不能用来实现多态

代码块

分类:

  1. 普通代码块 - 方法中
  2. 构造块 - 类中, 对象实例代码块
  3. 静态块 - 类中, static 定义的代码块
  4. 同步代码块
  • 静态代码块不管生成多少个对象, 只会生成一次
  • 静态代码块在 JVM 加载类时, 开辟空间并初始化
  • 一个类中的多个静态代码块, 在编译时, 编译器会按照定义的先后次序依次执行 (合并成一个静态代码块)
  • 实例代码块只有在创建对象时才会执行

内部类

内部类也是封装的一种体现
内部类和外部类共用同一个 java 源文件, 但是经过编译器 (javac) 编译后, 内部类会生成单独的字节码文件
在这里插入图片描述


继承

继承 : 共性提取, 代码复用
super(): 默认调基类, 无参构造方法
super.func( … ) : 调用基类重写前的方法
Java 不支持多继承


继承情况下的代码块之间的执行顺序

  1. 父类静态代码块 - 只执行一次
  2. 子类静态代码块 - 只执行一次
  3. 父类实例代码块
  4. 父类构造方法
  5. 子类实例代码块
  6. 子类构造方法

final

final 修饰变量或字段 : 不能被修改
final 修饰类 : 不能被继承
final 修饰方法 : 不能被重写


多态

  1. 继承体系下
  2. 子类必须对父类中的方法进行重写
  3. 通过父类的引用调用重写方法

  • 静态绑定 / 前期绑定 / 早绑定 : 在编译时, 根据用户所传递实参类型就确定了具体调用哪个方法
  • 动态绑定 / 后期绑定 / 晚绑定 : 在编译时, 不能确定方法的行为, 需要等到程序运行时, 才能够确定具体调用哪个类的方法

  • 向上转型 : 创建一个子类对象, 将其当成父类对象来使用.
    父类类型 对象名 = new 子类类型( );
    优点 : 让代码实现更简单灵活
    缺点: 不能掉应道子类特有的方法
  • 向下转型 : 和向上转型对应, 类似强转的东西
    (子类类型)父类实例

抽象类

extend abstract
抽象类包括

  1. 普通属性
  2. 普通方法
  3. 抽象方法
  4. 构造方法
  • 抽象类不能实例化对象
  • 抽象类不能被 private 修饰
  • 抽象类必须被继承
  • 抽象类中不一定含抽象方法, 但有抽象方法的类一定是抽象类
  • 抽象类中构造方法仅供子类创建对象时, 初始化父类的成员变量使用

抽象类的作用 : 加一层编译器校验, 子类的工作必须由子类完成!


接口

implement interface
一个类可以实现多个接口, 接口之间可以多继承

  • 接口不可直接 new

  • 接口中每个方法都是 public 的抽象方法 (public abstract - 隐式指定)

  • 接口中的变量, 被隐式指定为 public abstract final 修饰

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

  • JDK8中, 接口中可包含 default 修饰的方法

  • Array.sort(); Comparable 接口, 重写 compareTo() 方法

  • clone(); Cloneable 接口

  • 所有类的公共父类 : ObjecttoString(); equals(); hashcode();


String 不可变

不可变优点

  1. 方便实现字符串对象池
  2. 不可变对象是线程安全的
  3. 不可变对象梗方便缓存 hashcode, 作为 key 时可以更高效保存到 HashMap 中

String 类中的字符时间保存在内部维护的 value 数组中

  1. String 类被 final 修饰, 表明 String 类不可继承
  2. value 被 final 修饰, 表明 value 本身的值不能改变 (不能将引用指向其他字符数组), value 中的值是一个地址, 该地址对应的那片空间中的内容是可以改变的

对 String 类型对象的修改, 会创建新对象


String, StringBuffer, StringBuilder

  • String 的内容不可修改. StringBuffer, StringBuilder 的内容是可以修改的
  • String 类线程安全
    StringBuffer 采用同步处理, 线程安全
    StringBuilder 未采用同步处理, 线程不安全

常量池

Java 为 8中基本数据类型和 String 类都提供了常量池

字符串常量池在 JVM 中是 StringTable 类, 实际是一个固定大小的 HashTable

String.intern() : 手动将创建的 String 对象添加到常量池中


Throwable

Throwable : 异常体系的顶级类
Error : 指 Java 虚拟机无法解决的严重问题

  • eg: JVM 内部错误, 资源耗尽 …

Exception : 异常产生后程序员可通过代码进行处理

  • 编译时异常 (受检查异常)
  • 运行时异常(非受检查异常)

throw & throws

  • throw 手动抛异常
  • throws 向上层代码抛异常

自定义异常

  • 继承自 Exception, 默认是受检察异常
  • 继承自 RuntimeException, 默认是非受检查异常

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【牛客】Tokitsukaze and Average of Substring

原题链接&#xff1a;登录—专业IT笔试面试备考平台_牛客网 目录 1. 题目描述 2. 思路分析 3. 代码实现 1. 题目描述 2. 思路分析 前缀和。 开一个int类型的前缀和数组pre[30][N]&#xff08;pre[i][j]表示某字符转成的数字 i 在一段区间的前缀个数。因为字母表有‘a’~z…

【使用ChatGPT的API之前】OpenAI API提供的可用模型

文章目录 一. ChatGPT基本概念二. OpenAI API提供的可用模型1. InstructGPT2. ChatGPT3. GPT-4 三. 在OpenAI Playground中使用GPT模型-ing 在使用GPT-4和ChatGPT的API集成到Python应用程序之前&#xff0c;我们先了解ChatGPT的基本概念&#xff0c;与OpenAI API提供的可用模型…

云原生Kubernetes: K8S 1.29版本 部署Harbor

目录 一、实验 1.环境 2.Linux 部署docker compose 3.证书秘钥配置 4.K8S 1.29版本 部署Harbor 5.K8S 1.29版本 使用Harbor 二、问题 1.docker 登录harbor失败 一、实验 1.环境 &#xff08;1&#xff09;主机 表1 主机 主机架构版本IP备注masterK8S master节点1.2…

java报错:使用mybatis plus查询一个只返回一条数据的sql,却报错返回了1000多条

今天遇到一个问题 系统线上问题&#xff0c;经常出现这样的问题&#xff0c;刚重启系统时不报错了&#xff0c;可是运行一段时间又会出现。sql已经写了limit 1&#xff0c;mybatis的debug日志也返回total为1&#xff0c;可是却报错返回了1805条数据 乍一看&#xff0c;感觉太不…

基于Spring Boot的公司OA系统设计与实现

基于Spring Boot的银行OA系统设计与实现 开发语言&#xff1a;Java 框架&#xff1a;springboot JDK版本&#xff1a;JDK1.8 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclipse/idea 系统部分展示 用户登录界面&#xff0c;在银行OA系统运行后&#x…

基于springboot+jsp+Mysql的商务安全邮箱邮件收发

开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;…

STM32单片机实战开发笔记-PWM波输出频率及占空比配置【wulianjishu666】

单片机物联网开发资料&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1XzodQuML7CqZ4ZKinDGKkg?pwdbgep 提取码&#xff1a;bgep PWM模块测试 功能描述 脉冲宽度调制模式&#xff1a; PWM边沿对齐模式&#xff1a; 向上计数配置 当TIMX_CR1寄存器中的DIR为低的时…

基于Python的LSTM网络实现单特征预测回归任务(TensorFlow)

单特征&#xff1a;数据集中只包含2列&#xff0c;时间列价格列&#xff0c;仅利用价格来预测价格 目录 一、数据集 二、任务目标 三、代码实现 1、从本地路径中读取数据文件 2、数据归一化 3、创建配置类&#xff0c;将LSTM的各个超参数声明为变量&#xff0c;便于后续…

php开发-个人博客项目文件操作类编辑器上传下载删除读写

特地整了个软件 这就舒服了 文件操作类的开发 文件的任意上传&#xff0c;下载&#xff0c;读取&#xff0c;删除操作等 1.文件上传类-任意文件上传 分为三类 1&#xff0c;代码自主编写的 先写一个html的上传表单&#xff0c;这个网上搜索就有 标题看着不够明确啊&#…

【牛客】【模板】差分

原题链接&#xff1a;登录—专业IT笔试面试备考平台_牛客网 目录 1. 题目描述 2. 思路分析 3. 代码实现 1. 题目描述 2. 思路分析 差分模板。 b[0]a[0]; b[1]a[1]-a[0]; b[2]a[2]-a[1]; ...... b[n-1]a[n-1]-a[n-2]; b[n]a[n]-a[n-1]; 差分标记&#xff1a;b[l]k,b…

计算机网络chapter1——家庭作业

文章目录 复习题1.1节&#xff08;1&#xff09; “主机”和“端系统”之间有何不同&#xff1f;列举几种不同类型的端系统。web服务器是一种端系统吗&#xff1f;&#xff08;2&#xff09;协议一词常用来用来描述外交关系&#xff0c;维基百科是如何描述外交关系的&#xff1…

基于Springboot的校园悬赏任务平台(有报告)。Javaee项目,springboot项目。

演示视频&#xff1a; 基于Springboot的校园悬赏任务平台&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构…

Codigger:Web应用让开发者拥有更高效的开发之旅

在当今软件开发领域&#xff0c;Web应用以其跨平台、易访问和实时更新的特性&#xff0c;逐渐成为了主流的开发方向。从开发者的视角来看&#xff0c;Codigger借助B/S&#xff08;浏览器/服务器&#xff09;架构和云计算技术&#xff0c;为开发者带来了诸多便利和优势。这些优势…

【负载均衡式在线OJ项目day1】项目结构

一.功能 查看题目列表&#xff0c;在线编程&#xff0c;判题功能&#xff0c;即leetcode的部分功能 二.宏观结构 整个项目是BS模式&#xff0c;客户端是浏览器&#xff0c;和用户交互并向服务器发起请求。 服务端从功能上来说分为两个模块&#xff0c;第一个是OJServer&…

C++ 多态(一)

一、多态定义 同一种操作作用于不同的对象时&#xff0c;可以产生不同的行为。在面向对象编程中&#xff0c;多态性是指通过继承和重写实现的&#xff0c;同一个方法在不同的子类中可以表现出不同的行为。多态性可以提高代码的灵活性和可扩展性&#xff0c;使得程序更易于维护…

盘点企业信息防泄密软件对比|揭秘企业信息防泄密软件好用榜

在当今信息化社会&#xff0c;企业信息防泄密软件的需求日益凸显。这些软件不仅关乎企业的核心竞争力&#xff0c;更直接关系到企业的生死存亡。本文将对市面上几款主流的企业信息防泄密软件进行深入对比分析&#xff0c;以期为企业提供有益的参考。 一、企业信息防泄密软件好…

987: 输出用先序遍历创建的二叉树是否为完全二叉树的判定结果

解法&#xff1a; 一棵二叉树是完全二叉树的条件是&#xff1a; 对于任意一个结点&#xff0c;如果它有右子树而没有左子树&#xff0c;则这棵树不是完全二叉树。 如果一个结点有左子树但是没有右子树&#xff0c;则这个结点之后的所有结点都必须是叶子结点。 如果满足以上条…

docker学习笔记(三)搭建NFS服务实验

目录 什么是NFS 简单架构​编辑 一.搭建nfs服务器 二.新建共享目录和网页文件 三.设置共享目录 四&#xff1a;创建使用nfs共享目录的卷 五&#xff1a;创建容器使用nfs-web-1卷 六&#xff1a;测试访问 七&#xff1a;是否同步测试 什么是NFS NFS 服务器&#xff1a;ne…

webpack如何自定义一个loader

我们在使用脚手架的搭建项目的时候往往都会帮我们配置好所需的loader&#xff0c;接下来讲一下我们要如何自己写一个loader应用到项目中&#xff08;完整代码在最后&#xff09; 1. 首先搭建一个项目并找到webpack配置文件&#xff08;webpack.config.js&#xff09; 在modul…

95、动态规划-编辑距离

递归暴力解法 递归方法的基本思想是考虑最后一个字符的操作&#xff0c;然后根据这些操作递归处理子问题。 递归函数定义&#xff1a;定义一个递归函数 minDistance(i, j)&#xff0c;表示将 word1 的前 i 个字符转换成 word2 的前 j 个字符所需的最小操作数。 递归终止条件…