javase(Java基础)总结一

本文详细介绍了Java基础,包括JDK、JRE、JVM的区别,环境变量配置,垃圾回收机制。接着讲解了标识符和关键字的规则,变量的使用,数据类型的细节,特别是BigDecimal类的应用。还涵盖了控制语句、方法的重载与重写,以及面向对象编程的基础概念。最后探讨了封装、继承、多态,以及this、super和static的用法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、java开发环境搭建

1.1、JDK、JRE、JVM

  • JDK:java的软件开发工具包,包括了JRE和JVM。
  • JRE:java程序运行环境的集合,包括了jvm。含有java的核心类库
  • JVM:java虚拟机,java程序跨平台的实现就是靠JVM实现的,通过在不同操作系统中安装不同的JVM可以使得同一份代码程序在不同的操作系统上运行,且编译好的程序移到别到操作系统上可以直接运行,无需重新编译。

1.2、环境变量

  • 没有配置环境变量是没有办法在dos窗口的任意路径下运行javac.exe和java.exe程序的,也就编译和运行java程序

  • dos窗口在当前目录下找不到javac.exe和java.exe程序则根据环境变量配置的路径寻找

  • 只要配置环境变量,dos窗口中的任何路径下都能够编译和运行java程序

  • CLASSPARTH环境变量属于Java语言,专门给类加载器指路的,寻找class文件。“.”表示当前目录下,若配置该环境变量应当将“.”加上

1.3、GC机制

  • 自动垃圾回收机制
  • java会启动一个单独的垃圾回收线程,时刻监视内存情况

2、标识符与关键字

2.1、标识符

  1. 标识符命名格则
    • 类名、接口名、方法、语句块、变量、常量 都是标识符
    • 标识符由字母、数字、下划线、美元符号组成,不能以数字开头
    • 区分大小写,不能使用保留字和关键字做标识符
  2. 标识符命名规范(约定并非规则,不遵守程序也没问题)
    • 类、接口:每个单词首字母大写
    • 方法、变量:首字母小写,后面每个单词首字母大写
    • 常量:每个字母大写,单词之间用下划线分割

2.2、关键字

  • java的关键字对java的编译有特殊意义
byteshortintlongfloat
doublebooleanchariffor
elsewhiledocontinuebreak
publicdefaultprotectedprivatethrow
throwstrycatchfinalfinally
caseswitchtransientpackagenew
staticthisabstractstrictfpnativ
gotosuperextendsimplementsimport
instanceofreturnsynchronizedvoidconst
classenumassertinterfacevolatile

公开类的类名需和文件名一致

3、变量

  • 变量是内存当中的一块空间,这块空间有名字、类型和数据(变量名、数据类型和存储数据)
  • 不同的数据类型会分配不同大小的内存
  1. 局部变量
    • 只在方法体中有效
    • 方法开始执行时会为其分配内存,结束的时候就会释放内存
  2. 成员变量
    • 实例变量
      • 实例化的变量,每个对象的实例变量所在的内存位置不同
      • 在对象创建的时候会给实例变量赋值,若没指定特定值,先默认赋值0、null、false…
    • 静态变量:类加载的时候初始化,存储在方法区内存中,只有一份内存空间

4、数据类型

4.1、基本数据类型

数据类型内存大小
byte1一个字节 [-27 ~ 27-1]
short2个字节 [-215 ~ 215-1]
int4个字节 [-231 ~ 231-1]
long8个字节 [-263 ~ 263-1]
float4个字节 [-231 ~ 231-1]
double8个字节 [-263 ~ 263-1]
char2个字节 [0 ~ 216-1]
boolean1个字节 [true、false]

4.2、BigDecimal类

  • 精度超高,适合财务数据的存储

4.3、基本数据类型转换

  1. 自动类型转换
    • 小容量会自动向大容量数据类型转换
  2. 强制类型转换
    • 大容量向小容量进行数据类型转换需要使用强制类型转换
    • 强制类型转换有可能损失精度,所以需要手动添加强制类型转换符
  • 整数型字面量会被当作int类型处理
  • 要给long类型复制时需要使用(数字后面添加L),若字面量大于整形一定要添加(L)
  • 需要赋值为float类型时使用(F)
  • 当整数字面量没有超过byte、short、char的取值范围时,可直接赋值
  • 除boolean类型外的基本数据类型都可以进行类型转换
  • cahr没有负数,所以可以取得的更大的整数
  • byte、short、char在运算时会转成int类型进行运算
  • 多种数据类型进行混合运算时,各自会转成容量最大的那一种类型

5、控制语句

  • case穿透现象:匹配的分支中没有使用break,会直接进入下一个分支执行(不再匹配),直到遇到break或所有分支执行完毕
  • do…while()语句先执行后判断,用于需要先执行一次再进行循环的程序
  • default可以写在switch中的任何位置,只有其他分支都没匹配上才会执行

6、方法

6.1、方法重载

  • 在同一类体中,具有相同的方法名,不同的参数列表的多个方法
    • 参数个数不同
    • 参数类型不同
    • 参数顺序不同

6.2、方法重写(方法覆盖)

  • 具有父子继承关系之间
  • 具有相同的返回值
  • 具有相同的方法名
  • 具有相同的参数列表
  • 不能继承的方法无法覆盖,如父类的私有方法,构造方法
  • 不能比父类中的方法的访问权限更低
  • 不能比父类中的方法抛出更宽泛的异常
  • 静态方法没有覆盖的必要,方法覆盖能满足多态机制,但静态方法实现不了多态

7、面向对象

7.1、面向对象的理解

  • 面向对象将对象当作程序的基本单元
  • 面向对象将程序和数据封装其中,以提高软件的重用性、灵活性和扩展性
  • OOA:面向对象分析
  • OOD:面向对象设计
  • OOP:面向对象编程
  • 耦合性低、易维护
  • 类是一个模板,描述了一类对象的行为和动作
  • 对象是类的一个实体,具有具体的状态和行为

7.2、对象的创建

  • 通过构造方法完成对象的创建
  • 对象创建后存储在堆内存中
  • 创建对象时,实例变量会先进行赋值操作,没有给定特定值就会赋默认值(0、null、false…)

7.3、内存分配及各区域存储的内容

    • 被调用的方法
    • 局部变量
  1. 方法区
    • 类信息
    • 常量
    • 静态代码块
    • 字符串
    • -128~127
    • 对象

8、封装

  • 隐藏内部结构,对外提供接口供其访问
  • 封装后形成独立实体,能在不同环境中被重复调用
  • 降低耦合度、提高扩展性,增加代码的复用性
  • 进行安全控制,保障内部数据的安全

9、继承

  • 避免代码的重复,增加代码的复用性,且易于维护
  • 构造方法和私有方法无法被继承
  • 父类发生改变会对子类产生影响,耦合度高

10、多态

  • 向上转型➡子类型转换成父类型,自动类型转换

  • 向下转型➡父类型转换成子类型,强制类型转换

  • 向上转型和向下转型,两种类型必须有继承关系

  • 向下转型前需要使用instanceof进行判断

  • 同一个方法作用在不同对象(不同类的对象)上

  • 开闭原则OCP,可复用设计,软件实体对扩展开放,对修改关闭

  • 降低耦合性,增强程序的可扩展性

  • (静态绑定)编译阶段,绑定的是父类的方法

  • (动态绑定)运行阶段,执行的是子类中的方法

11、this、super和static

11.1、this

  • 保存的是当前对象的内存地址
  • this有对象的概念,所以不能在静态方法中直接使用
  • this()只能出现在构造方法中的第一行

11.2、super

  • super不是一个引用,无法直接使用,例如直接打印super
  • super代表了当前对象中从父类继承过来的那部分特征
  • 使用this和super访问属性时访问的是同一块内存
  • super()只能出现在构造方法的第一行,没有写this()和super()时默认调用super()
  • 创建对象时,object类的构造方法必定执行
  • 给子类对象初始化父类型特征,代码复用
  • 若子类和父类都有一个同名的实例变量或实例方法,需要使用super调用父类型的实例变量才能使用这个变量

11.3、static

  • 用来修饰方法、变量和代码块
  • 静态变量在类加载的时候初始化
  • 静态代码块在类加载时执行,只执行一次
  • 将类中某个全部对象保存的数据都相同的属性改成静态变量,可以减少内存的浪费
  • 静态变量和静态方法可以使用引用的方式访问,且引用保存为null时也能正常调用,但不建议这样使用
  • 在类加载的时候,静态变量和静态代码块的优先级相同,即只和它们所处的位置先后有关

拓展

1、父类、子类中代码的执行过程

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值