Java 中的方法

什么是方法

方法是 Java 中的一段可重用的代码块,用于执行特定的任务,是程序中的最小执行单元。

  • 参数:方法可以接受一个或多个参数,这些参数是传递给方法的值,用于方法内部的逻辑运算。
  • 返回值:方法可以返回一个值,叫做方法的返回值,返回值的类型在方法声明中指定,无返回值使用关键字 void 声明。
  • 方法的声明:
修饰符 返回值 方法名(参数数据类型 参数名称)
{
方法体
}

方法有哪些种

  • 构造方法:构造方法是一种特殊的方法,用于创建类的实例。构造方法的名称必须与类名相同,且没有返回类型(连 void 也没有)。
public class Person {
private String name;
private int age; // 无参构造方法
public Person() {
this.name = "Unknown";
this.age = 0;
} // 带参数的构造方法
public Person(String name, int age) {
this.name = name;
this.age = age;
} public static void main(String[] args) {
Person p1 = new Person(); // 使用无参构造方法创建对象
Person p2 = new Person("Johnny", 30); // 使用带参数的构造方法创建对象
}
}
  • 静态方法:静态方法属于类本身,而不是类的实例。静态方法可以通过类名直接调用,也可以通过对象实例调用(不推荐这种方式)。

public class MathUtils {
// 静态方法
public static int add(int a, int b) {
return a + b;
} public static void main(String[] args) {
int result = MathUtils.add(10, 20); // 通过类名调用静态方法
System.out.println("Result: " + result); // 输出: Result: 30
}
}
  • 实例方法:实例方法属于类的实例,必须通过类的实例来调用。每个实例都有自己的一份方法副本,实例方法可以访问类的实例变量和静态变量。

public class Person {
private String name;
private int age; // 实例方法
public void introduce() {
System.out.println("你好,我是" + name + " ,我今年 " + age + " 岁了。");
} public static void main(String[] args) {
Person p = new Person();
p.name = "Johnny";
p.age = 30;
p.introduce(); // 调用实例方法
}
}
  • 抽象方法:抽象方法没有方法体,只有方法签名,且必须在抽象类或接口中定义,并且子类必须实现这些抽象方法。抽象方法的主要目的是定义一个标准的行为,让子类根据自己的需求实现具体的逻辑。

public abstract class Animal {
public abstract void makeSound(); // 抽象方法
} public class Dog extends Animal {
@Override
public void makeSound() {
System.out.println("Dog barks.");
}
}

静态方法和实例方法有何不同

定义

  • 静态方法:静态方法是在类中使用 static 关键字修饰的方法。静态方法属于类本身,而不是类的实例。所以,静态方法可以在没有创建对象的情况下调用。
  • 实例方法:实例方法是在类中定义的普通方法,它们没有 static 关键字修饰。实例方法属于类的实例(对象),而不是类本身。

存储方式

  • 静态方法:静态方法随着类的加载而加载,存储在方法区(Method Area)中。静态方法属于类的成员,而不是类的实例成员。这意味着无论创建多少个对象,静态方法在内存中都只有一份副本。
  • 实例方法:实例方法属于类的实例成员,每个对象都有自己的一份副本。实例方法在对象创建时分配内存,位于堆内存(Heap Memory)中的对象内。

调用方式

  • 静态方法:可以直接通过 类名.方法名 的方式来调用,不需要创建类的实例。例如:ClassName.staticMethod()。也可以通过 对象.方法名 的方式调用,但是不推荐这样做,因为这可能会引起混淆,让人误以为该方法与特定的对象实例有关。
  • 实例方法:必须通过类的实例来调用,也就是通过 对象.方法名 的方式调用,这是因为实例方法需要访问实例变量或其它实例方法,这些都需要通过对象实例来访问。

访问权限

  • 静态方法:只能直接访问类的静态变量和其他静态方法。如果要访问非静态成员(即实例变量或实例方法),则必须通过类的实例对象来访问。
  • 实例方法:可以访问类的所有成员,包括静态变量、静态方法、实例变量和实例方法。实例方法因为依赖于对象,可以通过 this 关键字引用当前对象的属性和行为。

使用场景

  • 静态方法:通常用于工具类,执行一些与对象状态无关的操作,比如数学计算、字符串处理等。静态方法可以看作是类级别的方法,它不依赖于任何实例的状态。
  • 实例方法:用于操作对象的数据或调用其他实例方法,涉及到对象的状态和行为。实例方法通常用于实现面向对象编程的核心特性,如封装、继承和多态。

【Java驿站】持续给大家更新
扫描下方二维码
关注【Java驿站】公众号

Java基础面试:Java中的方法的更多相关文章

  1. Java基础系列--03_Java中的方法描述

    方法 (1)方法的定义:就是完成特定功能的代码块. 注意:在很多语言里面有函数的定义,而在Java中,函数被称为方法. (2)格式: 修饰符 返回值类型 方法名(参数类型 参数名1,参数类型 参数名2 ...

  2. Java基础:HashMap中putAll方法的疑惑

    最近回顾了下HashMap的源码(JDK1.7),当读到putAll方法时,发现了之前写的TODO标记,当时由于时间匆忙没来得及深究,现在回顾到了就再仔细思考了下 @Override public v ...

  3. Java基础面试系列(一)

    Java基础面试总结(一) 1. 面向对象和面向过程的区别 面向过程 面向对象 性能 高于面向对象 类加载的时候需要实例化,比较消耗资源 三易(易维护,易复用,易扩展) 不如面向对象 具有封装,继承, ...

  4. Java基础技术-Java其他主题【面试】

    Java基础技术-Java其他主题[面试] Java基础技术IO与队列 Java BIO.NIO.AIO Java 中 BIO.NIO.AIO 的区别是什么? 含义不同: BIO(Blocking I ...

  5. Java基础面试知识点总结

    微信公众号[程序员江湖] 作者黄小斜,斜杠青年,某985硕士,阿里 Java 研发工程师,于 2018 年秋招拿到 BAT 头条.网易.滴滴等 8 个大厂 offer,目前致力于分享这几年的学习经验. ...

  6. Java基础关于Map(字典)的方法使用

    Java基础关于Map(字典)的方法使用 java中一般用map与hashmap来创建一个key-value对象 使用前提是要导入方法包: import java.util.HashMap: impo ...

  7. 黑马程序员:Java基础总结----java注解

    黑马程序员:Java基础总结 java注解   ASP.Net+Android+IO开发 . .Net培训 .期待与您交流! java注解 lang包中的基本注解 @SuppressWarnings ...

  8. Java基础:Java的四种引用

    在Java基础:java虚拟机(JVM)中,我们提到了Java的四种引用.包括:强引用,软引用,弱引用,虚引用.这篇博客将详细的讲解一下这四种引用. 1. 强引用 2. 软引用 3. 弱引用 4. 虚 ...

  9. java基础-学java util类库总结

    JAVA基础 Util包介绍 学Java基础的工具类库java.util包.在这个包中,Java提供了一些实用的方法和数据结构.本章介绍Java的实用工具类库java.util包.在这个包中,Java ...

  10. java基础(二)-----java的三大特性之继承

    在<Think in java>中有这样一句话:复用代码是Java众多引人注目的功能之一.但要想成为极具革命性的语言,仅仅能够复制代码并对加以改变是不够的,它还必须能够做更多的事情.在这句 ...

随机推荐

  1. Angular Material 18+ 高级教程 – CDK Portal

    前言 CDK Portal 是 Angular Material 对 Angular Dynamic Component (ViewContainerRef,TemplateRef,createCom ...

  2. JavaScript Library – Alpine.js

    前言 Alpine 是高山的意思.Alpine.js 是一个轻量级的 JS Framework. 我为什么会去用它呢? 是这样的,我在做企业网站开发的时候会有 2 个阶段. 第一个 draft 阶段, ...

  3. ASP.NET Core – Thread, Task, Async 线程与异步编程

    前言 平常写业务代码, 很少会写到多线程. 久了很多东西都忘光光了. 刚好最近在复习 RxJS. 有一篇是讲 scheduler 的. 会讲到 JavaScript 异步相关的资讯. 既然如此那就一次 ...

  4. RxJS 系列 – Error Handling Operators

    前言 前几篇介绍过了 Creation Operators Filter Operators Join Creation Operators 这篇继续介绍 Error Handling Operato ...

  5. sql server high cpu 排查

    refer: https://techcommunity.microsoft.com/t5/azure-sql/monitor-cpu-usage-on-sql-server-and-azure-sq ...

  6. ASP.NET Core – Swagger OpenAPI (Swashbuckle)

    前言 Swagger (OpenAPI) 是一套 Web API 文档规范. ASP.NET Core 有 2 个 Library 可用来实现 Swagger. Swashbuckle 和 NSwag ...

  7. ServiceMesh 2:控制面和数据面的职责(图文总结)

    ★ ServiceMesh系列 1 Service Mesh介绍 之前的章节我们详细介绍了ServiceMesh的基础知识. ServiceMesh 是最新一代的微服务架构,作为一个基础设施层,能够与 ...

  8. ArkTS 和仓颉的特性对比与案例

    ArkTS和仓颉是两种不同的编程语言,它们各自具有独特的特性和设计目的. ArkTS特性 ArkTS是一种基于TypeScript的编程语言,专门为鸿蒙应用开发而设计.它保留了TypeScript的大 ...

  9. 17. ES6怎么嵌入变量

    模板字符串 具体操作: 首先 , 使用反引号包裹字符串,然后使用 ${} 嵌入变量 :

  10. 在Java程序中监听mysql的binlog

    目录 1.背景 2.mysql-binlog-connector-java简介 3.准备工作 1.验证数据库是否开启binlog 2.开启数据库的binlog 3.创建具有REPLICATION SL ...