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, 默认是非受检查异常

在这里插入图片描述

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

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

相关文章

ssm115乐购游戏商城系统+vue

毕业生学历证明系统 设计与实现 内容摘要 如今社会上各行各业&#xff0c;都喜欢用自己行业的专属软件工作&#xff0c;互联网发展到这个时候&#xff0c;人们已经发现离不开了互联网。新技术的产生&#xff0c;往往能解决一些老技术的弊端问题。因为传统毕业生学历信息管理难…

【Linux系统】进程控制

再次理解进程 进程&#xff1a;内核的相关管理数据结构(task_struct(进程控制块PCB)&#xff0c;mm_struct(地址空间)&#xff0c;页表) 代码和数据 那么如何理解进程具有独立性&#xff1f; 我们之前已经学习过进程控制块啊&#xff0c;地址空间啊&#xff0c;页表啊&…

什么是期货?期货的基础知识有哪些?

期货是一种标准化的远期合约&#xff0c;允许买卖双方在未来特定时间以预定价格交易货物或金融资产。也是一种金融衍生品&#xff0c;它为市场参与者提供了一种管理价格波动风险和进行投资的工具。 期货的基础知识有哪些 期货市场是一个复杂的金融环境&#xff0c;对于初学者来…

程序猿敲代码费脑掉头发?来看看铁打的便捷,Baidu Comate智能代码助手

前言&#xff1a;Baidu Comate 前世今生 Baidu Comate 安装教程 官网安装教程 手动安装教程 登录使用 插件功能初体验 代码生成指令板块 简易代码生成 代码解释 代码补充 代码注释 多种类智能问答&知识集调用 Paddle团队官方知识集 前言&#xff1…

设计模式(2)——工厂方法模式

目录 1. 摘要 2. 需求案例(设计一个咖啡店的点餐系统) 2.1 咖啡父类及其子类 2.2 咖啡店类与咖啡类的关系 3. 普通方法实线咖啡店点餐系统 3.1 定义Coffee父类 3.2 定义美式咖啡类继承Coffee类 3.3 定义拿铁咖啡继承Coffee类 3.4 定义咖啡店类 3.5 编写测试类 4. 简…

影响视频视觉质量的因素——各类视觉伪影

模糊效应&#xff08;Blurring Artifact&#xff09; 图像模糊&#xff08;blurring&#xff09;&#xff1a;平滑图像的细节和边缘产生的现象&#xff0c;模糊对于图像来说&#xff0c;是一个低通滤波器&#xff08;low-pass filter&#xff09;。一般而言&#xff0c;用户更…

VisualGDB:Linux静态库项目创建、编译及库的使用

接上篇《VisualGDB&#xff1a;Linux动态库项目创建、编译及库的使用》&#xff0c;静态库的创建和使用与动态库基本无差别&#xff0c;唯一需要做的就是指定项目生成静态库。 一、指定项目生成静态库 二、重新构建和编译项目 这里注意&#xff0c;同样要copy一个libxxx.so格式…

服务器数据恢复—RAID5磁盘阵列两块盘离线的数据恢复过程

服务器故障&#xff1a; 服务器中有一组由多块硬盘组建的raid5磁盘阵列&#xff0c;服务器阵列中2块硬盘先后掉线导致服务器崩溃。 服务器数据恢复过程&#xff1a; 1、将故障服务器中所有磁盘编号后取出&#xff0c;由硬件工程师对掉线的两块磁盘进行物理故障检测&#xff0c…

Linux 文件

文章目录 文件操作回顾(C/C)系统调用接口 管理文件认识一切皆文件C/C的文件操作函数与系统调用接口的关系……重定向与缓冲区 -- 认识重定向与缓冲区 -- 理解使用重定向缓冲区实现一个简单的Shell(加上重定向)标准输出和标准错误(在重定向下的意义) 磁盘文件磁盘存储文件操作系…

聊天框 - 微信加载历史数据的效果原来这样实现的

原文&#xff1a;https://juejin.cn/post/7337114587123335180?searchId20240509192958AF7D129567F92AD7E083 公众号&#xff1a;程序员白特&#xff0c;欢迎一起交流学习~ 前言 我记得2021年的时候做过聊天功能&#xff0c;那时业务也只限微信小程序 那时候的心路历程是&am…

win7开启远程桌面却连接不上,如何解决Win7系统开启远程桌面但无法连接的问题

在使用Win7系统时&#xff0c;有时候我们可能会遇到这样的问题&#xff1a;已经成功开启了远程桌面功能&#xff0c;但尝试连接时却总是失败。这可能是由于多种原因导致的&#xff0c;下面我们将详细分析并提供相应的解决方案。 确保本地网络连接正常 可以尝试通过Ping命令测试…

【start和run的区别(面试题)及创建线程的五种写法】

线程 1.start和run的区别2.创建线程的五种写法1.继承Thread,重写run2.实现runnable&#xff0c;重写run3.继承Thread,重写run,使用匿名内部类4.实现Runnable,重写run,使用匿名内部类5.使用lambda表达式 1.start和run的区别 1.start方法内部&#xff0c;是会调用到系统api&…

MATLAB 三维空间中在两点之间等间隔插入多个点 (67)

MATLAB 三维空间中在两点之间等间隔插入多个点 (67) 一、算法介绍二、算法实现1.代码2.结果一、算法介绍 用于加密直线点云,具体为根据给定的直线端点,沿着该直线方向,插入多个点,从而加密。具体方法和效果如下所示: 二、算法实现 1.代码 代码如下(示例): % 定…

融知财经:期货在哪里可以交易?期货交易有哪些交易规则?

作为当前金融市场的一种投资方式&#xff0c;期货只适合一些投资者&#xff0c;比如想获得高收益的投资者&#xff0c;因为期货的风险系数很高。但是很多投资者还不知道期货的意思&#xff0c;在一个固定的交易场所&#xff0c;期货是买卖标准化商品或金融资产的远期合约的交易…

SAP sq01,sq02,sq03创建query报表

步骤&#xff1a;1&#xff0c;SQ03创建用户组&#xff08;User Group&#xff09; 2&#xff0c;SQ02创建信息集&#xff08;InfoSet&#xff09; 3&#xff0c;SQ03分配用户和InfoSet 4&#xff0c;SQ01创建查询 5&#xff0c;SE93给Query分配Tcode 1&#xff0c;SQ03创建用…

pikachu靶场搭建(保姆级,手把手教学)

&#xff08;phpstudy安装pikachu配置&#xff09; 1.下载phpstudy&#xff08;以Windows系统为例&#xff09; 下载地址&#xff1a;https://www.xp.cn/download.html 1.打开网址 2.点击立即下载 3.选择适合自己的版本 查看自己电脑版本&#xff1a; 打开设置找到系统点击…

effective python学习笔记_函数

函数返回值尽量不要超过三个 局限性&#xff1a;当返回参数过多时&#xff0c;有时会搞混哪个是哪个&#xff0c;可能返回的两个值反了 解决方法&#xff1a;如果参数过多&#xff0c;可以组装*变量返回&#xff0c;或者自定义轻量类型或namedtuple返回 有意外情况时尽量抛异…

Kubernetes容器技术详解

kubernetes Kubernetes&#xff08;K8s&#xff09;由Google打造&#xff0c;是一款功能强大、灵活可扩展的容器编排平台&#xff0c;引领云原生技术潮流。 Kubernetes主要解决以下4大点&#xff1a; 1.自动化运维平台 如下图所示&#xff1a; Kubernetes携手Docker&#xf…

2024牛客五一集训派对day2 Groundhog Looking Dowdy 个人解题思路

前言&#xff1a; 被实验室教练要求要打的这次五一牛客的训练赛&#xff0c;这些区域赛难度的题对于大一的我来说难度实在是太高了&#xff0c;我和我的队友只写了一些非常简单的签到题&#xff0c;其他题目都没怎么看&#xff08;我们太弱了&#xff09;&#xff0c;但我可以分…