面向对象(三)

一、Static关键字:

1.概述:Static是一个静态关键字;

2.使用:

a.修饰一个成员变量:

static 数据类型 变量名

b.修饰一个方法:

修饰符 static 返回值类型 方法名(形参){

方法体

return 结果

}

3.调用静态成员:

类名直接调用(不用new对象)

4.静态成员特点:

a.静态成员属于类成员,不属于对象成员(非静态的成员属于对象成员)

b.静态成员会随着类的加载而加载

c.静态成员优先于非静态成员存在在内存中

d.凡是根据静态成员所在类创建出来的对象,都可以共享这个静态成员

5.static关键字在程序运行中的内存占用情况:

jdk8及以后,静态区从方法区移动到堆内存中存放,原因是堆内存对于清理无效数据更高效,对内存的管理更合理。

6.静态成员访问特点

(1)在静态方法中能直接访问非静态成员嘛?------不能

想要调用的话:new对象调用

(2)在非静态方法中能直接访问静态成员嘛?------能

a.同类:

直接调用/类名调用

b.不同类:

类名调用

(3)静态方法中能直接访问静态成员嘛?------能

a.同类:

直接调用/类名调用

b.不同类:

类名调用

(4)非静态方法中能直接访问非静态成员嘛?------能

a.同类

直接调用/new对象调用

b.不同类:

new对象调用

总结:

(1)不管在不在同一个类中,非静态成员都可以new对象调用;

(2)不管在不在同一个类中,静态成员都可以类名调用。

7.静态成员在开发中的使用场景:

(1)既然static成员好用(类名直接调用,不用new对象调用),那么实际开发中,为什么不把所有成员都定义成静态的呢?

原因:因为静态成员会随着类的加载而加载,如果所有成员都是静态的,那么当类一加载,所有的成员都会进入内存,占用大量内存空间。

(2)那么静态成员什么时候定义呢?

一般情况下,我们在抽取工具类的时候可以将工具类中的所有成员都定义成静态的

(3)那么什么时候定义工具类呢?

如果有些功能在整个代码中重复实现,代码一样,实现功能一样,那就可以将这部分代码抽取出来,形成工具类。

8.可变参数:

(1)需求:定义一个方法,实现n个整数相加

(2)分析:方法参数位置,只明确了参数的类型,但是不明确参数个数,此时就可以定义成可变参数

(3)定义格式

数据类型...变量名

(4)注意:

a.可变参数的本质是一个数组;

b.参数位置不能连续写多个可变参数,而且当可变参数和其他普通参数一起使用时,可变参数需要放到数据列表的最后。

(5)可变参数的练习:

a.返回n个字符串拼接结果,如果没有传入字符串,那么返回空字符串""

java 复制代码
public class ArrChanged {

    public static void main(String[] args) {

        String result = getString("野夫怒见不平事",",","磨损胸中万古刀");
        System.out.println(result);
    }


    public static String getString(String...s){

        String c = "";

        for (int i = 0; i < s.length; i++) {

            c += s[i];
        }
        return c;

    }
}

b.n个字符串进行拼接,每个字符串之间使用某字符进行分隔,如果没有字符串,那么返回空字符串""

java 复制代码
public class ArrChanged {

    public static void main(String[] args) {

        String result = getString("-","love","life","sky","robot");
        System.out.println(result);
    }


    public static String getString(String regex,String...s){
        String c = "";
        for (int i = 0; i < s.length; i++) {
            if ( i == s.length-1){
                c += s[i];
            }else {
            c += s[i] + regex;
            }
        }
        return c;

    }
}
相关推荐
隐积5 小时前
3.1.7.Qt容器大家族(3):QVariant——万能盒子
开发语言·qt
都叫我大帅哥8 小时前
Java JJWT 完全指南:从入门到生产级实践
java
名字还没想好☜8 小时前
Next.js ‘use client‘ 到底加在哪:Server/Client Components 边界与常见报错
开发语言·前端·javascript·react·next.js
初级代码游戏9 小时前
iOS开发 Swift 速记1:变量和基本数据类型
开发语言·ios·swift
前端开发张小七9 小时前
Java 学习笔记 · 第一课:基础语法与核心概念
java·后端
酷在前行10 小时前
【R生态】PERMANOVA 进阶实战:距离选择、PERMDISP、两两比较与受限置换(保姆级教程)
开发语言·r语言
ThsPool10 小时前
【ENVI二次开发学习整理 04】ENVI功能扩展与二次开发
java·前端·javascript
cxr82810 小时前
Graphify vs GitNexus vs CodeGraph — 三工具架构深度对比
开发语言·架构·知识图谱
赤壁小虾10 小时前
【渲染流水线】[逐片元阶段]-[透明度测试]以UnityURP为例
java·前端·数据库
废弃的小码农11 小时前
功能测试--Day07--Python编程基础
开发语言·python