Java语言基础(上)

news2024/11/23 19:57:19

Java 语言的特点

  • 面对对象:Java 中所有的数据和方法都封装在对象
  • 跨平台性:Java 通过 Java 虚拟机,可以在不同的操作系统上运行相同的程序
  • 自动内存管理:Java 提供垃圾回收机制,不需要手动管理内存
  • 强类型语言:Java 编译器在编译时会进行类型检查
  • 多线程支持:Java 语言支持多线程
  • 异常处理:Java 使用异常处理机制来处理运行时错误

JVM JDK JRE

  • JVMJava 虚拟机,使 Java 程序在不同平台运行,JVM 将 Java 程序编译后的字节码文件,然后解释成机器码执行。
  • JDKJava 开发工具包,包括 JRE、开发工具和 Java 类库
  • JRE:JRE 是 Java 运行时环境,包括 JVM 和基本类库,没有开发工具

什么是跨平台性?原理是什么?

  • 跨平台性:程序一次编译,不需要修改,就可以在不同的系统运行
  • 原理:JVM 将 Java 程序编译后的字节码文件解释成机器码执行,JVM 针对不同的系统有不同的实现

什么是字节码?采用字节码的好处是什么?

  • 字节码是 Java 程序编译后生成的.class 文件,在 JVM 上运行
  • 好处:
    • 实现 Java 程序的平台无关性
    • 生成字节码文件的编译过程比直接解释执行速度快
    • 字节码相比于机器码,更容易维护和调试

Java 和 C++ 的区别?

  • 面对对象:Java 是面对对象的语言;C++ 支持面对对象,也有面对过程编程
  • 内存管理:Java 使用垃圾回收机制自动管理内存;C++ 需要手动管理内存
  • 跨平台性:Java 具有跨平台性;C++ 移植性差
  • 异常处理:Java 使用异常处理机制,强制处理异常情况;C++ 不强制

注释?

  • 单行注释
  • 多行注释
  • 文档注释

关键字

  • 基本类型:int; long; short; byte; char; float; double; boolean
  • 程序控制:break; contine; return; instanceof; default
  • 访问控制:private; protected; public
  • 类、方法:abstract; class; extends; final; implements; interface; native; new; static; synchronized; transient; volatile
  • 错误处理:try-catch; throw; throws
  • 包相关:import; package
  • 变量引用:super; this; void

关键字 instanceof

  • 检验是否是类对象

类型转换

  • 子类到父类的转换(向上转型):通常用来实现多态性,通过父类引用来调用子类对象的方法,实现方法的动态绑定
  • 父类到子类的转换(向下转型):强制类型转换,可能出现 ClassCastException 异常,需要使用 instanceof 关键字

关键字 this 和 super

  • this: 引用当前对象
  • super:引用父类对象

关键字 final finally finalize?

  • final:用来修饰不可变的实体,例如类、方法、变量等
  • finally:用于定义在异常处理中,无论是否发生异常,finall 中的代码一定会执行;通常用于释放资源
  • finalize:Object 类的方法,用于对象被垃圾回收前进行释放资源
    但由于 JVM 的垃圾回收是不确定的。finalize 不一定能有效回收对象资源;
    推荐使用 try-with-resource 方法

自增自减运算符

  • 前缀:先加减,后返回值 ++i
  • 后缀:先返回值,然后加减 i++

continue、break 和 return 区别?

  • contine:跳出当前循环,进行下一次循环
  • break:跳出整个循环体
  • return结束方法,并返回值

变量按照数据类型的分类?

  • 基本数据类型
    • 数值型:byte; int; short; long
    • 浮点型:float; double
    • 字符型:char
    • 布尔型:boolean
  • 引用数据类型
    • 类:class
    • 接口:interface
    • 数组:array

讲讲数组的声明?

要使用 Java 数组,分为两个步骤:声明数组分配内存

  • 数组声明后在栈内存中保存数组的名称
  • 然后在堆内存中分配数组所需要的内存
数据类型 数组名[] = null; //声明一维数组
数据名 = new 数据类型[长度]; //分配内存给数组
int array[] = null;
array = new int[5];

变量按照声明位置的分类?

  • 类变量:定义在中,使用 static 修饰,类变量在内存中只有一份
  • 实例变量:定义在中,属于类对象
  • 局部变量:定义在方法代码块

成员变量和局部变量?

  • 成员变量
    • 也称实例变量
    • 定义在类中方法体外,作用域是整个,存储在堆内存
    • 默认值
    • 可以用访问权限控制修饰符修饰
  • 局部变量
    • 定义在方法或代码块中,作用域是所在的方法或代码块中,存储在栈内存
    • 必须显式赋值
    • 只能在方法或代码块中使用,不需要访问修饰符

静态变量?

  • 也称类变量
  • 是指在类中使用 static 关键字定义的变量,属于,不属于类的任何一个对象
  • 在类加载的时候就被初始化了,存储在静态存储区,不在堆内存中
  • 在整个程序执行期间只有一份拷贝,被所有实例对象共享使用

字符型常量和字符串常量的区别?

  • 数据类型不同:
    • 字符型常量是 char 类型,表示单个字符
    • 字符串常量是 String 类型,表示多个字符组成的字符串
  • 表示形式不同:
    • 字符型常量用单引号引起来
    • 字符串常量是双引号引来的 0 个或者若干字符
  • 占内存空间不同:
    • 字符型常量占 2 个字节
    • 字符串常量占若干个字节
  • 比较方式不同:
    • 字符型常量可以使用==运算符进行比较,比较两个字符的 Unicode 编码
    • 字符串常量使用则是比较两个字符串对象的引用地址,通常使用 equal() 方法比较两个字符串的内容是否相同

方法的返回值?方法的类型?

  • 返回值:方法体执行后产生的结果
  • 方法的类型:按照是否有形参及返回值可以组合为四种

静态方法为什么不能调用非静态成员?

  • 静态方法属于在类加载的时候就会初始化,可以直接通过类名直接访问
  • 非静态成员属于实例对象,只有在对象实例化后才存在,需要通过类的对象去访问
  • 所以,非静态成员不存在时,静态方法去内存调用,属于非法操作

静态方法和实例方法?

  • 静态方法属于,通常使用类名.方法名方式访问
  • 实例方法属于对象,通过对象.方法名访问
  • 静态方法,只能调用静态成员,不能访问实例方法

重写和重载?

  • 重写:子类继承父类,重新实现父类的方法,方法名、参数列表和返回值必须和父类的方法相同
  • 重载:重载就是方法名称相同,但参数的类型和参数的个数不同。通过传递参数的个数和类型的不同可以完成不同功能的方法调用

基本类型和包装类型?

  • 基本类型: Java 中最基本的数据类型,包括 boolean,byte,int,long,short,float,double,char
  • 包装类型:将基本类型包装成一个对象的类,包括 Boolean,Byte,Integer,Long,Short,Float,Double,Character

基本类型和包装类型的不同?

  • 包装类型是引用类型,需要使用 new 创建对象,且包装类型不可变;而基本类型是值类型,不需要创建对象
  • 基本类型有默认值,成员变量的包装类型不赋值就是 null
  • 在泛型、反射中,只能使用包装类型,不能使用基本类型

自动装箱与拆箱?

  • 自动装箱:将基本类型值转换为对应的包装类型实例 valueOf()
    Integer i = 10; //等价于 Integer i = Integer.valueof(i);
  • 自动拆箱:将包装类型实例转换为对应的基本类型值 intValue()
    int n = i;//等价于 int n = i.intValue();

包装类型的缓存机制?

  • 类初始化时,提前为常见范围内的数创建了一个缓存数组
  • 例如 Integer 类型,Java 会在缓存数组中创建 -128~127 的所有整数的对象
    如果通过 valueOf() 方法传入这个范围内的整数,就会直接返回缓存中的对象,而不是创建一个新的对象
    这样就避免了频繁创建和销毁对象,提高了程序的性能
  • 对于超出缓存范围的数值,valueOf() 方法依然会创建新的对象

为什么浮点数会有精度丢失的风险?

  • 浮点数在计算机中是通过二进制小数来表示的
  • 但有一些小数无法准确用有限个二进制位来表示,这种情况就会出现精度丢失的问题

如何解决浮点数运算的精度丢失?

  • 使用 BigDecimal 类
  • 在比较浮点数是否相等时,避免直接使用 “==” 运算符

超过 long 整型的数据如何表示?

  • 使用 BigInteger 类

对象实例和对象引用有什么不同?

  • 对象实例:是一个具体的实体,在内存中有对应的存储空间。对象实例通常是根据来创建的,一个类可以 new 关键字创建多个对象实例
  • 对象引用:是一个指针,指向内存中实际的对象实例。存储的是对象在内存中地址
  • 对象实例的声明周期由 JVM 垃圾回收机制管理,对象引用声明周期由程序控制

对象的相等和引用相等的区别?

  • 对象的相等:内存中存放的内容是否相等
  • 引用相等:指向的内存地址是否相等

构造方法有哪些特点?是否可以被 override?

构造方法是一种特殊的方法,用于创建和初始化对象,具有以下特点:

  • 构造方法的名字必须和类名相同
  • 没有返回值类型
  • 如果没有显示定义构造方法,Java 会默认提供一个无参的构造方法
  • 构造方法在对象被创建的时候自动调用,不能手动调用
  • 不能被重写,如果子类需要增加属性或方法,可以使用 super() 来调用父类的构造方法,在子类的构造方法中添加新的代码

JavaBean?

  • JavaBean 是一种特殊的 Java 类,遵循一定的规范,可以被多种工具和框架使用
  • JavaBean 主要用于简化 Java 对象的创建和管理,同时提供标准化的方式来访问 Java 对象的属性

JavaBean 要求

  • 所有的属性都是私有
  • 有一个无参的构造方法
  • 有 get 和 set 方法

深拷贝 浅拷贝 引用拷贝?

  • 深拷贝
    将被复制对象完全复制一份,即在内存中重新开辟一个地址存放新对象,并且新对象和原对象没有任何关系
    修改新对象不会影响原对象

  • 浅拷贝
    拷贝对象和原对象的引用类型引用同一个对象,即在内存中开辟新空间存储一个新对象,并且这个新对象与原对象共享内存中的属性值
    即修改一个对象的属性值,另一个对象的属性值也会发生改变

  • 引用拷贝
    将被复制对象的引用地址直接复制给一个新的对象,指向同一个内存空间
    修改其中一个对象的属性值,另一个对象的属性值也会发生改变
    image-20230316163736669

Object 类的方法?

  • getClass():返回当前运行时对象的 Class 对象
  • hashCode():返回对象的哈希码
  • equals():比较对象的内存地址是否相等
  • clone():创建并返回当前对象的一份拷贝
  • toString():返回对象的字符串表示
  • notify():唤醒一个在对象监视器上等待的线程
  • notifyAll():唤醒对象监视器上等待的所有线程
  • wait()暂停线程的执行
  • finalize():实例被垃圾回收器回收时触发的操作

==和 equals() 的区别?

  • ==运算符:用于比较两个对象引用是否指向同一个对象
    如果两个对象的物理地址相同,则相同
  • equals() :用于比较两个对象的内容是否相等
    默认情况下,比较的是两个对象的物理地址,但可以通过重写来比较两个对象的内容是否相同
    在重写 equals 方法时,通常还需要重写 hashCode() 方法

接口和抽象类

接口的方法不可以有实现,并且是绝对的抽象方法。抽象类可以有实例方法用来实现默认行为
接口用来定义契约行为,也可作为两个系统间的契约进行交互
而抽象类主要用来为子类定义默认行为,也就是说所有的继承子类都需要运行相同的功能

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ElasticSearch7.x - HTTP 操作 - 索引操作

创建索引 对比关系型数据库,创建索引就等同于创建数据库 在 Postman 中,向 ES 服务器发 PUT 请求 :http://192.168.254.101:9200/shopping 说明 {"acknowledged"【响应结果】: true, # true 操作成功"shards_acknowledged"【分片结果】: true, # 分片操…

亚数受邀参加“长三角G60科创走廊量子密码应用创新联盟(中心)”启动仪式

11月8日,在第六届中国国际进口博览会2023长三角G60科创走廊高质量发展要素对接大会上,亚数信息科技(上海)有限公司CEO翟新元作为密码企业代表之一受邀参加“长三角G60科创走廊量子密码应用创新联盟(中心)”…

【手动创建UIWindow Objective-C语言】

一、上节课,我们讲了控制器View的懒加载: 1.什么时候会调用这个懒加载呢,用我们直接,控制器self.view self.view的时候: 什么时候,调用它这个self.view, 就要去加载控制器的view, self.view 加载控制器的view 我们给大家演示过了,这个大家已经清楚了,我们给大家说…

2023年A股借壳上市研究报告

第一章 借壳上市概况 1.1 定义 借壳上市作为一种独特的资本市场操作手法,历来是企业拓展融资渠道和实现市场战略目标的重要途径。具体来说,借壳上市可分为狭义与广义两种模式。在狭义的定义下,借壳上市是指一家已上市的公司的控股母公司&am…

vivo 数据库降本实践:探索成本效益最优的数据库解决方案

vivo 自 2022 年开始调研、测试 OceanBase 至今,现已上线 17 个业务系统,涵盖日志类、分析类、交易类业务,实现了总资源节省 80%,开发、运维工作大幅简化。vivo 体系与流程 IT 部门数据库高级工程师廖光明在本文中,详细…

利用MSF设置代理

1、介绍: 通过MSF拿到一个机器的权限后,通过MSF搭建socks代理,然后通内网。 拿到目标权限,有很多方法,比如:①ms17-010 ②补丁漏洞 ③MSF生成后门 在此直接使用MSF生成后门 MSF中有三个代理模块&#x…

【Kurbernetes部署】知识点总结(部署方式、网络插件.....)

知识点合集 一、Kurbernetes常见的部署方式1.1 Minikube(一般不用)1.2 Kubeadm1.3 二进制安装部署(推荐使用的方式) 二、二进制部署Kurbetnetes的思路Step1 部署etcdStep2 部署master组件Step3 部署node组件Step4 部署多master高可…

leetcode:160. 相交链表

一、题目 原题链接:160. 相交链表 - 力扣(LeetCode) 函数原型: struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB) 二、思路 判断两个链表是否相交,只要判断两个链表是否有相同的…

3 分钟看完 NVIDIA GPU 架构及演进

近期随着 AI 市场的爆发式增长,作为 AI 背后技术的核心之一 GPU(图形处理器)的价格也水涨船高。GPU 在人工智能中发挥着巨大的重要,特别是在计算和数据处理方面。目前生产 GPU 主流厂商其实并不多,主要就是 NVIDIA、AM…

利用IP风险画像强化金融行业网络安全防御

在数字化时代,金融行业日益依赖互联网和技术创新,但这也使得金融机构成为网络攻击的主要目标。为了应对日益复杂的网络威胁,金融机构迫切需要采用先进的安全技术和工具。其中,IP风险画像技术成为提升网络安全的一项重要策略。 1.…

深度学习检测小目标常用方法

前言 在深度学习目标检测中,特别是人脸检测中,小目标、小人脸的检测由于分辨率低,图片模糊,信息少,噪音多,所以一直是一个实际且常见的困难问题。不过在这几年的发展中,也涌现了一些提高小目标…

国家数据局正式揭牌,2030年数据要素市场规模或破万亿

10月25日,国家数据局正式挂牌! 自今年3月国务院通过《党和国家机构改革方案》提出组建国家数据局以来,国家数据局的组建工作一直在紧锣密鼓地进行中。经过7个月的筹备工作,国家数据局于2023年10月25日挂牌成立。 根据《党和国家机…

使用Dockerfile依赖maven基础镜像部署springboot的程序案例

1、准备springboot Demo代码 就一个controller层代码,返回当前时间及hello world 2、项目根目录下,新建DockerFile文件 注意,等本地配置完毕后,Dockerfile文件需要与项目helloworld同级,这里先放项目里面 3、docker …

从零开始搭建React+TypeScript+webpack开发环境-基于lerna的webpack项目工程化改造

项目背景 在实际项目中,我们的前端项目往往是一个大型的Webpack项目,结构较为复杂。项目根目录下包含了各种配置文件、源代码、以及静态资源,整体布局相对扁平。Webpack的配置文件分散在不同的部分,包括入口文件、输出目录、加载…

【JMeter】组件之 Listener监听器选择

JMeter中监听器的作用就是收集、显示JMeter取样器的结果,并以树形、图表、表格的形式显示出来。还可以将监听结果保存成文件。 View Results Tree-->察看结果树 Summary Report-->汇总报告 为测试中的每个不同命名的请求创建一行。这与聚合报告类似&#xff…

【扩散模型】实战:创建一个类别条件扩散模型

创建一个类别条件扩散模型 1. 配置和数据准备2. 创建一个以类别为条件的UNet模型3. 训练和采样 本文介绍一种给扩散模型添加额外条件信息的方法。具体地,将在MNIST数据集上训练一个以类别为条件的扩散模型。并且可以在推理阶段指定想要生成的是哪个数字。 1. 配置和…

Conda executable is not found 三种问题解决

如果在PyCharm中配置Python解释器时显示“conda executable is not found”错误消息,这意味着PyCharm无法找到您的Conda可执行文件。您可以按照以下步骤解决此问题: 1.方法一 确认Conda已正确安装。请确保您已经正确安装了Anaconda或Miniconda&#xff…

数字化工厂管理系统的三个关键技术是什么

随着科技的飞速发展,数字化工厂管理系统已经成为了现代制造业的重要发展方向。数字化工厂管理系统通过充分运用建模技术、仿真技术和单一数据源技术,实现了产品设计和生产的虚拟化,为制造业带来了前所未有的效率和创新能力。本文将深入探讨这…

Matlab的多项式留数与极点的计算

Matlab的多项式留数与极点的计算 以下面的多项式为例: 运算代码: clc clear closesyms p % 定义多项式 Zp(5*p^571*p^370*p)/(2*p^635*p^4117*p^236); % 提取分子与分母 [I,D]numden(Zp); Idouble(coeffs(I,p,"All"));%分子 Ddouble(coeffs…

轻量日志管理方案-[EFK]

使用FileBeat进行日志文件的数据收集,并发送到ES进行存储,最后Kibana进行查看展示; 这个应该是最简单,轻量的日志收集方案了。 最总方案为:FileBeatESKibana ; 【Kibana过于强大,感觉可以无限扩展】 文章目…