黑马程序员技术交流社区

标题: static静态方法应用以及制作帮助文档API [打印本页]

作者: 淡定..    时间: 2015-5-5 10:14
标题: static静态方法应用以及制作帮助文档API
static 用法
静态:static
用法:作为修饰符,用于修饰成员(成员变量和函数)
      被修饰以后不仅可以被对象调用而且也可以被类调用。类名.类静态成员
特点:1、随着类的加载而加载(当建立对象的时候,静态变量就会被加载进来,这时候静态变量就不会在堆内存而是在方法区),也就是随着类的存在而存在,生命周期长
      2、优先于对象存在(静态是先存在,对象是后存在)
      3、被所用对象共享(在方法区,节省内存)
      4、可以直接被类调用
实例变量和类变量的区别:
1、类变量是存放在方法区
   实例变量是存放在堆内存
2、类变量随着类的消失而消失
   实例变量随着对象的消失而消失
静态使用注意事项:
1、静态方法只能访问静态成员
   非静态方法既能访问静态也能访问非静态成员
2、 静态方法不能定义this、super关键字
   因为静态优先对象存在,所以不能用this
3、主函数是静态
静态的利弊:
利:可以节省空间,可以被类调用
弊:生命周期长,访问出现局限性
什么时候使用静态变量
用从两方面入手(成员变量和函数)
什么时候使用静态变量?
当对象中的数据是共享的时候,用静态变量
什么时候使用静态函数
当功能内部没有非静态变量的时候,可使用静态函数

主函数的定义

1、Public:  是最大权限的访问
2、Static:  代表随着类的加载而加载
3、Void:    没有具体的返回值
4、Main:    是一个特殊的单词,供JVM识别
5、String[] args:是函数的参数,参数的类型是数组,数组中的元素字符串
6、主函数是固定格式,只有一个能改就是“args”
7、JVM调用函数的时候传入的参数是new String[0];
class StaticDemo
{
        public static void main(String[] args)
        {
                Person ren=new Person();
                ren.name="lilei";
                ren.per();
                //Person.per();出现错误以为“name”是非静态;
                String[] arr={"haha","xixi","hehe"};
                MaiTest.main(arr);//调用静态方法
        }
}
class Person
{
        String name;//成员变量,实例变量;
        static String country="CN";//静态变量,类的变量
        public void per()
        {
                System.out.println(name+"...."+country);
        }
}
class MaiTest
{
        public static void main(String[] args)
        {
                for(int i=0;i<args.length;i++)
                        System.out.println(args[i]);
        }
}
静态的应用
//静态的应用-工具类
/*
将功能进行抽取、封装
建立一个ArrayTool对象使用这个工具
方法未使用特殊数据时,应用static
为了防止该类被其他程序建立对象,将该类的主函数私有化
*/
class ArrayTool
{
        private ArrayTool(){};//私有化函数,不能建立对象
        //取数组的最大值
        public static int Max(int[] arr)
        {
                int max=0;
                for(int i=1;i<arr.length;i++)
                {
                        if(arr[max]<arr[i])
                                max=i;
                }
                return arr[max];
        }
        //取数组的最小值
        public static int Min(int[] arr)
        {
                int min=0;
                for(int i=1;i<arr.length;i++)
                {
                        if(arr[min]>arr[i])
                                min=i;
                }
                return arr[min];
        }
        //选择排列
        public static void seleftSolf(int[] arr)
        {
                for(int i=0;i<arr.length-1;i++)
                {
                        for(int j=i+1;j<arr.length;j++)
                        {
                                if(arr[i]>arr[j])
                                        swap(arr,i,j);
                        }
                }
        }
        //冒泡排列
        public static void maoSolf(int[] arr)
        {
                for(int i=0;i<arr.length-1;i++)
                {
                        for(int j=0;j<arr.length-i-1;j++)
                        {
                                if(arr[j]>arr[j+1])
                                        swap(arr,j,j+1);
                        }
                }
        }
        //排序交换
        private static void swap(int[] arr,int i,int j)
        {
                int tem=arr[i];
        arr[i]=arr[j];
                arr[j]=tem;
        }
        public static void printArray(int[] arr)
        {
                System.out.print("[");
                for(int i=0;i<arr.length;i++)
                {
                        if(i !=arr.length-1)
                                System.out.print(arr[i]+",");
                        else
                                System.out.print(arr[i]+"]");
                }
        }
}
class ArrayToolDemo
{
        public static void main(String[] args)
        {
                int[] arr={2,15,7,12,4};
                int max =ArrayTool.Min(arr);
                System.out.println("max="+max);
                ArrayTool.printArray(arr);
                ArrayTool.maoSolf(arr);
                ArrayTool.printArray(arr);
        }
}
制作文档帮助
/**
建立了一个对数组的工具类
@author 刘东康
@version V1.1
        /**
        获取数组中最大的值
        @param arr 接受一个为int类型的数组
        @return 会返回一个最大的值
        */
        public static int Max(int[] arr)
        {
                int max=0;
                for(int i=1;i<arr.length;i++)
                {
                        if(arr[max]<arr[i])
                                max=i;
                }
                return arr[max];
        }
静态代码块的特点
/**
静态代码块的特点:随着类的加载而执行,只执行一次,并优先于主函数,给类初始化
*/
class StaticCode
{
        //静态代码块,给类初始化
        static
        {
                System.out.println("a");
        }
        //构造代码块,给对象初始化
        {
                System.out.println("b");
        }
        //有参数的构造函数
        StaticCod(int a)
        {
               
        }
}




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2