面向对象,静态、非静态方法,局部变量,成员变量

本文介绍了面向对象编程的基础概念,包括对象、类的定义及其关系。详细阐述了静态成员变量与非静态成员变量的差异,如作用域、初始值和存储位置,并探讨了如何在Java中调用静态方法与非静态方法。通过实例说明了静态与非静态方法的调用规则。

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

面向对象

面向对象(Object Oriented)是软件开发方法,一种编程范式。面向对象的概念和应用已超越了程序设计和软件开发,扩展到如数据库系统、交互式界面、应用结构、应用平台、分布式系统、网络管理结构、CAD技术、人工智能等领域。

面向对象是一种对现实世界理解和抽象的方法,是计算机编程技术发展到一定阶段后的产物。

  1. 对象

    1. 万物皆对象,客观存在的事物都是对象
    1. 什么是类

      类定义了一种抽象数据类型

      类就是模板,确定对象将会拥有的特征(属性)和行为(方法)

    2. 类的特点

      • 类是对象的类型
      • 具有相同的属性和放到的一组对象的集合
  2. 什么是对象的属性

    属性:对象具有的各种特征,每个对象的属性有具有特定的值,可以理解为对某类事物的描述

    例如:狗类

    ​ 属性:品种、尺寸、颜色、年龄

    注意:对象的属性既具有默认值,这个默认值与相对的类型相关

    数据类型默认值
    byte0
    short0
    int0
    long0
    double0.0
    float0.0
    char空字符
    booleanfalse
    Stringnull
  3. 什么是对象的行为

    方法:对象执行的操作

  4. 类和对象的关系
    6.类是对象的抽象,仅仅是一个模板,在现实世界中是不存在的;而对象是具体的实例,是类这个模板的具体实例。

成员变量 在类中定义,用来描述对象将要有什么
局部变量 在类的方法中定义,在方法中临时保存数据

同名变量的不同
局部变量的特点:
在同一个方法中,不允许有同名的局部变量
在不同的方法中,可以有同名的局部变量

static 是静态修饰符有方法中有static是静态方法,没有则是非静态方法。
static 也可以修饰属性,成员变量

成员变量和局部变量的区别
1、)作用域不同
局部变量的作用域仅限于定义它的方法,也就是在方法内使用
成员变量的作用域在整个类内部都是可见的,在类中所有方法都可以使用
2、)初始值不同
成员变量有默认的初始值
局部变量没有默认的初始值,必须自行设定初始值
3、)存储位置不同
成员变量是在对象创建以后存在于中,对象回收时,成员变量消失,方法调用结束后,值就消失了
局部变量是在方法的创建被调用的存在于中称为:方法栈,方法调执行结束,从栈中清除
对象的创建而创建,对象回收时,成员变量消失,随着方法的调用被创建,方法执行结束,从栈中清除。

在这里插入图片描述
用测试类调用方法,测试结果


public class Variable {
   // 成员变量可不赋值,有默认的初始值
    public int count;
    public int x;
    public static int y;
	//无修饰符
    public void fun01() {
    	//局部变量,没有默认的初始值,必须自行设定初始值
        int a = 10;
        //输出结果就是10
        System.out.println("fun01()中a的值 >>> " + a);
    }

    public void fun02() {
        int a = 20;
         //输出结果就是20
        System.out.println("fun02()中a的值 >>> " + a);
    }

    public void fun03() {
        int a = 30; 
          //局部变量没有默认的初始值,必须自行设定初始值
       		注意 int b;// 报错 java: 可能尚未初始化变量b  The local variable b may not have been initialized
       	  // System.out.println("fun03()中b的值 >>> " + b);
        System.out.println("fun03()中a的值 >>> " + a);

    }

    public void fun04() {
         //调用成员变量是int类型,会输出0,因为成员变量有默认的初始值
        System.out.println("成员变量count的值 >>> " + count);
    }

    public void fun05() {
   		 //调用成员变量是int类型,现在会输出0,注意后面有++ 所以会+1,先输出后++
        System.out.println("成员变量count的值 >>> " + count++);
    }

    public void fun06() {
    	 //调用成员变量是int类型,现在会输出2,注意前面有++ 所以先会+1,在输出值得到2
        System.out.println("成员变量count的值 >>> " + ++count);
    }

    public void fun07(){
        System.out.println("非静态成员变量x的值 >>> " + ++x);
        System.out.println("静态成员变量y的值 >>> " + ++y);
    }
}

成员变量的关系非静态成员变量
在这里插入图片描述

静态成员变量与非静态成员变量的关系

在这里插入图片描述

在这里插入图片描述

如何调用静态方法与非静态方法

static 是静态修饰符有方法中有static是静态方法,没有则是非静态方法

静态方法

  • 静态方法可以通过( 类名 点 方法名 )的方式调用
  • 但是不能通过( 类名 点 方法名 )的方式调用非静态方法

非静态方法

  • 可以通过类的实例化( 对象名 点 方法名 )的方式调用非静态方法
  • 也可以通过类的实例化( 对象名 点 方法名 )的方式调用静态方法
  • 类的实例化—>> 类名 对象名 = new 类名();

调用静态方法与非静态方法 调用其他类中的方法

public class Person01Test {
    @Test
    //static 是静态修饰符有方法中有static是静态方法,没有则是非静态方法。
    // 可以通过(类名 点 方法名)的方式调用静态方法 
    // 不能通过(类名 点 方法名)的方式调用非静态方法
    public void test01(){
        Person.sleap();
    }

    @Test
    public void test02(){
    //类的实例化将person类 在堆中新创建个对象,名为person01
        Person person01 = new Person();
        
       // 可以通过类的实例化对象,调用方法
       // 用(对象名 点 方法名)调用静态方法
       // 也可用(对象名 点 方法名)调用非静态方法
        person01.eat();//方法中没有static
        person01.drink();
        person01.sleap();//方法中有static
    }

调用静态方法与非静态方法 调用同一类中的方法

  • 静态方法可以调用静态方法,但是无法直接调用非静态方法
  • 非静态方法 可以调用 非静态方法 与可以调用 静态方法
  • 直接输入方法名

静态方法可以调用静态方法,但是无法直接调用非静态方法在这里插入图片描述

package com.lihaozhe.javase.day03.bean.bean;

/**
 * @author xhj
 * @version 1.0.0 2022/4/20 上午9:23
 */
public class Dog {
    public static void main(String[] args) {
   // 静态方法可以调用静态方法,但是无法直接调用非静态方法
        food("苹果",3);
   // main方法 静态方法调用非静态方法,用类的实例化
        Dog dog=new Dog();
        dog.arr();
        dog.cou(2,8);
    }

    public void arr() {
        System.out.println("多少");
        //非静态方法 可以调用  非静态方法 也可以调用 静态方法
 		//直接输入方法名
        cou(5,6);
        food("苹果",5);

    }
    public void cou(int a, int b) {
        System.out.println("年龄"+(a + b));
    }
    public static void food(String a, int b){
        System.out.println("吃了"+ b +"个"+ a);

    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值