zoukankan      html  css  js  c++  java
  • Java 面向对象之静态

    静态

    1、没有静态:如果某个类型的所有对象,都具有一个相同的属性值,那么这个属性值就没有必要在所有对象中,都存储一份。还有坏处:浪费内存空间;维护难度大,一旦需要修改,就得修改所有的对象。

    2、有静态的状态:如果某个类型的所有对象,都具有一个相同的属性值,那么就在这个属性的定义上,加一个static静态关键字。让该变量存储在方法区字节码的静态区中,避免了所有对象都存储相同数据的问题,节省了内存空间,将来维护容易(只需要修改一次)。

    静态变量

    1、用static关键字修饰的变量 不会随着对象的变化而变化

    2、加载时机:随着类的加载而加载,加载进方法区的静态区

    3、静态变量在对象之前就存在,被该类的所有对象所共享

    4、可以使用 类名.变量名 直接调用,也可使用对象来调用

    静态方法

    1、用static关键字修饰的方法

    2、静态方法不能使用非静态变量

      原因:静态方法在一开始就被加载进静态区,可以在没创建对象时使用,而非静态变量只有在对象创建之后

        才能使用,如果静态方法可以访问非静态的变量,就相当于在对象创建之前就访问了对象里面的数据

    3、静态方法不能访问非静态方法

      原因:非静态方法可以访问非静态变量,如果静态方法可以访问非静态方法,就相当于访问了非静态变量,

        与第二点矛盾。

    4、静态方法中不能存在this关键字

      原因:静态方法在对象创建之前就存在了,而this指代当前对象,如果使用this指针,就相当于在

        对象创建之前访问对象  

     5.总结 静态不可以访问非静态,非静态可以访问静态。

    静态变量和非静态变量的区别

    1、概念上 ,所属不同

      非静态变量属于对象,静态变量属于类

    2、内存空间不同,存储位置不同

      非静态属于对象,所以存储在堆内存中

      静态变量属于类,存储在方法区的静态区中

    3、生命周期不同

      非静态变量随着对象的创建而存在,消失而消失

      静态变量随着类的加载而存在,类的消失而消失

    4、访问方式不同

      非静态变量 对象名.变量名;

      静态变量 类名.静态对象名;   对象名.静态变量名;

    补充内容:主方法解释

    public static void main(String[] args)

    关键字public 表示公共状态,权限修饰符,所有情况都可以访问

      主方法是所有虚拟机都直接调用的,语言之间相互调用,需要使用最高权限。

    static 静态 在不创建对象的情况下也可以访问

      主方法是jvm虚拟机直接调用的,测试类中,不需要定义成员变量,也不需要有对象存储数据,

      可以直接调用主方法,主方法没有必要声明为非静态;jvmC语言写的,是一个面向过程的语言,不能创建对象。

    void 返回值为空

    main 程序的唯一入口

    Sring[] args 形式参数 字符串类型的数组

    补充内容:工具类

    1、工具类:在一个类中,没有维护什么数据,没有任何的成员变量,相当于是一个工具。

      类中就都是一些静态方法,快速的解决一些常见的问题。

    2、名称:ArrayTool

    3、作用:可以提供操作数据的各种方法

    4、功能:

      数组的遍历

      获取数组的最大值

      获取数组的最小值

      数组元素的交换

      数组元素反转

    5、方法都是静态的,不需要创建对象;创建对象会浪费系统资源。希望控制不让创建对象。

      方式:使用构造方法私有化

    public class Test2 {
        private Test2(){}
        /**数组的遍历
        @param arr 要遍历的数组
        */
        public static void printArr(int[] arr) {
            for(int i = 0; i < arr.length; i++) {
                System.out.print(arr[i] + " ");
            }
            System.out.println();
        }
        /**
        数组获取最大值
        @param arr 要获取最大值的数组
        @return 获取到的最大值
        */
        public static int getMax(int[] arr) {
            int max = arr[0];
            for(int i = 1; i < arr.length; i++) {
                if(arr[i] > max) {
                    max = arr[i];
                }
            }
            return max;
        }
        /**
        获取数组最小值
        @param arr 要获取最小值的数组
        @return 获取到的最小值
        */
        public static int getMin(int[] arr) {
            int min = arr[0];
            for (int i = 1; i < arr.length; i++) {
                if(arr[i] < min) {
                    min  = arr[i];
                }
            }
            return min;
        }
        /**
        交换数组中的两个元素
        @param arr 要交换元素的数组
        @param a 要交换的第一个元素的索引
        @param b 要交换的第二个元素的索引
        */
        public static void swap(int[] arr, int a, int b) {
            int temp = arr[a];
            arr[a] = arr[b];
            arr[b] = temp;
        }
        /**
        数组反转
        @param arr 要反转的数组
        */
        public static void reverse(int[] arr) {
            for(int i = 0, j = arr.length - 1; i < j; i++, j--) {
                swap(arr, i, j);
            }
        }
        /**
         冒泡排序
         * @param arr 要排序的数组
         */
        public static void paiXu(int[] arr) {
            for(int i=0;i<arr.length;i++) {
                for(int j=0;j<arr.length-1-i;j++) {
                    if(arr[i]<arr[j]) {
                        swap(arr, i, j);
                    }
                }
            }
        }
    }
    工具类模拟

    6、帮助文档的制作

    1、工具类准备好之后,编译成.class的字节码文件,外界就无法看懂,所以需要编写工具类的程序员,准备一份工具类的帮助文档。

    2、文档注释:用于给代码生成帮助文档的注释

      格式:

    /**

          文档注释

    */

      特点:

        不能嵌套

    3、帮助文档注解:将来可以被文档生成工具解析出来的格式,可以解析出来其中的数据

      作者:@author lc

      版本:@version v1.0

      从哪个版本该是:@since

      参数:@param 参数名称 参数名称的解释

      返回值:@return 返回内容的解释

    4、生成帮助文档:

      使用jdk中的bin目录中的javadoc这个工具,就可以生成帮助文档

      Javadoc -d ArrayToolDoc -author -version 源代码文件

    5、帮助文档的使用

      1、虽然以后不去制作帮助文档,但是对于已经存在的工具类,使用频繁,频繁使用工具类的帮助文档。

      2、在线帮助文档:

        http://tool.oschina.net/apidocs

      3、离线的帮助文档:

          1、打开文档

          2、点击显示

          3、点击索引

          4、搜索需要的类型

  • 相关阅读:
    jenkins无法显示html样式问题解决
    自定的 HttpModule 为什么总是执行两次
    符号服务器
    ThreadContext
    ThreadContext
    从代码看 asp.net 处理过程
    关于动态编译
    System.Web.HttpContext.Current 跟踪分析
    使用另一种方式实现会话功能
    for 与 foreach 性能
  • 原文地址:https://www.cnblogs.com/xfdhh/p/11181648.html
Copyright © 2011-2022 走看看