Java从入门到精通08==》关键字static、成员变量、方法

Java从入门到精通08

2023.7.25

一、关键字static

static是一个特殊的关键字,用于修饰方法、成员变量等。使用static修饰的成员表名它属于这个类本身,不属于该类的单个实例。所以用static修饰的方法和变量又称为静态方法、静态变量或者说是类方法、类变量,而不用static修饰的方法、变量我们通常称他们位实例方法、实例变量。
静态成员不能够直接访问非静态成员,因为静态成员随类的产生而产生,而非静态成员需要类的实例化即用类定义对象这样才能产生,所以出错原因很可能是静态成员存在,但是非静态成员还未存在,类还未实例化!!!

二、成员变量

1、什么是成员变量?

类中定义的变量,一般分为实例变量、静态变量(类变量)两大类

1、实例变量

没有static修饰的变量即实例变量,从该类的实例被创建起开始存在,知道系统完全销毁这个实例才消失。实例变量的作用域与对应实例的生存范围相同。
位置:类中方法外
和以前变量一样,只不过不用赋初始值

2、静态变量(类变量)

有static修饰的变量即静态变量(类变量),从类的准备阶段开始存在,知道系统完全销毁这个类。静态变量(类变量)的作用域与这个类的生存范围相同。
位置:类中方法外
和以前变量一样,只不过不用赋初始值

public class Demo1 {
    public static void main(String[] args) {
        Student.id=1;
        System.out.println(Student.id);
        Student student1 = new Student();
        Student student2 = new Student();
        student1.age=222;
        student1.id=222;
        System.out.println(student1.id);
        System.out.println(student2.id);
    }
}
public class Student {
static int id;
static String name;
int age;
}

在这里插入图片描述
解析:

  1. Java虚拟机jvm在代码区分配空间给Demo1.class
  2. Demo1里面main方法的调用在栈区划分一个区域给main方法
  3. 因为执行Student.id,所以jvm在代码区分配空间给Student
  4. Student里面划分区域给静态变量(类变量)id name
  5. 给Student类里面的类变量id赋值1,并且输出Student类里面的类变量id
  6. 在创建Student1和Student2两个对象,且在堆区开辟两个空间存放Student1和Student2,其地址值存放在栈区的Student1和Student2中。
  7. 给堆区的student1里面的age赋值222,并将Student类里面的类变量id赋值222
  8. 输出student1.id即Student类里面的类变量id即222
  9. 输出student2.id即Student类里面的类变量id即222

三、方法

Java中方法不能独立存在,它必须属于一个类或者对象,所以方法都必须使用----类.方法或者----对象.方法的形式来调用。
方法大白话说就是将一个功能抽取出来,吧代码单独定义在一个大括号内,形成一个单独的功能。

1、静态方法

有static修饰的方法属于类本省,既可以用类来调用,也可以使用该类实例化的对象来调用,使用不同的对象调用同一个静态方法时,产生的结果都相同,因为底层方法并没有改变。
位置:类中

格式:
public static 返回值类型 方法名称([参数类型 变量,参数类型 变量,…])
{方法体;
return[返回值];
}

2、实例方法

没有static修饰的方法属于该类的对象,不属于这个类的本身,所以只能使用该类实例化的对象来调用,使用不同的对象调用同一个方法时,可能产生不同的结果。
位置:类中

格式:
public方法返回值类型 方法名称([参数类型 变量,参数类型 变量,…])
{方法体;
return[返回值];
}

3、返回值

返回值(可有可无):返回值类型可以是基本类型和引用类型,若有返回值,则必须有一条有效的return语句,要没有返回值,则必须使用void定义声明一下

4、定义方法四种方式(以静态方法为例)

  1. 无参数,无返回值
public class Demo2 {
    public static void main(String[] args) {
        a();
    }
    public static void a(){
        System.out.println("a");
    }
}

在这里插入图片描述

  1. 有参数,无返回值
import java.util.Scanner;
public class Demo3 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.print("请输入一个数字");
        int a=sc.nextInt();
        System.out.print("请输入另一个数字");
        int b=sc.nextInt();
        a(a,b);
    }
    public static void a(int a,int b){
        System.out.println(a+b);
    }
}

在这里插入图片描述

  1. 无参数,有返回值
import java.util.Scanner;
public class Demo3 {
    public static void main(String[] args) {
        int c=a();
        System.out.println(c);
    }
    public static int a(){
        Scanner sc = new Scanner(System.in);
        System.out.print("请输入一个数字");
        int a=sc.nextInt();
        System.out.print("请输入另一个数字");
        int b=sc.nextInt();
        return a+b;
    }
}

在这里插入图片描述

  1. 有参数,有返回值
import java.util.Scanner;
public class Demo3 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.print("请输入一个数字");
        int a=sc.nextInt();
        System.out.print("请输入另一个数字");
        int b=sc.nextInt();
        int c=a(a,b);
        System.out.println(c);
    }
    public static int a(int a,int b){
        return a+b;
    }
}

在这里插入图片描述
总结:各有优缺点!!!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我头像真的只是只猫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值