Java基础面试:Java中的方法
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基础系列--03_Java中的方法描述
方法 (1)方法的定义:就是完成特定功能的代码块. 注意:在很多语言里面有函数的定义,而在Java中,函数被称为方法. (2)格式: 修饰符 返回值类型 方法名(参数类型 参数名1,参数类型 参数名2 ...
- Java基础:HashMap中putAll方法的疑惑
最近回顾了下HashMap的源码(JDK1.7),当读到putAll方法时,发现了之前写的TODO标记,当时由于时间匆忙没来得及深究,现在回顾到了就再仔细思考了下 @Override public v ...
- Java基础面试系列(一)
Java基础面试总结(一) 1. 面向对象和面向过程的区别 面向过程 面向对象 性能 高于面向对象 类加载的时候需要实例化,比较消耗资源 三易(易维护,易复用,易扩展) 不如面向对象 具有封装,继承, ...
- Java基础技术-Java其他主题【面试】
Java基础技术-Java其他主题[面试] Java基础技术IO与队列 Java BIO.NIO.AIO Java 中 BIO.NIO.AIO 的区别是什么? 含义不同: BIO(Blocking I ...
- Java基础面试知识点总结
微信公众号[程序员江湖] 作者黄小斜,斜杠青年,某985硕士,阿里 Java 研发工程师,于 2018 年秋招拿到 BAT 头条.网易.滴滴等 8 个大厂 offer,目前致力于分享这几年的学习经验. ...
- Java基础关于Map(字典)的方法使用
Java基础关于Map(字典)的方法使用 java中一般用map与hashmap来创建一个key-value对象 使用前提是要导入方法包: import java.util.HashMap: impo ...
- 黑马程序员:Java基础总结----java注解
黑马程序员:Java基础总结 java注解 ASP.Net+Android+IO开发 . .Net培训 .期待与您交流! java注解 lang包中的基本注解 @SuppressWarnings ...
- Java基础:Java的四种引用
在Java基础:java虚拟机(JVM)中,我们提到了Java的四种引用.包括:强引用,软引用,弱引用,虚引用.这篇博客将详细的讲解一下这四种引用. 1. 强引用 2. 软引用 3. 弱引用 4. 虚 ...
- java基础-学java util类库总结
JAVA基础 Util包介绍 学Java基础的工具类库java.util包.在这个包中,Java提供了一些实用的方法和数据结构.本章介绍Java的实用工具类库java.util包.在这个包中,Java ...
- java基础(二)-----java的三大特性之继承
在<Think in java>中有这样一句话:复用代码是Java众多引人注目的功能之一.但要想成为极具革命性的语言,仅仅能够复制代码并对加以改变是不够的,它还必须能够做更多的事情.在这句 ...
随机推荐
- Angular Material 18+ 高级教程 – CDK Portal
前言 CDK Portal 是 Angular Material 对 Angular Dynamic Component (ViewContainerRef,TemplateRef,createCom ...
- JavaScript Library – Alpine.js
前言 Alpine 是高山的意思.Alpine.js 是一个轻量级的 JS Framework. 我为什么会去用它呢? 是这样的,我在做企业网站开发的时候会有 2 个阶段. 第一个 draft 阶段, ...
- ASP.NET Core – Thread, Task, Async 线程与异步编程
前言 平常写业务代码, 很少会写到多线程. 久了很多东西都忘光光了. 刚好最近在复习 RxJS. 有一篇是讲 scheduler 的. 会讲到 JavaScript 异步相关的资讯. 既然如此那就一次 ...
- RxJS 系列 – Error Handling Operators
前言 前几篇介绍过了 Creation Operators Filter Operators Join Creation Operators 这篇继续介绍 Error Handling Operato ...
- sql server high cpu 排查
refer: https://techcommunity.microsoft.com/t5/azure-sql/monitor-cpu-usage-on-sql-server-and-azure-sq ...
- ASP.NET Core – Swagger OpenAPI (Swashbuckle)
前言 Swagger (OpenAPI) 是一套 Web API 文档规范. ASP.NET Core 有 2 个 Library 可用来实现 Swagger. Swashbuckle 和 NSwag ...
- ServiceMesh 2:控制面和数据面的职责(图文总结)
★ ServiceMesh系列 1 Service Mesh介绍 之前的章节我们详细介绍了ServiceMesh的基础知识. ServiceMesh 是最新一代的微服务架构,作为一个基础设施层,能够与 ...
- ArkTS 和仓颉的特性对比与案例
ArkTS和仓颉是两种不同的编程语言,它们各自具有独特的特性和设计目的. ArkTS特性 ArkTS是一种基于TypeScript的编程语言,专门为鸿蒙应用开发而设计.它保留了TypeScript的大 ...
- 17. ES6怎么嵌入变量
模板字符串 具体操作: 首先 , 使用反引号包裹字符串,然后使用 ${} 嵌入变量 :
- 在Java程序中监听mysql的binlog
目录 1.背景 2.mysql-binlog-connector-java简介 3.准备工作 1.验证数据库是否开启binlog 2.开启数据库的binlog 3.创建具有REPLICATION SL ...