Java基础知识

本文深入讲解Java的基础知识,包括Java的三大版本、JDK、JRE、JVM的区别与联系,内存分配机制,三大特性(封装、继承、多态),类型转换,==与equals()的使用,静态导入包,代码块执行顺序,异常处理等内容,帮助读者全面理解Java的核心概念。

Java基础知识

1.Java三大版本

1.1JavaSE:标准版

​ 主要应用于桌面应用软件的编程。

1.2. JavaME:微型版

​ 主要应用于嵌入式系统开发,如机顶盒、移动电话和PDA之类嵌入式消费电子设备。

1.3. JavaEE:企业版

   主要应用于分布式的网络程序的开发,web端,服务器开发

2.JDK,JRE,JVM

2.1.JDK

​ JDK(Java Development Kit),java开发工具集,在JDK的安装目录下有一个jre目录,里面有两个文件夹bin和lib,在这里可以 认为bin里的就是jvm,lib中则是jvm工作所需要的类库,而jvm和 lib合起来就称为jre。

2.2.JRE

​ JRE(Java Runtime Environment,Java运行环境),JRE是Java运行环境,并不是一个开发环境,所以没有包含任何开发工具 (如编译器和调试器)。

2.3.JVM

​ JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在 实际的计算机上仿真模拟各种计算机功能来实现的。

2.4.三者联系

在这里插入图片描述

3.内存分析

在这里插入图片描述

3.1.栈

​ 1.每个线程包含一个栈区,栈中只保存基本数据类型的数据和自定义对象的引用(不是对象),对象都存放在堆区中。
​ 2.每个栈中的数据(原始类型和对象引用)都是私有的,其他栈不能访问。
​ 3.栈分为3个部分:基本数据类型的变量区、执行环境上下文、操作指令区(存放操作指令)。

3.2.堆

​ 类的对象放在heap(堆)中,所有的类对象都是通过new方法创建,创建后,在stack(栈)会创建类对象的引用(内存地址)。

3.3.方法区

​ 1.又叫静态区,跟堆一样,被所有的线程共享。

​ 2.方法区中存放的都是在整个程序中永远唯一的元素。这也是方法区被所有的线程共享的原因。

方法区保存的就是一个类的模板,堆是放类的实例(即对象)的。栈是一般来用来函数计算的。

在这里插入图片描述

4.Java三大特性

4.1.封装

​ 封装(Encapsulation)是面向对象方法的重要原则,就是把对象的属性和操作(或服务)结合为一个独立的整体,并尽可能隐藏 对象的内部实现细节。

​ 1.需要修改属性的访问控制符(修改为private);
​ 2 创建getter/setter方法(用于属性的读写);
​ 3 在getter/setter方法中加入属性控制语句(用于判断属性值的合法性)。

4.2.继承

​ 一个对象的实际类型是确定的,可以指向的引用类型就不确定了:父类的引用指向子类。

引用类型:除了基本数据类型,其他的类型都是引用类型。

​ 子类能调用的方法都是自己的或者继承父类的。

​ 父类型可以指向子类型,但是不能调用子类独有的方法。

​ 对象能执行哪些方法,主要看主要看对象左边的类型,和右边的关系不大。

Father f1=new Son();   //Father为父类,Son为子类
//父类中有一个show1方法
//子类中有一个独有的show2方法
((Son) f1).show2();   //对象想要调用子类独有的方法需要强制转换为子类型。

4.3.多态

​ 1.即同一个方法可以根据发送对象的不同而采用多种不同的行为方式。

​ 2.一个对象的实际类型是确定的,但是可以指向对象的引用类型有很多。

​ 3.多态存在的条件

​ A.有继承关系时

​ B.子类重写父类方法

​ C.父类引用指向子类对象

多态是方法的多态,属性没有多态性

5.类型转换

​ 1.类型之间的转换:父 子

​ 2.子类转换为父类可能会丢失自己本来的一些方法

​ 3.向上转型:子类转换到父类

​ 4.向下转型:父类转换为子类,有时需要用到强制转换调用一些子类独有的方法。

6.“==”与equals()的比较

==

  • 他的作用是判断两个对象的地址是不是相等,也就是判断两个地址是不是同一个对象。(基本数据类型比较的是值,引用数据类型==比较的是内存地址
  • 因为java的只有值传递,所有对于==来说,不管是比较基本数据类型,还是引用数据类型的变量,本质上比较的是值,只是引用数据类型变量存的值是对象的地址。

equals

  • 他的作用是判断两个对象是否相等,它不能用于比较基本数据类型的变量。equals()方法存在object类中,而object类是所有类的直接或者间接父类。

equals()方法存在两种使用情况:

  • 情况 1:类没有覆盖 equals()方法。则通过equals()比较该类的两个对象时,等价于通过“==”比较这两个对象。使用的默认是 Object类equals()方法。
  • 情况 2:类覆盖了 equals()方法。一般,我们都覆盖 equals()方法来两个对象的内容相等;若它们的内容相等,则返回 true(即,认为这两个对象相等)。

String 中的 equals方法是被重写过的,因为 Object 的 equals方法是比较的对象的内存地址,而 String的equals方法比较的是对象的值。

7.静态导入包

import static java.lang.Math.random  //导入包
 /*使用了静态导入包
 当需要用到这些包下的方法时,可以直接用方法名调用
 如
 */
  rando();
//就可以直接调用random方法

8.代码块

public class Test{
    {
        //匿名代码块
    }
    
    static{  //只执行一次
        //静态代码块
    }
}
//执行顺序 先静态代码块 再匿名代码块,最后构造方法

9.异常

在这里插入图片描述

1.Throwable: 有两个重要的子类:Exception(异常)和 Error(错误),二者都是 Java 异常处理的重要子类,各自都包含大量子 类。异常和错误的区别是:异常能被程序本身可以处理,错误是无法处理。

2.Error(错误):是程序无法处理的错误,表示运行应用程序中较严重问题。大多数错误与代码编写者执行的操作无关,而表示代码运行时 JVM(Java 虚拟机)出现的问题。

3.Exception(异常:是程序本身可以处理的异常。

1.运行时异常:都是RuntimeException类及其子类异常,这些异常是不检查异常,程序中可以选择捕获处理,也可以不处理。这些异 常一般是由程序逻辑错误引起的,程序应该从逻辑角度尽可能避免这类异常的发生。运行时异常的特点是Java编译器不会检查它,也就 是说,当程序中可能出现这类异常,即使没有用try-catch语句捕获它,也没有用throws子句声明抛出它,也会编译通过。
2.非运行时异常 (编译异常):是RuntimeException以外的异常,类型上都属于Exception类及其子类。从程序语法角度讲是必须进 行处理的异常,如果不处理,程序就不能编译通过。如IOException、SQLException等以及用户自定义的Exception异常,一般情况下 不自定义检查异常。

4.常见的异常:
1. RuntimeException子类:

​ ArrayIndexOutOfBoundsException:数组索引越界异常。当对数组的索引值为负数或大于等于数组大小时抛出。

​ NullPointerException:空指针异常。

​ NegativeArraySizeException:数组长度为负异常

​ ArithmeticException :算术条件异常。譬如:整数除零等。

​ IllegalArgumentException:非法参数异常

​ ArrayStoreException :数组中包含不兼容的值抛出的异常 。

2.IOException

​ IOException:操作输入流和输出流时可能出现的异常

​ FileNotFoundException:文件未找到异常

​ EOFException:文件已结束异常

3. 其他

​ ClassCastException: 类型转换异常类

​ ArrayStoreException: 数组中包含不兼容的值抛出的异常

​ SQLException: 操作数据库异常类

​ NoSuchFieldException:字段未找到异常

​ NoSuchMethodException:方法未找到抛出的异常

​ StringIndexOutOfBoundsException:字符串索引超出范围抛出的异常

​ NumberFormatException:字符串转换为数字抛出的异常

​ ClassNotFoundException:找不到类异常。

4. 捕获异常:try、catch 和 finally

1.try-catch语句

//假设要捕获多个异常,类型从小到大
try {
    // 可能会发生异常的程序代码
} catch (Exception e){
    // 捕获并处置try抛出的异常
}
catch (Throwable t){
     //捕获并处置try抛出的异常类型
}

try{
    System.out.println(a/b);
}catch(ArithmeticException e){
    System.out.println("变量b不能为0");
}

2.throw

if(b==0){
    throw new ArithmeticException();   //主动抛出异常
}
System.out.println(a/b);

3.throws

public void test(int a,int b) throws ArithmeticException{  //假设这个方法中处理不了这个异常,方法上抛出异常
	if(b==0){
      throw new ArithmeticException();    //主动抛出的异常,一般在方法中使用
	}
}
AI 代码审查Review工具 是一个旨在自动化代码审查流程的工具。它通过集成版本控制系统(如 GitHub 和 GitLab)的 Webhook,利用大型语言模型(LLM)对代码变更进行分析,并将审查意见反馈到相应的 Pull Request 或 Merge Request 中。此外,它还支持将审查结果通知到企业微信等通讯工具。 一个基于 LLM 的自动化代码审查助手。通过 GitHub/GitLab Webhook 监听 PR/MR 变更,调用 AI 分析代码,并将审查意见自动评论到 PR/MR,同时支持多种通知渠道。 主要功能 多平台支持: 集成 GitHub 和 GitLab Webhook,监听 Pull Request / Merge Request 事件。 智能审查模式: 详细审查 (/github_webhook, /gitlab_webhook): AI 对每个变更文件进行分析,旨在找出具体问题。审查意见会以结构化的形式(例如,定位到特定代码行、问题分类、严重程度、分析和建议)逐条评论到 PR/MR。AI 模型会输出 JSON 格式的分析结果,系统再将其转换为多条独立的评论。 通用审查 (/github_webhook_general, /gitlab_webhook_general): AI 对每个变更文件进行整体性分析,并为每个文件生成一个 Markdown 格式的总结性评论。 自动化流程: 自动将 AI 审查意见(详细模式下为多条,通用模式下为每个文件一条)发布到 PR/MR。 在所有文件审查完毕后,自动在 PR/MR 中发布一条总结性评论。 即便 AI 未发现任何值得报告的问题,也会发布相应的友好提示和总结评论。 异步处理审查任务,快速响应 Webhook。 通过 Redis 防止对同一 Commit 的重复审查。 灵活配置: 通过环境变量设置基
【直流微电网】径向直流微电网的状态空间建模与线性化:一种耦合DC-DC变换器状态空间平均模型的方法 (Matlab代码实现)内容概要:本文介绍了径向直流微电网的状态空间建模与线性化方法,重点提出了一种基于耦合DC-DC变换器的状态空间平均模型的建模策略。该方法通过数学建模手段对直流微电网系统进行精确的状态空间描述,并对其进行线性化处理,以便于系统稳定性分析与控制器设计。文中结合Matlab代码实现,展示了建模与仿真过程,有助于研究人员理解和复现相关技术,推动直流微电网系统的动态性能研究与工程应用。; 适合人群:具备电力电子、电力系统或自动化等相关背景,熟悉Matlab/Simulink仿真工具,从事新能源、微电网或智能电网研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①掌握直流微电网的动态建模方法;②学习DC-DC变换器在耦合条件下的状态空间平均建模技巧;③实现系统的线性化分析并支持后续控制器设计(如电压稳定控制、功率分配等);④为科研论文撰写、项目仿真验证提供技术支持与代码参考。; 阅读建议:建议读者结合Matlab代码逐步实践建模流程,重点关注状态变量选取、平均化处理和线性化推导过程,同时可扩展应用于更复杂的直流微电网拓扑结构中,提升系统分析与设计能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值