20-Java-面向对象-static


static

  • static:表示静态,是Java中的一个修饰符,可以修饰成员方法,成员变量

静态变量

  • 被static修饰的成员变量,叫做静态变量
  • 特点:
    • 被该类所有对象共享
    • 不属于对象,属于类。
    • 随着类的加载而加载,优先于对象存在
  • 调用方式:
    • 类名调用(推荐)
    • 对象名调用
示例
/**
 * @Author: 大海
 * @Date: 2025-10-26
 */

public class study_23_static_静态变量 {
    // 属性 姓名  年龄  性别
    private String name;
    private int age;
    private String gender;
    public static String teacher; // 静态属性 老师

    // 构造方法
    public study_23_static_静态变量() {
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    // 行为
    public void study() {
        System.out.println(name + "正在学习 Java 编程");
    }

    public void show() {
        System.out.println(name + gender + ",今年" + age + "岁。" + "老师是" + teacher);
    }

    public static void main(String[] args) {
        // 类名调用静态属性
        study_23_static_静态变量.teacher = "高老师";
        System.out.println(study_23_static_静态变量.teacher);

        // 创建第一个学生对象
        study_23_static_静态变量 student1 = new study_23_static_静态变量();
        student1.setName("大海");
        student1.setAge(31);
        student1.setGender("男");
        student1.study();
        student1.show();

        // 创建第二个学生对象
        study_23_static_静态变量 student2 = new study_23_static_静态变量();
        student2.setName("小白");
        student2.setAge(28);
        student2.setGender("女");
        student2.study();
        student2.show();
    }
}

静态方法

  • 被static修饰的成员方法,叫做静态方法

  • 特点:

    • 多用在测试类和工具类中
    • Javabean类中很少会用
  • 调用方式:

    • 类名调用(推荐)
    • 对象名调用
示例
package common;

/**
 * @Author: 大海
 * @Date: 2025-10-26
 */

// 工具类
public class ArrayUtil {
    // 为了不让外界创建实例,将构造方法设为私有
    private ArrayUtil() {
    }

    // 数组中元素平均值
    public static double getAverage(double[] arr) {
        if (arr == null || arr.length == 0) {
            return 0;
        }
        int sum = 0;
        for (double j : arr) {
            sum += j;
        }
        return (double) sum / arr.length;

    }

}



package common;

/**
 * @Author: 大海
 * @Date: 2025-10-26
 */

// 测试类
public class TestDemo {
    public static void main(String[] args) {

        double[] array =  {1.2, 3.4, 5.6, 7.8, 9.0};
        double average = ArrayUtil.getAverage(array);
        System.out.println(average);
    }
}


static的注意事项

  • 静态方法只能访问静态变量和静态方法
  • 非静态方法可以访问静态变量或者静态方法,也可以访问非静态的成员变量和非静态的成员方法
  • 静态方法中是没有this关键字
在jmu-Java-03面向对象基础中,与Object相关的资料包含代码示例与具体要求。 ### 相关题目及代码示例 - **6 - 2 jmu - Java - 03面向对象基础 - Object**:该题目分值为15分,其代码示例中先读取一个整数`n`,创建一个长度为`n`的`Object`数组。根据输入的不同标识("c"、"d"、"i"、"s"),分别创建`Computer`、`Double`、`Integer`、`String`对象存入数组,若输入不符合则存入`null`。最后倒序遍历数组,输出非`null`对象的`toString`方法结果。 ```java int n=sc.nextInt(); Object a[]=new Object[n]; for(int i=0;i<n;i++) { String s=sc.next(); if(s.equals("c")) { a[i]=new Computer(); }else if(s.equals("d")) { a[i]=new Double(sc.nextDouble()); }else if(s.equals("i")) { a[i]=new Integer(sc.nextInt()); }else if(s.equals("s")) { a[i]=new String(sc.next()); }else { a[i]=null; } } for(int i=n - 1;i>=0;i--) { if(a[i] instanceof String) { System.out.println(a[i].toString()); }else if(a[i] instanceof Integer) { System.out.println(a[i].toString()); }else if(a[i] instanceof Double) { System.out.println(a[i].toString()); }else if(a[i] instanceof Computer) { System.out.println(a[i].toString()); }else { } } ``` - **6 - 1 jmu - Java - 03面向对象基础 - Object**:要求最后倒序输出数组中的所有对象,若数组中相应位置的元素为`null`则不输出。裁判测试程序给出了基本的输入输出框架。 ```java public static void main(String[] args) { Scanner sc = new Scanner(System.in); //这边是你的代码 sc.close(); } ``` - **6 - 26 jmu - Java - 03面向对象基础 - Object**:同样要求最后倒序输出数组中的所有对象,若元素为`null`则不输出。通过代码与6 - 2的思路类似,只是在输出时简化了判断条件。 ```java int num = 0; num = sc.nextInt(); Object[] arr = new Object[num]; for(int i=0;i<num;i++) { String str; str = sc.next(); if(str.equals("c")) { arr[i] = new Computer(); } else if(str.equals("d")) { arr[i] = new Double(sc.nextDouble()); } else if(str.equals("i")) { arr[i] = new Integer(sc.nextInt()); } else if(str.equals("s")) { arr[i] = new String(sc.next()); } else { arr[i] = null; } } for(int i=num - 1;i>=0;i--) { if(arr[i] != null) { System.out.println(arr[i]); } } ``` ### 其他相关内容 - **PTA jmu - Java - 03面向对象基础 - 05 - 覆盖**:使用`System.out.println(Arrays.toString(PersonOverride.class.getConstructors()));`输出`PersonOverride`的所有构造方法,这体现了利用`Object`相关的反射机制来获取类的构造方法信息[^4]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

爱学习de测试小白

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

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

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

打赏作者

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

抵扣说明:

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

余额充值