J-8 面向对象

静态
工具类

十二、静态

static关键字

  • 静态

  • 使用情况:如果某个成员变量是被所有成员变量共享的,那么就应该定义为static。

  • 可以修饰成员变量,成员方法。

  • 特点:
    ①随着类的加载而加载。
    ②优先于对象存在。
    ③被类的所有对象共享。 例如:53班的学生共同用一个教室编号。
    ④可以通过类名、对象名调用。
    推荐使用类名调用,修饰的内容为:与类相关的,类成员。

       class Student {
      	//非静态变量
      	int num = 10;
      	
      	//静态变量
      	static int num2 = 20;
      }
    
      class StudentDemo {
      	public static void main(String[] args) {
      		Student s = new Student();
      		System.out.println(s.num);
      
      //通过类名、对象名调用。
      		System.out.println(Student.num2);
      		System.out.println(s.num2);
      	}
      } 
    

静态内存图解

静态的注意事项

  • 静态方法中没有this关键字
    因为:静态是随着类的加载而加载,this是随着对象的创建而存在。
    静态比对象先存在。
  • 静态方法只能访问静态的成员变量和静态的成员方法。
    静态方法:只能访问静态成员变量;只能访问静态成员方法。
    非静态方法:可以是静态,也可以是非静态的;

静态变量和成员变量的区别

  • 所属不同:
    静态变量属于类,所以也称为类变量。
    成员变量属于对象,所以也称为实例变量(对象变量)
  • 内存中位置不同:
    静态变量存储于方法区的静态区。
    成员变量存储于堆内存。
  • 内存出现的时间不同
    静态变量随着类的加载而加载,随着类的消失而消失
    成员变量随着对象的创建而存在,随着对象的消失而消失。
  • 调用不同
    静态变量可以通过类名调用,也可以通过对象调用。
    成员变量只能通过对象名调用。

main方法的格式

	public static void main(String[] args){...}
  • public:公共的

  • static:静态的,不需要创建对象,通过类名就可以,方便jvm调用。

  • void:方法的返回值是返回给调用者,而main方法是被jvm调用,返回内容给jvm没有意义。

  • main:常见的方法入口。

  • String[] args:这是一个字符串数组。
    早期是为了接收键盘录入的数据的,格式:
    在控制台输入(现在已经废弃不用)

    javac Maindemo.java
    java Maindemo hello world java
    则args数组长度为3,值为{hello,world,java}。

十三、工具类

  • 工具类中使用静态
    ①在同一个目录下,把两个类写在一个文件和两个文件中是一样的。
    ②把构造方法私有,外界就不能创建对象了。在工具类方法中使用静态,通过类名调用方法。

说明书的制作

如何制作一个说明书:

  • 写一个工作类

  • 对这个类加入文档注释

  • 用工具解析文档注释 javadoc工具

  • 格式:

    javadoc -d 目录 -author - version ArrayTool.java
    

制作帮助文档出错:

  • 找不到可以文档化的公共或受保护的类——告诉我们类的权限不够。

查看帮助文档:

  • 打开index.html

实例:

/**
* 这是针对数组进行操作的工具类
* @author 刘意
* @version V.10
*/
public class ArrayTool {
	
	//把构造方法私有,外界就不能在创建对象了
	/**
	* 这是私有构造
	*/
	private ArrayTool(){}

	/**
	* 这是遍历数组的方法,遍历后的格式是:[元素1, 元素2, 元素3, ...]
	* @param arr 这是要被遍历的数组
	*/
	public static void printArray(int[] arr) {
		System.out.print("[");
		for(int x=0; x<arr.length; x++) {
			if(x == arr.length-1) {
				System.out.println(arr[x]+"]");
			}else {
				System.out.print(arr[x]+", ");
			}
		}
	}
	
	/**
	* 这是获取数组中最大值的方法
	* @param  arr 这是要获取最大值的数组
	* @return 返回数组中的最大值
	*/
	public static int getMax(int[] arr) {
		int max = arr[0];
		
		for(int x=1; x<arr.length; x++) {
			if(arr[x] > max) {
				max = arr[x];
			}
		}
		
		return max;
	}
	
	/**
	* 获取指定元素在数组中第一次出现的索引,如果元素不存在,就返回-1
	* @param arr 被查找的数组 
	* @param value 要查找的元素
	* @return 返回元素在数组中的索引,如果不存在,返回-1
	*/
	public static int getIndex(int[] arr,int value) {
		int index = -1;
		
		for(int x=0; x<arr.length; x++) {
			if(arr[x] == value) {
				index = x;
				break;
			}
		}
		
		return index;
	}
}
posted @ 2015-08-26 15:36  小懒66  阅读(251)  评论(1编辑  收藏  举报