面向对象-static关键字实战案例

                             作者:尹正杰

版权声明:原创作品,谢绝转载!否则将追究法律责任。

一.static关键字概述

1>.static的功能

  static关键字用于修饰成员变量和成员函数。

2>.被static修饰后的成员变量和成员函数具备的特点

  ()随着类的加载而加载;
  ()优先于对象存在(因此静态方法中一般无法直接使用非静态修饰的成员变量);
  ()被所有对象所共享(即不在堆内存中存放);
  ()可以直接被类名调用;

3>.使用static关键字注意事项

  ()静态方法只能访问静态成员;
  ()静态方法中不可以写this,super关键字;
  ()主函数是静态的;
  ()静态关键字不能修饰局部变量;

4>.static的优缺点

  优点:  
    静态成员多了一种调用模式,可以直接被类名调用。也可以被对象调用。   缺点:
    静态方法只能访问静态成员,存在访问的局限性。

5>.静态变量和实例变量的区别

  所属不同:
    静态变量也称为类变量,可以直接被类调用,所属于类;
    非静态变量称为成员变量,或者实例变量,是被对象调用,所属于对象。   生命周期不同:
    静态变量随着类的加载而加载,也意味着随着类的消失而消失,生命周期最长;
    而实例变量随着对象的创建而加载,随着对象的消失而消失,即按照对象生命周期而存在。   存储JVM的位置不同:
    静态变量存储在方法区的静态区中;
    实例变量存在于所述的堆内存中;   数据共享权限不同:
    静态变量数据被所有的对象所共享;
    实例变量是对象中的特有数据

 6>.static的使用场景

  成员变量:
    当该成员变量所存储的数据,每一个对象都是一样的,这时没有必要把该数据存储到每一个对象中,只要让所有对象共享该数据即可,这时成员变量就需要被static修饰。   静态函数:
    当成员函数内并没有访问对象中特有的数据时,就可以将该方法定义成静态的;
    简单的说该函数如果访问了成员变量,该函数就是非静态的;
    该函数没有访问过成员变量,或者访问过静态的成员变量,那么为了程序的严重性,将盖房啊定义成静态的。因为该方法不需要对象存在就可以使用。

二.实现一个静态工具类的应用案例

1>.编写数组工具类

/**
* 实现数据排序并且打印的功能的数组工具类
* @author 尹正杰
*
*/
public class ArrayTools { /**
* @param arr :接收一个int类型的数组,按照从大到小的顺序对int类型的数组进行排序。
*/
public static void sort(int[] arr) {
for (int x = 0; x < arr.length - 1; x++) {
for (int y = x + 1; y < arr.length; y++) {
if (arr[x] > arr[y]) {
int temp = arr[x];
arr[x] = arr[y];
arr[y] = temp;
}
}
}
} /**
* 将int数组转换为字符串
*
* @param arr: 接收一个数组int类型的数组
* @return : 返回该数组对应的字符串格式,即[元素1,元素2,元素n,...]
*/
public static String arrayToString(int[] arr) { String res = "[";
for (int i = 0; i < arr.length; i++) {
if (i != arr.length - 1) {
res = res + arr[i] + ",";
}else {
res = res + arr[i] + "]";
}
} return res;
}
}

2>.调用数组工具类

/**
*
* @author 尹正杰
*
*/
public class ArrayToolDemo { public static void main(String[] args) { //测试数组
int[] arr = {9,5,2,7}; System.out.println("排序之前:" + ArrayTools.arrayToString(arr)); ArrayTools.sort(arr); System.out.println("排序之后:" + ArrayTools.arrayToString(arr)); } }

面向对象-static关键字实战案例的更多相关文章

  1. 面向对象-接口(interface)实战案例

    面向对象-接口(interface)实战案例 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.接口(interface)概述 1>.接口的语法格式 接口时抽象类的一种特殊体 ...

  2. Java面向对象-static关键字、静态方法与普通方法、静态成员变量

    Java面向对象-static关键字.静态方法与普通方法 static关键字的基本作用:方便在没有创建对象的情况下来进行调用(方法/变量). 很显然,被static关键字修饰的方法或者变量不需要依赖于 ...

  3. Java基础语法 - 面向对象 - static 关键字

    使用static关键字修饰的变量.常量和方法分别被称作静态变量.静态常量和静态方法,也被称作类的静态成员 静态变量 使用static修饰过的类变量称为静态变量 该变量需要使用类名.变量名进行调用,不能 ...

  4. PHP面向对象static关键字

    1.静态属性用于保存类的公有数据 2.静态方法里面只能访问静态属性 3.静态成员不需要实例化就可以访问 4.类的内部可以通过self或者static关键字访问自身的静态成员 5.可以通过parent关 ...

  5. Java面向对象--static关键字

  6. (1)封装 (2)static关键字 (3)继承

    1.封装(重中之重)1.1 基本概念 通常情况下,可以在测试类中给成员变量进行赋值,当给定的数值合法但不合理时,无论是编译还是运行阶段都不会报错或给出提示,此时与现实生活不符. 为了避免上述问题的发生 ...

  7. Java static关键字特点

    一.特点 1.随着类的加载而加载2.优先于对象存在3.被类的所有对象共享4.可以通过类名调用 二.调用特征 静态方法: 成员变量:只能访问静态变量 成员方法:只能访问静态成员方法 非静态方法: 成员变 ...

  8. 2017.10.23 Java 面向对象深入学习---final 关键字、static关键字、匿名对象等

    今日内容介绍 1.final 关键字 2.static 关键字 3.匿名对象 4.内部类 5.包的声明与访问 6.访问修饰符 7.代码块 第一节课 01(面向对象)final关键字概念.avi 02: ...

  9. Java第7次作业:造人类(用private封装,用static关键字自己造重载输出方法)什么是面向对象程序设计?什么是类和对象?什么是无参有参构造方法 ?什么是封装?

    什么是面向对象程序设计? 我们称为OOP(Object  Oriented  Programming) 就是非结构化的程序设计 要使用类和对象的方法来进行编程 什么是类,什么是对象 类就是封装了属性和 ...

随机推荐

  1. Jsp有哪些内置对象?作用分别是什么?

    Page,pageContext,request,response,session,application,out,config,exception Page指的是JSP被翻译成Servlet的对象的 ...

  2. Linux CentOS7 VMware 安装软件包的三种方法、rpm包介绍、rpm工具用法、yum工具用法、yum搭建本地仓库

    一.安装软件包的三种方法 Linux下游三种安装方法,rpm工具.yum工具.源码包.rpm按装一个程序包时,有可能因为该程序包依赖另一个程序包而无法安装:yum工具,可以连同依赖的程序包一起安装. ...

  3. H.264 SODB RBSP EBSP的区别

    SODB(String of Data Bits,数据比特串): 最原始,未经过处理的编码数据 RBSP(Raw Byte Sequence Payload,原始字节序列载荷): 在SODB的后面填加 ...

  4. 仿有道词典App开发

    最近在学习HCoder提供的仿有道词典App项目,该项目采用MUI为前端框架,服务端采用PHP,底层采用了H5+.

  5. ABC154 E - Almost Everywhere Zero

    数位DP模板,记忆化+限制即可 #include<bits/stdc++.h> using namespace std; #define lowbit(x) ((x)&(-x)) ...

  6. Codeforces Round #199 (Div. 2) D. Xenia and Dominoes

    把 'O' 看成 'X',然后枚举它的四个方向看看是否能放,然后枚举 $2^4$ 种可能表示每种方向是否放了,放了的话就标成 'X',就相当于容斥,对于新的图去dp. dp就是铺地砖,行用二进制来表示 ...

  7. Cookie跨域setDomain和setPath

    CSDN日报20170226--<你离心想事成只差一个计划> 程序员2月书讯 [招募]Python学习班招生啦 Cookie跨域setDomain和setPath 标签: cookiesp ...

  8. vue小程序ref和v-for结合使用得到ref数组的一些问题

    项目中需要对每一个民宿里的每一个房间都需要popup弹出层来介绍每一个房间,房间数据都在一个接口(此民宿)上. 主要代码如下: HTML: <view v-for='(item,index) i ...

  9. 阿里云服务器win2003下iis整合tomcat共享80端口

    阿里云服务器win2003下iis整合tomcat共享80端口 很多机器都用tomcat跟IIS部署不同网站.最近买了阿里云的服务器.于是也想玩一下.网上百度了很多方法.但是都有缺陷说的不是很清楚.通 ...

  10. call 和 apply 用法

    ECMAScript规范中,所有函数都包含这两个方法,并且两个方法的使用基本一致,都是用于改变函数的作用域,即改变函数体内 this 指向.不同的是 call 方法的第二个参数可以接收任意个参数,以逗 ...