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;
}
}