当前位置:网站首页 > Java基础 > 正文

java基础对象入门



目录

前言:

1.类的实例化与对象内存的解析

1.1 什么是类?

1.2 对象的内存解析

2.成员变量与局部变量

3.方法的作用与方法的声明

4.对象数组

4.1 对象数组的声明和使用

4.2 对象数组的内存解析

4.3 小结

5.package与import关键字

5.1 package 关键字

5.1.1 JDK中主要的包

5.2 import 关键字

5.3 小结

6.封装性


前言:

学习面向对象的三条主线:

  • java类以及类的成员:1.(重点)属性、方法、构造器;(熟悉)代码块、内容块。
  • 面向对象的特征:封装、继承、多态、(抽象)
  • 其他关键字的使用:this、super、package、import、static、final、interface、abstract等等。

面向对象编程的两个核心概念:类、对象。

理解:

  • 类:具有相同特征的事物的抽象描述,是“抽象的”、概念上的定义。
  • 对象:实际存在的该类事物的“每个个体”,是“具体的”,也因而称为“实例”。

类的内部成员:  1.属性、成员变量、field(字段、域);2.方法、函数、method

1.类的实例化与对象内存的解析

1.1 什么是类?

  • 在Java中,类是对象的蓝图或模板。类定义了对象的属性(字段)和行为(方法)。

实例化的步骤(三步流程)

  • 创建类,并设计类的内部成员(属性、方法)
  • 创建类的对象,如 Dog myDog = new Dog();
  • 通过对象,调用其内部声明的属性或方法,完成相关功能。

格式:类类型 对象名 = 通过new创建的对象实体

代码示例:

 

1.2 对象的内存解析

1. 堆内存与栈内存

  • 堆内存:用于存放对象实例和数组。所有通过创建的对象都存储在堆内存中。
  • 栈内存:用于存储局部变量和方法调用的状态,包括对象的引用。每个线程都有自己的栈。

举例:

创建类的一个对象:

创建类的多个对象:

说明:创建类的多个对象时,每个对象在堆空间中有一个对象实体,每个对象实体中保存着一份类的属性。如果修改某一个对象的某属性值时,不会影响其他对象此属性的值。

补充:

Dog p1 = new Dog();

Dog p3 = p1;

此时p1和p3两个变量指向了堆空间中的同一个对象实体(或者p1,p3保存的地址值相同),如果通过其中的某一个变量修改对象的属性时,会影响另一个对象变量此属性的值。

2.成员变量与局部变量

说明:

  • 在方法体外,类体内声明的变量称为成员变量。
  • 在方法体内等位置声明的变量称为局部变量。

成员变量与局部变量对比:

特性成员变量局部变量定义位置类中,但在任何方法外方法、构造函数或代码块内作用域该类的所有方法和构造函数仅在定义它们的方法或代码块内生命周期从对象创建到对象被垃圾回收仅在定义它们的方法或代码块执行期间默认值如果未初始化,JVM会提供默认值(如、等)无默认值,使用前必须显式初始化访问修饰符可以使用、等修饰符无法使用修饰符存储位置存储在堆内存中存储在栈内存中

代码演示:

 

结果:

3.方法的作用与方法的声明

方法的作用

理解:“方法”是类或对象行为特征的抽象,用来完成某个功能操作。

  • 代码重用:方法可以在不同的地方被多次调用,从而避免重复代码,提高代码的复用性。

  • 提高可读性:使用方法可以将复杂的逻辑分解为简单的步骤,使代码更加清晰易懂。

  • 模块化:方法将代码分割成小的、独立的部分,使得每个方法只负责完成一项特定任务,便于维护和修改。

  • 降低复杂性

使用方法的好处

  • 便于维护:当方法的实现需要更改时,只需修改该方法的代码,不影响调用该方法的其他部分。

  • 测试与调试:可以单独测试每个方法,便于查找和修复问题,提高了调试的效率。

  • 提高开发效率:可以将常用的代码逻辑封装在方法中,提高代码编写的效率和一致性。

  • 参数化功能:方法可以接收参数,使得同一方法可以用于不同的数据,增加了灵活性。

使用举例:

  • Math.random()的random()方法
  • Math.sqrt(x)的sqrt(x)方法
  • System.out.println(x)的println(x)方法
  • new Scanner(System.in).nextlnt()的nextlnt()方法

声明举例:

  • 无返回值的方法 public void printMessage() 
  • 返回整型值的方法 public int add()
  • 返回布尔值的方法 public boolean isEven() 
  • 返回数组的方法 public int[] getNumbers()

方法声明的格式

 

具体的方法声明的细节

1.权限修饰符: private 缺省  protected   pubilc

2.返回值类型,当调用完方法后,是否需要返回一个值,分两类:

  • 无返回值类型:使用void表示,如System.out.println()的println()方法
  • 有具体返回值:需要指明返回的数据的类型,可为基本数据类型或引用数据类型,要求在方法内部使用“return + 返回值类型的变量或常量”。

3.方法名,属于标识符,要求做到“见名知意”。

4.形参列表:局部变量,可声明多个。

  • 格式:(形参类型1 形参1, 形参类型2 形参2)

图解:

5.方法调用的内存解析

  • 形参,方法在声明时,一对()内声明的一个或多个

简单练习:

 

分开两个类:

 

4.对象数组

说明:对象数组是一个存储对象引用的数组。它与普通的基本数据类型数组类似,但数组中的每个元素存储的都是对象的引用而不是直接存储对象本身。

4.1 对象数组的声明和使用

对象数组的声明和基本数据类型数组类似,只不过数组的元素类型是类,而不是基本类型(如 、 等)。

举例:

 

结果:

4.2 对象数组的内存解析

java的内存主要分为以下几个区域:

  • 栈内存:用于存储局部变量和方法调用的相关信息。
  • 堆内存:用于存储对象实例,所有对象和数组都存放在堆内存中。
  • 方法区:用于存储类信息、常量、静态变量等。

4.1举例代码的对象数组内存模型

  • 当声明 时,在栈内存中创建了一个 变量,引用了一个数组对象。这个数组对象存储在堆内存中,但此时数组中的每个元素都是 ,因为还没有分配具体的对象。

  • 当执行 时,会在堆内存中分配一个 对象,同时将该对象的引用存储在 中。同样地, 到 也分别引用堆内存中的其他 对象。

解释:

  • 栈内存:students -> 堆中的数组对象

  • 堆内存:数组对象[5]: [students[0]] -> Student(姓名="甲一", 年龄=20) [students[1]] -> Student(姓名="乙二", 年龄=21) [students[2]] -> Student(姓名="丙三", 年龄=22) [students[3]] -> Student(姓名="丁四", 年龄=23) [students[4]] -> Student(姓名="王五", 年龄=24)

图解:

注意:

  • 数组元素是对象引用:在对象数组中,每个元素存储的是对象的引用而非对象本身。如果数组元素未被初始化,它们的默认值是 。

  • 对象的内存分配:每个数组中的对象都需要单独分配内存。声明数组时仅分配了存储对象引用的内存,只有在使用 创建对象时,才会在堆内存中为这些对象分配空间。

  • 数组的大小固定:一旦创建对象数组,其大小是固定的,不能动态调整。

4.3 小结

  • 对象数组是一种数组形式,其中每个元素存储的是对象的引用,而不是对象本身。
  • 内存分配涉及栈内存和堆内存的协作:数组本身存储在堆内存中,数组的引用存储在栈内存中,数组元素是指向对象的引用。

5.package与import关键字

5.1  关键字

定义:

关键字用于定义一个 Java 类或接口所属的包。包是一个命名空间,用于组织类和接口,从而避免名称冲突,并提供访问控制。

用途:

  • 组织类:通过将类放入不同的包中,可以对类进行逻辑分组,方便管理和查找。
  • 避免名称冲突:在不同的包中可以有同名的类,避免了类名冲突的问题。
  • 访问控制:包可以用来控制类的可见性,只有同一包中的类可以访问默认访问级别的类。

声明格式

 

示例

 

5.1.1 JDK中主要的包

包名功能描述主要类Java 语言核心类, , , 提供集合框架、日期时间处理等功能, , , 输入和输出操作,包括文件操作, , 非阻塞 I/O 操作和缓冲区支持, 网络操作的支持,包括 URL、套接字, 创建图形用户界面(GUI)的类, , , 提供更高级的 GUI 组件, , , 与数据库的连接和操作, , 提供安全相关功能,包括加密和身份验证, 新的日期和时间 API, , 

5.2  关键字

定义

关键字用于引入其他包中的类和接口,使得在当前类中可以直接使用这些类和接口,而无需使用全限定名。

用途

  • 简化代码:避免在使用类时写全限定名,使代码更简洁。
  • 提高可读性:明确指出当前类依赖于哪些外部类。

声明格式

import packageName.ClassName; // 导入单个类

import packageName.*; // 导入包中的所有类

示例

假设我们有两个包, 和 ,在 中我们想使用 类:

Utils.java

 

MyClass.java

java基础对象入门

 

5.3 小结

  • 用于定义类和接口的包,帮助组织代码和避免命名冲突。
  • 用于引入其他包中的类,使得在当前类中可以直接使用这些类,简化代码和提高可读性。

6.封装性

面对对象的开发原则要遵循“高内聚,低耦合”

  • 高内聚、低耦合是软件I程中的概念,也是UNIX 操作系统设计的经典原则。
  • 内聚,指一个模块内各个元素彼此结合的紧密程度;耦合指一个软件结构内不同模块之间互连程度的度量。内聚意味着重用和独立,耦合意味着多米诺效应牵一发动全身。

而“高内聚,低耦合”的体现之一:

  • 高内聚:类的内部数据操作细节自己完成,不允许外部干涉;
  • 低耦合:仅暴露少量的方法给外部使用,尽量仿便外部调用。

什么叫封装性?

  • java规定了4种权限修饰符,分别为private、缺省、protected、pubilc
  • 使用4种权限修饰符来修饰类及类的内部成员,当成员被调用,体现可见性的大小

4种权限具体使用

  • 类:只能使用pubilc,缺省修饰
  • 类的内部成员,可以使用4种权限修饰进行修饰。

使用频率

  • 较高:pubilc、private
  • 较低:缺省、protected

封装性的体现

  • 私有化(private)类的属性,提供公共(public)的get和set方法, 对此属性进行获取或修改
  • 将类中不需要对外暴露的方法,设置为private.
  • 单例模式中构造器private的了,避免在类的外部创建实例。

举例:

Student.java中代码

 

Main.java中的代码


                            

版权声明


相关文章:

  • java基础中构造方法2024-10-19 17:58:02
  • java基础21个变量2024-10-19 17:58:02
  • java 基础和数据库2024-10-19 17:58:02
  • java基础知识的认知2024-10-19 17:58:02
  • java软件开发周期基础知识2024-10-19 17:58:02
  • java基础核心卷12024-10-19 17:58:02
  • java基础字符串教程2024-10-19 17:58:02
  • java 基础数据类型 引用数据类型2024-10-19 17:58:02
  • java零基础怎么准备秋招2024-10-19 17:58:02
  • 学java基础代码格式2024-10-19 17:58:02